如何使用 pyproject.toml 设置 LangGraph 应用程序¶
要将 LangGraph 应用程序部署到 LangGraph 平台(或自托管),必须使用 LangGraph 配置文件 进行配置。本指南将讨论使用 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.toml
、setup.py
或 requirements.txt
。如果没有创建这些文件中的任何一个,可以在 LangGraph 配置文件 中稍后指定依赖项。
以下依赖项将包含在镜像中,您也可以在代码中使用它们,只要版本范围兼容:
langgraph>=0.3.27
langgraph-sdk>=0.1.66
langgraph-checkpoint>=2.0.23
langchain-core>=0.2.38
langsmith>=0.1.63
orjson>=3.9.7,<3.10.17
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>=24.1.0
cloudpickle>=3.0.0
示例 pyproject.toml
文件:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "my-agent"
version = "0.0.1"
description = "为 LangGraph 平台构建的优秀代理程序。"
authors = [
{name = "Polly the parrot", email = "1223+polly@users.noreply.github.com"}
]
license = {text = "MIT"}
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
"langgraph>=0.2.0",
"langchain-fireworks>=0.1.3"
]
[tool.hatch.build.targets.wheel]
packages = ["my_agent"]
示例文件目录:
指定环境变量¶
环境变量可以可选地在一个文件中指定(例如 .env
)。请参阅 环境变量参考 以配置部署的附加变量。
示例 .env
文件:
示例文件目录:
定义图¶
实现你的图!图可以定义在一个文件中或多个文件中。请注意每个 CompiledStateGraph 的变量名,这些将被包含在 LangGraph 应用程序中。稍后创建 LangGraph 配置文件时会使用这些变量名。
示例 agent.py
文件,展示了如何从你定义的其他模块导入(此处未展示模块的代码,请参见 此仓库 查看其具体实现):
API Reference: StateGraph | END | START
# 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()
示例文件目录:
my-app/
├── my_agent # 所有项目代码都在这里
│ ├── utils # 图的实用工具
│ │ ├── __init__.py
│ │ ├── tools.py # 图的工具
│ │ ├── nodes.py # 图的节点函数
│ │ └── state.py # 图的状态定义
│ ├── __init__.py
│ └── agent.py # 构建图的代码
├── .env
└── pyproject.toml
创建 LangGraph 配置文件¶
创建一个名为 langgraph.json
的 LangGraph 配置文件。有关配置文件 JSON 对象中每个键的详细说明,请参阅 LangGraph 配置文件参考。
示例 langgraph.json
文件:
请注意,顶级 graphs
键下每个子键的值末尾是 CompiledGraph
变量名(即 :<variable_name>
)。
配置文件位置
LangGraph 配置文件必须放置在包含编译图和相关依赖项的 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 仓库之后,是时候 部署您的应用 了。