{"id":75615,"date":"2024-10-31T08:00:00","date_gmt":"2024-10-30T23:00:00","guid":{"rendered":"https:\/\/www.creationline.com\/tech-blog\/?p=75615"},"modified":"2024-10-30T18:46:13","modified_gmt":"2024-10-30T09:46:13","slug":"langgraph%e3%81%a8azure-openai%e3%82%92%e7%b5%84%e3%81%bf%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86-ai-langgraph-azure-openai-llm-python","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615","title":{"rendered":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u306f\u3058\u3081\u306b<\/h2>\n\n\n\n<p><a href=\"https:\/\/langchain-ai.github.io\/langgraph\/\" target=\"_blank\" rel=\"noreferrer noopener\">LangGraph<\/a>\u3068\u306f\u3001LLM (Lagre Language Models; \u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb)\u3092\u4f7f\u7528\u3057\u305f\u3001\u30b9\u30c6\u30fc\u30c8\u30d5\u30eb\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3084\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u5148\u306e\u30d6\u30ed\u30b0\u8a18\u4e8b\u300c<a href=\"\/tech-blog\/75504\" target=\"_blank\" rel=\"noreferrer noopener\">LangGraph\u3092LLM\u306a\u3057\u3067\u3061\u3087\u3063\u3068\u89e6\u3063\u3066\u307f\u3088\u3046<\/a>\u300d\u3067\u306f\u3001LLM\u95a2\u9023\u30b3\u30fc\u30c9\u3092\u307e\u3063\u305f\u304f\u66f8\u304b\u305a\u3001LangGraph\u305d\u306e\u3082\u306e\u306e\u52d5\u304d\u3092\u898b\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u306e\u307f\u3092\u66f8\u3044\u3066\u307f\u307e\u3057\u305f\u3002\u3053\u308c\u3092\u524d\u63d0\u3068\u3057\u3066\u672c\u7a3f\u3092\u9032\u3081\u307e\u3059\u306e\u3067\u3001\u672a\u8aad\u3067\u3057\u305f\u3089\u300c<a href=\"\/tech-blog\/75504\" target=\"_blank\" rel=\"noreferrer noopener\">LangGraph\u3092LLM\u306a\u3057\u3067\u3061\u3087\u3063\u3068\u89e6\u3063\u3066\u307f\u3088\u3046<\/a>\u300d\u304b\u3089\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>LangGraph\u306e\u30b3\u30fc\u30c9\u304c\u4f55\u3068\u306a\u304f\u7406\u89e3\u3067\u304d\u305f\u3068\u3053\u308d\u3067\u3001\u3044\u3088\u3044\u3088LLM\u95a2\u9023\u30b3\u30fc\u30c9\u3092\u7d44\u307f\u8fbc\u3093\u3067\u307f\u307e\u3059\u3002\u672c\u7a3f\u3067\u306f <a href=\"https:\/\/azure.microsoft.com\/ja-jp\/products\/ai-services\/openai-service\" target=\"_blank\" rel=\"noreferrer noopener\">Azure OpenAI<\/a> \u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u304a\u3055\u3089\u3044\uff1aLangGraph\u306e\u307f\u306e\u30b3\u30fc\u30c9<\/h2>\n\n\n\n<p>\u4e00\u65e6LLM\u95a2\u9023\u30b3\u30fc\u30c9\u3092\u542b\u3081\u306a\u3044LangGraph\u306e\u307f\u306e\u30b3\u30fc\u30c9\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from typing_extensions import TypedDict\nfrom langgraph.graph import StateGraph, START, END\n\n# \u53d7\u3051\u6e21\u3057\u3059\u308b\u30c7\u30fc\u30bf\nclass State(TypedDict):\n    question: str\n    answer: str\n\n# Node\u3092\u5ba3\u8a00\ndef node(state: State):\n    print(\"Q: \" + state[\"question\"])\n    return {\"answer\": \"answer\"}\n\n# \u30b0\u30e9\u30d5\u3092\u69cb\u6210\nworkflow = StateGraph(State)\n\n# \u30b0\u30e9\u30d5\u306bNode\u3092\u8ffd\u52a0\nworkflow.add_node(\"node\", node)\n\n# Edge\u306bNode\u3092\u8ffd\u52a0(\u3069\u306e\u30ce\u30fc\u30c9\u304b\u3089\u3069\u306e\u30ce\u30fc\u30c9\u306b\u51e6\u7406\u304c\u79fb\u308b\u304b\u306e\u8868\u73fe)\nworkflow.add_edge(START, \"node\")\nworkflow.add_edge(\"node\", END)\n\n# \u30b0\u30e9\u30d5\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\napp = workflow.compile()\n\n# \u30b0\u30e9\u30d5\u53ef\u8996\u5316\napp.get_graph().print_ascii()\n\n# \u30b0\u30e9\u30d5\u3092\u5b9f\u884c\nres = app.invoke({\"question\": \"question\"}, debug=True)\nprint(\"A: \" + res[\"answer\"])<\/pre>\n\n\n\n<p>\u8cea\u554f\u3092\u5165\u529b\u3057\u3066\u56de\u7b54\u3092\u51fa\u529b\u3059\u308b\u3082\u306e\u3067\u3059\u3002\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30c7\u30d0\u30c3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">+-----------+\n| __start__ |\n+-----------+\n      *\n      *\n      *\n  +------+\n  | node |\n  +------+\n      *\n      *\n      *\n +---------+\n | __end__ |\n +---------+\n[-1:checkpoint] State at the end of step -1:\n{}\n[0:tasks] Starting step 0 with 1 task:\n- __start__ -> {'question': 'question'}\n[0:writes] Finished step 0 with writes to 1 channel:\n- question -> 'question'\n[0:checkpoint] State at the end of step 0:\n{'question': 'question'}\n[1:tasks] Starting step 1 with 1 task:\n- node -> {'question': 'question'}\nQ: question\n[1:writes] Finished step 1 with writes to 1 channel:\n- answer -> 'answer'\n[1:checkpoint] State at the end of step 1:\n{'answer': 'answer', 'question': 'question'}\nA: answer<\/pre>\n\n\n\n<p>\u8a73\u3057\u304f\u306f\u300c<a href=\"\/tech-blog\/75504\" target=\"_blank\" rel=\"noreferrer noopener\">LangGraph\u3092LLM\u306a\u3057\u3067\u3061\u3087\u3063\u3068\u89e6\u3063\u3066\u307f\u3088\u3046<\/a>\u300d\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Azure OpenAI\u306e\u307f\u306e\u30b3\u30fc\u30c9<\/h2>\n\n\n\n<p>Azure OpenAI\u306b\u300cWhat is Docker?\u300d\u3068\u8cea\u554f\u3057\u3066\u5e30\u3063\u3066\u304d\u305f\u7b54\u3048\u3092\u8868\u793a\u3059\u308b\u3060\u3051\u306ePython\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u7528\u610f\u3057\u307e\u3059\u3002<a href=\"https:\/\/github.com\/openai\/openai-python#microsoft-azure-openai\" target=\"_blank\" rel=\"noreferrer noopener\">OpenAI Python API library<\/a>\u3092\u4f7f\u3063\u3066Azure OpenAI\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001<a href=\"https:\/\/pypi.org\/project\/python-dotenv\/\" target=\"_blank\" rel=\"noreferrer noopener\">python-dotenv<\/a>\u3092\u4f7f\u3063\u3066\u63a5\u7d9a\u306b\u5fc5\u8981\u306aAPI\u30ad\u30fc\u306a\u3069\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import os\nfrom openai import AzureOpenAI\nfrom dotenv import load_dotenv\nload_dotenv()\n\ndef send_prompt(prompt):\n    response = None\n    try:\n        client = AzureOpenAI(\n            api_key = os.getenv(\"AZURE_OPENAI_API_KEY\"),\n            azure_endpoint = os.getenv(\"AZURE_OPENAI_ENDPOINT\"),\n            api_version = os.getenv(\"AZURE_OPENAI_API_VERSION\")\n        )\n        response = client.chat.completions.create(\n            model = os.getenv(\"AZURE_OPENAI_MODEL_NAME\"),\n            messages = [{\"role\": \"user\", \"content\": prompt}],\n            max_tokens = 1024,\n            temperature = 0.95\n        )\n    except Exception as e:\n        print(f\"error: {e}\")\n        response = None\n    return response\n\nres = send_prompt(\"What is Docker?\")\nif res:\n    model_dump = res.model_dump()\n    print({\"response\": model_dump['choices'][0]['message']['content']})<\/pre>\n\n\n\n<p>\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306a\u7d50\u679c\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{'response': 'Docker is an open-source platform designed to make it easier to create, deploy, and run applications by using containers. Containers allow developers to package an application with all of the parts it needs, such as libraries and other dependencies, and ship it all out as one package. This means that the application will run on any other Linux machine regardless of any customized settings that machine might have that could differ from the machine used for writing and testing the code.\\n\\nSome key features and concepts associated with Docker include:\\n\\n1. **Containers**: The central concept in Docker. A container is a lightweight, standalone, executable package that includes everything needed to run a piece of software, including the code, runtime, system tools, system libraries, and settings.\\n\\n2. **Images**: Docker containers are created from Docker images. An image is an immutable file that is essentially a snapshot of a container. Images serve as the starting point for running a container.\\n\\n3. **Dockerfile**: This is a text file that contains all the commands a user could call on the command line to assemble an image. Using `docker build` users can create an automated build that executes several command-line instructions in succession.\\n\\n4. **Docker Hub**: A service provided by Docker for finding and sharing container images with your team. It is a public repository for Docker images.\\n\\n5. **Docker Engine**: This is the core part of Docker. It is a client-server application with:\\n    - A server which is a type of long-running program called a daemon process (the `dockerd` command).\\n    - A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do.\\n    - A command-line interface (CLI) client (the `docker` command).\\n\\n6. **Docker Compose**: A tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application\u2019s services.\\n\\n7. **Volumes and Bind Mounts**: Docker provides options for managing persistent data used by Docker containers. Volumes are managed by Docker and are isolated from the core functionality of the host machine, whereas bind mounts may be anywhere on the host system.\\n\\n8. **Networking**: Docker has a powerful networking interface that allows containers to communicate with the world outside, as well as with other containers.\\n\\n9. **Orchestration**: For managing and scaling container deployments, Docker works well with container orchestration tools like Kubernetes.\\n\\nDocker has become a critical tool for developers, sysadmins, and DevOps professionals for its ability to package and run applications in a way that is portable and consistent across various environments. This helps alleviate the \"it works on my machine\" headache by providing a consistent environment from development to production.'}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">LangGraph\u306bAzure OpenAI\u3092\u7d44\u307f\u8fbc\u3080<\/h2>\n\n\n\n<p>\u3053\u3053\u307e\u3067\u3067LangGraph\u306e\u307f\u306e\u30b3\u30fc\u30c9\u3068Azure OpenAI\u306e\u307f\u306e\u30b3\u30fc\u30c9\u3001\u5225\u3005\u306e2\u3064\u3092\u898b\u3066\u304d\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u3092\u5408\u4f53\u3055\u305b\u307e\u3057\u3087\u3046\u3002\u7279\u306b\u809d\u3068\u306a\u308b\u306e\u306fLangGraph\u306e\u307f\u306e\u30b3\u30fc\u30c9\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3057\u3066\u3044\u305f\u300c\u8cea\u554f\u3078\u306e\u56de\u7b54\u300d\u90e8\u5206\u3067\u3042\u308b <code>node<\/code> \u95a2\u6570<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def node(state: State):\n    print(\"Q: \" + state[\"question\"])\n    return {\"answer\": \"answer\"}<\/pre>\n\n\n\n<p>\u3092\u3001Azure OpenAI\u306b\u8cea\u554f\u3057\u3066\u56de\u7b54\u3055\u305b\u308b <code>send_prompt<\/code> \u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\u3002\u6b21\u304c\u5168\u4f53\u306e\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from typing_extensions import TypedDict\nfrom langgraph.graph import StateGraph, START, END\n\nimport os\nfrom openai import AzureOpenAI\nfrom dotenv import load_dotenv\nload_dotenv()\n\n# Azure OpenAI\u306b\u8cea\u554f\u3057\u3066\u56de\u7b54\u3055\u305b\u308b\ndef send_prompt(prompt):\n    response = None\n    try:\n        client = AzureOpenAI(\n            api_key = os.getenv(\"AZURE_OPENAI_API_KEY\"),\n            azure_endpoint = os.getenv(\"AZURE_OPENAI_ENDPOINT\"),\n            api_version = os.getenv(\"AZURE_OPENAI_API_VERSION\")\n        )\n        response = client.chat.completions.create(\n            model = os.getenv(\"AZURE_OPENAI_MODEL_NAME\"),\n            messages = [{\"role\": \"user\", \"content\": prompt}],\n            max_tokens = 1024,\n            temperature = 0.95\n        )\n    except Exception as e:\n        print(f\"error: {e}\")\n        response = None\n    return response\n\n# \u53d7\u3051\u6e21\u3057\u3059\u308b\u30c7\u30fc\u30bf?\nclass State(TypedDict):\n    question: str\n    answer: str\n\n# Node\u3092\u5ba3\u8a00\ndef node(state: State):\n    res = send_prompt(state[\"question\"])\n    if res == None:\n        return {\"answer\": \"\"}\n    else:\n        model_dump = res.model_dump()\n        return {\"answer\": model_dump['choices'][0]['message']['content']}\n\n# \u30b0\u30e9\u30d5\u3092\u69cb\u6210\nworkflow = StateGraph(State)\n\n# \u30b0\u30e9\u30d5\u306bNode\u3092\u8ffd\u52a0\nworkflow.add_node(\"node\", node)\n\n# Edge\u306bNode\u3092\u8ffd\u52a0(\u3069\u306e\u30ce\u30fc\u30c9\u304b\u3089\u3069\u306e\u30ce\u30fc\u30c9\u306b\u51e6\u7406\u304c\u79fb\u308b\u304b\u306e\u8868\u73fe)\nworkflow.add_edge(START, \"node\")\nworkflow.add_edge(\"node\", END)\n\n# \u30b0\u30e9\u30d5\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\napp = workflow.compile()\n\n# \u30b0\u30e9\u30d5\u53ef\u8996\u5316\napp.get_graph().print_ascii()\n\n# \u30b0\u30e9\u30d5\u3092\u5b9f\u884c\nprint(app.invoke({\"question\": \"What is Docker?\"})) # , debug=True))<\/pre>\n\n\n\n<p>\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">+-----------+\n| __start__ |\n+-----------+\n      *\n      *\n      *\n  +------+\n  | node |\n  +------+\n      *\n      *\n      *\n +---------+\n | __end__ |\n +---------+\n{'question': 'What is Docker?', 'answer': \"Docker is an open-source platform that automates the deployment, scaling, and management of applications within containers. First released in 2013, Docker popularized containerization and has become an integral part of many developers' workflow for creating, deploying, and running applications by using containers.\\n\\nContainers allow developers to package an application with all its dependencies\u2014libraries, binaries, and configuration files\u2014into a single package. This ensures that the application runs quickly and reliably in different computing environments, whether on-premises, in the cloud, or on a developer\u2019s personal machine.\\n\\nKey concepts and components of Docker include:\\n\\n- **Images**: These are read-only templates with instructions for creating a Docker container. An image includes the application code, libraries, tools, dependencies, and other files needed to run the application.\\n\\n- **Containers**: A running instance of a Docker image. Containers isolate the application from the underlying system, ensuring consistency regardless of where they are deployed.\\n\\n- **Dockerfile**: A text document that contains all the commands a user could call on the command line to assemble an image. Docker can build images automatically by reading the instructions from a Dockerfile.\\n\\n- **Docker Hub**: A service provided by Docker for finding and sharing container images with your team. It is the world's largest library and community for container images.\\n\\n- **Docker Engine**: The core of Docker, it\u2019s a client-server application with a server side that is a long-running program called a daemon process (the `dockerd` command).\\n\\n- **Docker Compose**: A tool that defines and runs multi-container Docker applications. With Compose, you use a YAML file to configure your application's services.\\n\\nDocker's simple and straightforward syntax allows for easier scripting, automation, and deployment of services. It has had a profound impact on software development, testing, and deployment practices, enabling microservices architectures and facilitating DevOps and continuous integration\/continuous deployment (CI\/CD) workflows.\\n\\nAs of my knowledge cutoff date in March 2023, Docker continues to be widely used, though it faces competition from other containerization technologies and container orchestration platforms like Kubernetes.\"}<\/pre>\n\n\n\n<p>\u3046\u307e\u304f\u52d5\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>\u672c\u7a3f\u3067\u306f\u5358\u7d14\u306aLangGraph\u30b3\u30fc\u30c9\u306b\u3001\u3053\u308c\u307e\u305f\u5358\u7d14\u306aAzure OpenAI\u306e\u30b3\u30fc\u30c9\u3092\u7d44\u307f\u8fbc\u3093\u3067\u307f\u307e\u3057\u305f\u3002\u300c\u958b\u59cb\u2192\u51e6\u7406\u2192\u7d42\u4e86\u300d\u3068\u3044\u3046\u81f3\u6975\u5358\u7d14\u306a\u30b0\u30e9\u30d5\u306a\u306e\u3067\u6b63\u76f4\u306a\u3068\u3053\u308dLangGraph\u306e\u6069\u6075\u306f\u307b\u3068\u3093\u3069\u306a\u3055\u305d\u3046\u3067\u3059\u304c\u3001\u3053\u306e\u5148\u3044\u308d\u3044\u308d\u306a\u51e6\u7406\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u308a\u3001\u6761\u4ef6\u5206\u5c90\u3084\u30eb\u30fc\u30d7\u3001\u4e26\u5217\u51e6\u7406\u304c\u5165\u3063\u3066\u304f\u308b\u3068\u9055\u3063\u3066\u304f\u308b\u3068\u601d\u3044\u307e\u3059\u3002\u305d\u3057\u3066\u3044\u304d\u306a\u308aLangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3088\u308a\u3001\u6700\u521d\u306f<a href=\"\/tech-blog\/75504\" target=\"_blank\" rel=\"noreferrer noopener\">LangGraph\u306e\u307f\u306e\u30b3\u30fc\u30c9<\/a>\u304b\u3089\u66f8\u3044\u3066\u307f\u305f\u3053\u3068\u3067\u3001\u3088\u308a\u7406\u89e3\u304c\u3057\u3084\u3059\u304b\u3063\u305f\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002\u4eca\u5f8c\u306e\u8a18\u4e8b\u3067\u3001\u3055\u3089\u306b\u30b3\u30fc\u30c9\u306b\u51e6\u7406\u3092\u8ffd\u52a0\u3057\u3066\u3044\u304f\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models; \u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb)\u3092\u4f7f\u7528\u3057\u305f\u3001\u30b9\u30c6\u30fc\u30c8\u30d5\u30eb\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3084\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002 \u5148\u306e\u30d6\u30ed\u30b0\u8a18\u4e8b\u300cLangG [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":75660,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[779,58,817,31,323],"tags":[],"class_list":["post-75615","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-azure","category-chatgpt-ai","category-higuchi","category-python"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-30T23:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"639\" \/>\n\t<meta property=\"og:image:height\" content=\"384\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daisuke Higuchi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daisuke Higuchi\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615\"},\"author\":{\"name\":\"Daisuke Higuchi\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"headline\":\"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python\",\"datePublished\":\"2024-10-30T23:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615\"},\"wordCount\":62,\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/langgraph-azure-openai.jpg\",\"articleSection\":[\"AI\",\"Azure\",\"ChatGPT\uff06AI\",\"d-higuchi\",\"Python\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615\",\"name\":\"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/langgraph-azure-openai.jpg\",\"datePublished\":\"2024-10-30T23:00:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"description\":\"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#primaryimage\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/langgraph-azure-openai.jpg\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/langgraph-azure-openai.jpg\",\"width\":639,\"height\":384},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\\\/75615#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ChatGPT\uff06AI\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/chatgpt-ai\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AI\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/chatgpt-ai\\\/ai\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\",\"name\":\"Daisuke Higuchi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"caption\":\"Daisuke Higuchi\"},\"description\":\"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615","og_locale":"ja_JP","og_type":"article","og_title":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;","og_url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2024-10-30T23:00:00+00:00","og_image":[{"width":639,"height":384,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg","type":"image\/jpeg"}],"author":"Daisuke Higuchi","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"Daisuke Higuchi","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"6\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615"},"author":{"name":"Daisuke Higuchi","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"headline":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python","datePublished":"2024-10-30T23:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615"},"wordCount":62,"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg","articleSection":["AI","Azure","ChatGPT\uff06AI","d-higuchi","Python"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615","url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615","name":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#primaryimage"},"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg","datePublished":"2024-10-30T23:00:00+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"description":"AI, Azure, ChatGPT\uff06AI, d-higuchi, Python |\u306f\u3058\u3081\u306b LangGraph\u3068\u306f\u3001LLM (Lagre Language Models;","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#primaryimage","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2024\/10\/langgraph-azure-openai.jpg","width":639,"height":384},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi\/75615#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"ChatGPT\uff06AI","item":"https:\/\/www.creationline.com\/tech-blog\/chatgpt-ai"},{"@type":"ListItem","position":3,"name":"AI","item":"https:\/\/www.creationline.com\/tech-blog\/chatgpt-ai\/ai"},{"@type":"ListItem","position":4,"name":"LangGraph\u3068Azure OpenAI\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u307f\u3088\u3046 #ai #langgraph #azure #openai #llm #python"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206","name":"Daisuke Higuchi","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","caption":"Daisuke Higuchi"},"description":"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002","url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/75615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=75615"}],"version-history":[{"count":3,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/75615\/revisions"}],"predecessor-version":[{"id":75619,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/75615\/revisions\/75619"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media\/75660"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=75615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=75615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=75615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}