Skip to content

如何设置 LangGraph 应用程序以进行部署

为了将 LangGraph 应用程序部署到 LangGraph Cloud(或进行自托管),必须使用 LangGraph API 配置文件 对其进行配置。本操作指南将讨论使用 pyproject.toml 定义包依赖项来设置 LangGraph 应用程序以进行部署的基本步骤。

本演练基于 此仓库,你可以对其进行操作,以深入了解如何设置 LangGraph 应用程序进行部署。

使用 requirements.txt 进行设置

如果你更喜欢使用 requirements.txt 进行依赖项管理,请查看 本操作指南

使用单仓库进行设置

如果你有兴趣部署位于单仓库内的图,请查看 仓库以获取相关示例。

最终的仓库结构大致如下:

my-app/
├── my_agent # 所有项目代码都存放在此处
   ├── utils # 图的实用工具
      ├── __init__.py
      ├── tools.py # 图的工具
      ├── nodes.py # 图的节点函数
      └── state.py # 图的状态定义
   ├── __init__.py
   └── agent.py # 构建图的代码
├── .env # 环境变量
├── langgraph.json  # LangGraph 的配置文件
└── pyproject.toml # 项目的依赖项

每一步之后,都会提供一个示例文件目录,以展示如何组织代码。

指定依赖项

可以选择在以下文件之一中指定依赖项:pyproject.tomlsetup.pyrequirements.txt。如果这些文件都未创建,则可以稍后在 LangGraph API 配置文件 中指定依赖项。

以下依赖项将包含在镜像中,只要版本范围兼容,你也可以在代码中使用它们:

langgraph>=0.2.56,<0.4.0
langgraph-sdk>=0.1.53
langgraph-checkpoint>=2.0.15,<3.0
langchain-core>=0.2.38,<0.4.0
langsmith>=0.1.63
orjson>=3.9.7
httpx>=0.25.0
tenacity>=8.0.0
uvicorn>=0.26.0
sse-starlette>=2.1.0,<2.2.0
uvloop>=0.18.0
httptools>=0.5.0
jsonschema-rs>=0.20.0
structlog>=23.1.0

示例 pyproject.toml 文件:

[tool.poetry]
name = "my-agent"
version = "0.0.1"
description = "An excellent agent build for LangGraph cloud."
authors = ["Polly the parrot <1223+polly@users.noreply.github.com>"]
license = "MIT"
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.9"
langgraph = "^0.2.0"
langchain-fireworks = "^0.1.3"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

示例文件目录:

my-app/
└── pyproject.toml   # Python packages required for your graph

指定环境变量

可以选择在文件(例如 .env)中指定环境变量。请参阅环境变量参考,为部署配置其他变量。

示例 .env 文件:

MY_ENV_VAR_1=foo
MY_ENV_VAR_2=bar
FIREWORKS_API_KEY=key

示例文件目录:

my-app/
├── .env             # 包含环境变量的文件
└── pyproject.toml

定义图

实现你的图!图可以在单个文件或多个文件中定义。记录要包含在 LangGraph 应用程序中的每个 CompiledGraph 的变量名。这些变量名将在创建 LangGraph API 配置文件 时使用。

示例 agent.py 文件,展示了如何从你定义的其他模块中导入(这里未展示这些模块的代码,请查看 此仓库 以了解其实现):

# my_agent/agent.py
from typing import Literal
from typing_extensions import TypedDict

from langgraph.graph import StateGraph, END, START
from my_agent.utils.nodes import call_model, should_continue, tool_node # 导入节点
from my_agent.utils.state import AgentState # 导入状态

# 定义配置
class GraphConfig(TypedDict):
    model_name: Literal["anthropic", "openai"]

workflow = StateGraph(AgentState, config_schema=GraphConfig)
workflow.add_node("agent", call_model)
workflow.add_node("action", tool_node)
workflow.add_edge(START, "agent")
workflow.add_conditional_edges(
    "agent",
    should_continue,
    {
        "continue": "action",
        "end": END,
    },
)
workflow.add_edge("action", "agent")

graph = workflow.compile()

CompiledGraph 赋值给变量

LangGraph Cloud 的构建过程要求将 CompiledGraph 对象赋值给 Python 模块顶层的一个变量。

示例文件目录:

my-app/
├── my_agent # 所有项目代码都位于此处
   ├── utils # 图的实用工具
      ├── __init__.py
      ├── tools.py # 图的工具
      ├── nodes.py # 图的节点函数
      └── state.py # 图的状态定义
   ├── __init__.py
   └── agent.py # 构建图的代码
├── .env
└── pyproject.toml

创建 LangGraph API 配置

创建一个名为 langgraph.jsonLangGraph API 配置文件。有关配置文件 JSON 对象中每个键的详细解释,请参阅 LangGraph CLI 参考

示例 langgraph.json 文件:

{
  "dependencies": ["."],
  "graphs": {
    "agent": "./my_agent/agent.py:graph"
  },
  "env": ".env"
}

请注意,CompiledGraph 的变量名出现在顶级 graphs 键的每个子键值的末尾(即 :<variable_name>)。

配置文件位置

LangGraph API 配置文件必须放置在与包含已编译图和相关依赖项的 Python 文件处于同一级别或更高级别的目录中。

示例文件目录:

my-app/
├── my_agent # 所有项目代码都位于此处
   ├── utils # 图的实用工具
      ├── __init__.py
      ├── tools.py # 图的工具
      ├── nodes.py # 图的节点函数
      └── state.py # 图的状态定义
   ├── __init__.py
   └── agent.py # 构建图的代码
├── .env # 环境变量
├── langgraph.json  # LangGraph 的配置文件
└── pyproject.toml # 项目的依赖项

下一步

在你设置好项目并将其放在 GitHub 仓库中后,就该部署你的应用程序了。

Comments