Skip to main content
应用程序必须配置一个配置文件才能部署到 LangSmith(或进行自托管)。本操作指南讨论了使用 pyproject.toml 定义包依赖关系来设置应用程序部署的基本步骤。 此示例基于此仓库,它使用了 LangGraph 框架。 最终的仓库结构将类似于:
my-app/
├── my_agent # 所有项目代码位于此处
   ├── utils # 图的实用工具
   ├── __init__.py
   ├── tools.py # 图的工具
   ├── nodes.py # 图的节点函数
   └── state.py # 图的状态定义
   ├── __init__.py
   └── agent.py # 构建图的代码
├── .env # 环境变量
├── langgraph.json  # LangGraph 的配置文件
└── pyproject.toml # 项目的依赖项
LangSmith Deployment supports deploying a LangGraph graph. However, the implementation of a node of a graph can contain arbitrary code. This means any framework can be implemented within a node and deployed on LangSmith Deployment. This lets you implement your core application logic without using additional LangGraph OSS APIs while still using LangSmith for deployment, scaling, and observability. For more details, refer to Use any framework with LangSmith Deployment.
你也可以通过以下方式设置:
  • requirements.txt:用于依赖管理,请查看此操作指南了解如何在 LangSmith 中使用 requirements.txt
  • 单体仓库:要部署位于单体仓库内的图,请查看此仓库以获取示例。
每个步骤后,都会提供一个示例文件目录,以展示代码的组织方式。

指定依赖项

依赖项可以选择在以下文件之一中指定:pyproject.tomlsetup.pyrequirements.txt。如果未创建这些文件,则可以在稍后的配置文件中指定依赖项。 以下依赖项将包含在镜像中,你也可以在代码中使用它们,只要版本范围兼容即可:
langgraph>=0.4.10,<2
langgraph-sdk>=0.3.5
langgraph-checkpoint>=3.0.1,<5
langchain-core>=0.3.66
langsmith>=0.6.3
orjson>=3.9.7
httpx>=0.25.0
tenacity>=8.0.0
uvicorn>=0.26.0
sse-starlette>=2.1.0,<3.4.0
uvloop>=0.18.0
httptools>=0.5.0
jsonschema-rs>=0.20.0
structlog>=24.1.0
cloudpickle>=3.0.0
truststore>=0.1
protobuf>=6.32.1,<7.0.0
grpcio>=1.78.0,<1.79.0
grpcio-tools>=1.78.0,<1.79.0
grpcio-health-checking>=1.78.0,<1.79.0
opentelemetry-api>=0.0.1
opentelemetry-sdk>=0.0.1
opentelemetry-exporter-otlp-proto-http>=0.0.1
示例 pyproject.toml 文件:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "my-agent"
version = "0.0.1"
description = "为 LangSmith 构建的优秀智能体。"
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.6.0",
    "langchain-fireworks>=0.1.3"
]

[tool.hatch.build.targets.wheel]
packages = ["my_agent"]
示例文件目录:
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
By default, LangSmith follows the uv/pip behavior of not installing prerelease versions unless explicitly allowed. If want to use prereleases, you have the following options:
  • With pyproject.toml: add allow-prereleases = true to your [tool.uv] section.
  • With requirements.txt or setup.py: you must explicitly specify every prerelease dependency, including transitive ones. For example, if you declare a==0.0.1a1 and a depends on b==0.0.1a1, then you must also explicitly include b==0.0.1a1 in your dependencies.

定义图

实现你的图。图可以在单个文件或多个文件中定义。注意每个 CompiledStateGraph 的变量名,这些变量名将包含在应用程序中。变量名将在稍后创建配置文件时使用。 示例 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 GraphContext(TypedDict):
    model_name: Literal["anthropic", "openai"]

workflow = StateGraph(AgentState, context_schema=GraphContext)
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.json配置文件。请参阅配置文件参考以获取配置文件中 JSON 对象每个键的详细说明。 示例 langgraph.json 文件:
{
  "dependencies": ["."],
  "graphs": {
    "agent": "./my_agent/agent.py:graph"
  },
  "env": ".env"
}
注意,CompiledGraph 的变量名出现在顶级 graphs 键的每个子键值的末尾(即 :<变量名>)。
配置文件位置 配置文件必须放置在与包含编译图及相关依赖项的 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 仓库后,就可以部署你的应用程序了。