7.1 部署(Deployment)
本节介绍如何使用 LangSmith 平台部署 LangChain/LangGraph 应用。
部署概述
LangSmith 提供了专为 有状态、长时间运行的 Agent 设计的部署平台。与传统的无状态 Web 应用托管平台不同,LangSmith 平台专门处理 Agent 的特定基础设施需求:
- 持久化状态管理:自动处理对话状态和检查点
- 后台执行:支持长时间运行的任务
- 一键部署:从 GitHub 仓库直接部署
- 内置 API:提供自定义检查点、内存和对话线程的 API

传统托管 vs LangSmith 平台
| 特性 | 传统托管平台 | LangSmith 平台 |
|---|---|---|
| 状态管理 | 无状态,需自行实现 | 内置持久化状态 |
| 执行模式 | 短期请求/响应 | 支持长时间运行 |
| 检查点 | 需自行实现 | 自动检查点 |
| 对话管理 | 需自行实现 | 内置对话线程 |
| 监控 | 需集成第三方工具 | 与 LangSmith 深度集成 |
部署前准备
1. 账户准备
- GitHub 账户:代码需要托管在 GitHub 仓库中(支持公开和私有仓库)
- LangSmith 账户:免费注册
2. 项目结构
确保你的 LangGraph 应用具有标准的项目结构:
my-agent/
├── agent.py # Agent 定义
├── langgraph.json # LangGraph 配置文件
├── requirements.txt # Python 依赖
└── .env.example # 环境变量示例3. langgraph.json 配置
json
{
"graphs": {
"agent": "./agent.py:graph"
},
"env": ".env"
}部署流程

Step 1: 连接 GitHub
- 登录 LangSmith
- 导航到 Deployments 页面
- 点击 "+ New Deployment"
- 连接你的 GitHub 账户
- 选择包含 LangGraph 应用的仓库
Step 2: 配置部署
配置部署参数:
- 部署名称:给部署一个易于识别的名称
- 分支:选择要部署的 Git 分支
- 环境变量:配置 API Keys 等敏感信息
Step 3: 启动部署
点击部署按钮后,平台将:
- 拉取代码
- 构建容器镜像
- 部署服务
- 配置网络
部署通常在 15 分钟内 完成。
Step 4: 验证部署
部署完成后,可以通过以下方式验证:
- Studio 界面:在 LangSmith Studio 中与部署的 Agent 交互
- API 测试:通过 API 端点测试功能
API 访问
获取访问凭证
部署完成后,从 Deployment 详情页获取:
- Deployment URL:API 端点地址
- API Key:访问密钥
使用 LangGraph SDK
python
from langgraph_sdk import get_sync_client
# 创建客户端
client = get_sync_client(
url="your-deployment-url",
api_key="your-langsmith-api-key"
)
# 流式调用 Agent
for chunk in client.runs.stream(
None, # thread_id, None 表示新建
"agent", # graph 名称
input={"messages": [{"role": "human", "content": "Hello!"}]},
stream_mode="updates",
):
print(f"Event: {chunk.event}")
print(chunk.data)异步客户端
python
from langgraph_sdk import get_client
import asyncio
async def main():
client = get_client(
url="your-deployment-url",
api_key="your-langsmith-api-key"
)
# 创建新的对话线程
thread = await client.threads.create()
# 发送消息并获取响应
async for chunk in client.runs.stream(
thread["thread_id"],
"agent",
input={"messages": [{"role": "human", "content": "What is AI?"}]},
stream_mode="updates",
):
print(chunk.data)
asyncio.run(main())对话线程管理
LangSmith 平台内置对话线程管理功能:
创建线程
python
# 创建新线程
thread = await client.threads.create()
thread_id = thread["thread_id"]继续对话
python
# 在同一线程中继续对话
async for chunk in client.runs.stream(
thread_id, # 使用已有的 thread_id
"agent",
input={"messages": [{"role": "human", "content": "Tell me more"}]},
stream_mode="updates",
):
print(chunk.data)获取对话历史
python
# 获取线程状态
state = await client.threads.get_state(thread_id)
messages = state["values"]["messages"]部署配置选项

环境变量
bash
# 在 LangSmith 部署配置中设置
OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
DATABASE_URL=postgresql://...资源配置
根据需求选择合适的资源配置:
| 配置级别 | CPU | 内存 | 适用场景 |
|---|---|---|---|
| Small | 1 vCPU | 2 GB | 开发测试 |
| Medium | 2 vCPU | 4 GB | 生产环境 |
| Large | 4 vCPU | 8 GB | 高负载场景 |
自托管部署
如果不想使用 LangSmith 托管服务,也可以自行部署:
使用 LangServe
python
from fastapi import FastAPI
from langserve import add_routes
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 创建应用
app = FastAPI()
# 定义 Chain
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("human", "{input}")
])
model = ChatOpenAI(model="gpt-4o")
chain = prompt | model
# 添加路由
add_routes(app, chain, path="/chat")
# 运行: uvicorn main:app --host 0.0.0.0 --port 8000Docker 部署
dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]bash
# 构建镜像
docker build -t my-langchain-app .
# 运行容器
docker run -p 8000:8000 \
-e OPENAI_API_KEY=sk-xxx \
my-langchain-app最佳实践
1. 安全性
python
# 使用环境变量管理敏感信息
import os
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise ValueError("OPENAI_API_KEY not set")2. 错误处理
python
from langchain.agents import create_agent
agent = create_agent(
"gpt-4o",
tools=[my_tools],
middleware=[error_handling_middleware]
)
# 错误处理中间件
@wrap_model_call
def error_handling(state, runtime, call_next):
try:
return call_next()
except Exception as e:
logging.error(f"Model call failed: {e}")
raise3. 健康检查
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
async def health_check():
return {"status": "healthy"}
@app.get("/ready")
async def readiness_check():
# 检查依赖服务
return {"status": "ready"}4. 日志记录
python
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 在 Agent 中使用
logger.info("Processing user request")常见问题
Q: 部署失败怎么办?
- 检查
langgraph.json配置是否正确 - 确认所有依赖都在
requirements.txt中 - 查看部署日志获取详细错误信息
Q: 如何更新部署?
推送代码到 GitHub 仓库,平台会自动触发重新部署。
Q: 如何设置自定义域名?
在部署配置中添加自定义域名,并配置 DNS CNAME 记录指向提供的部署 URL。