Skip to content

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

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

此操作指南基于 这个仓库,您可以通过它来了解如何设置 LangGraph 应用程序以进行部署。

使用 requirements.txt 进行设置

如果您更喜欢使用 requirements.txt 来管理依赖项,请查看 这个操作指南

使用 Monorepo 进行设置

如果您有兴趣在 Monorepo 中部署图,请查看 这个 仓库,以获取如何操作的示例。

最终的仓库结构看起来类似于以下内容:

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.3.0
langgraph-checkpoint>=2.0.5,<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
uvloop>=0.18.0
httptools>=0.5.0
jsonschema-rs>=0.16.3
croniter>=1.0.1
structlog>=23.1.0
redis>=5.0.0,<6.0.0

示例 pyproject.toml 文件:

[tool.poetry]
name = "my-agent"
version = "0.0.1"
description = "为 LangGraph 云构建的优秀代理。"
authors = ["Polly the parrot <1223+polly@users.noreply.github.com>"]
license = "MIT"
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.9.0,<3.13"
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 包

指定环境变量

环境变量可以选择在一个文件中指定(例如 .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 配置文件。有关配置文件中每个键的详细说明,请参阅 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 仓库中后,是时候 部署您的应用 了。

优云智算