主题
部署其他框架
将用 Claude Agent SDK、Strands、CrewAI、AutoGen 及其他框架构建的 agent 部署到 LangSmith Deployment。
本指南展示如何使用 Functional API 将一个 Strands Agent 部署到 LangSmith Deployment 并为 LangSmith Observability 设置追踪。你可以对 CrewAI、AutoGen、Google ADK 等其他框架采用同样的方法。
LangSmith Deployment 运行任何框架。对于非基于 Deep Agents、LangChain 或 LangGraph 构建的 agent,使用 deployments-wrap-sdk 包(Google ADK)或 LangGraph Functional API(Claude Agent SDK、Strands、CrewAI、AutoGen 及其他库)来部署。
TIP
对于新构建,考虑 Deep Agents,它是一个开源 harness,供会规划、使用工具、委派给子 agent 并长时间工作的 agent 使用。Deep Agents 可直接部署到 LangSmith Deployment,并有托管 Deep Agents提供完全托管的运行时。
受支持的框架
以下框架在本指南中有端到端示例。每个示例都从 agent.py 导出一个 Agent Server 可以服务的、LangGraph 兼容的图:
<img src="/langsmith-img/79a3b9bb12ec.svg" width="65" height="65" />
<span class="font-semibold">Claude Agent SDK</span>
<img src="/langsmith-img/33f05ec60a74.svg" width="65" height="65" />
<span class="font-semibold">Strands Agents</span>
<img src="/langsmith-img/ad8c174a5531.svg" width="65" height="65" />
<span class="font-semibold">CrewAI</span>
<img src="/langsmith-img/1df315bd938c.svg" width="65" height="65" />
<span class="font-semibold">AutoGen</span>
NOTE
没看到你的框架?Functional API 接受任何可调用对象,因此你可以将后续示例所示的相同模式应用于任何 agent 库。用 @task 和 @entrypoint 包裹你 agent 的入口点,然后部署。
Functional API 如何工作
当一次运行到达 Agent Server 上某个 Functional API 包装的 agent 时:
- 平台用运行输入,以及来自同一线程上先前轮次的任何已保存状态(作为
previous参数传入)调用你被@entrypoint装饰的agent函数。 - 入口点调用你被
@task装饰的函数,该函数将工作委派给框架 agent(Claude Agent SDK、Strands、CrewAI、AutoGen 或另一个库)。 - 入口点返回
entrypoint.final(value=..., save=...)。value是本轮的响应;save是作为下一轮previous使用的被检查点的状态。 - Agent Server 持久化检查点,在支持时流式传输部分输出,并在配置了追踪时记录追踪。
这一模式保留了你框架的执行语义,同时给你标准的 Agent Server 特性:持久运行、多线程持久化、流式端点,以及 LangSmith 可观测性。
前置条件
无论框架如何,你都需要:
- 用于 Functional API 框架的 Python 3.10+(Strands Agents 支持 Python 3.9+)
- 一个 LangSmith API 密钥
通用部署模式
对每个框架都遵循相同的步骤。在各步骤内的标签中选择你的技术栈,把片段组合在一个模块中(例如 agent.py),并将被 @entrypoint 装饰的函数导出为一个名为 agent 的模块级变量。端到端示例一节展示了你可以复制的完整文件。
Install dependencies
为你的框架以及 LangGraph 和 LangSmith 安装 Python 包。
对于 Claude Agent SDK:
bash
pip install "langsmith[claude-agent-sdk]" langgraph "langgraph-cli[inmem]"在你的环境中设置 ANTHROPIC_API_KEY。有关 Anthropic API 密钥,参阅 Claude console。
Define your agent
使用你选择的框架构建你的 agent,与你脱离 LangSmith 时做的完全一样。
python
from claude_agent_sdk import ClaudeAgentOptions
options = ClaudeAgentOptions(
model="claude-sonnet-4-6",
system_prompt="You are a helpful assistant.",
)Wrap with the Functional API
通过一个名为 agent 的、被 @entrypoint 装饰的函数暴露你的 agent。在其内部,用 @task 表示调用该框架的那个工作单元。用 entrypoint.final() 返回响应并在线程上跨轮次持久对话历史。
python
import operator
from claude_agent_sdk import ClaudeSDKClient
from langgraph.func import entrypoint, task
@task
async def invoke_claude(prompt: str) -> str:
async with ClaudeSDKClient(options=options) as client:
await client.query(prompt)
chunks: list[str] = []
async for message in client.receive_response():
chunks.append(str(message))
return "\n".join(chunks)
@entrypoint()
async def agent(messages: list[dict], previous: list[dict] | None = None):
history = operator.add(previous or [], messages)
prompt = history[-1]["content"]
response = await invoke_claude(prompt)
new_message = {"role": "assistant", "content": response}
return entrypoint.final(
value=[new_message],
save=operator.add(history, [new_message]),
)Configure tracing
将框架的原生追踪转发到 LangSmith。在应用启动时调用一次追踪设置,在创建或调用 agent 之前。
python
from langsmith.integrations.claude_agent_sdk import configure_claude_agent_sdk
configure_claude_agent_sdk()有关完整的设置详情,参阅追踪 Claude Agent SDK 应用。
端到端示例
以下示例在单个 agent.py 文件中组合了 agent 定义、Functional API 包装、追踪设置,以及 agent 符号的导出。为你的框架选择标签。
python
import operator
from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient
from langgraph.func import entrypoint, task
from langsmith.integrations.claude_agent_sdk import configure_claude_agent_sdk
configure_claude_agent_sdk()
options = ClaudeAgentOptions(
model="claude-sonnet-4-6",
system_prompt="You are a helpful assistant.",
)
@task
async def invoke_claude(prompt: str) -> str:
async with ClaudeSDKClient(options=options) as client:
await client.query(prompt)
chunks: list[str] = []
async for message in client.receive_response():
chunks.append(str(message))
return "\n".join(chunks)
@entrypoint()
async def agent(messages: list[dict], previous: list[dict] | None = None):
history = operator.add(previous or [], messages)
prompt = history[-1]["content"]
response = await invoke_claude(prompt)
new_message = {"role": "assistant", "content": response}
return entrypoint.final(
value=[new_message],
save=operator.add(history, [new_message]),
)对每个示例都有两件事至关重要:
- 将被
@entrypoint装饰的函数作为agent在模块作用域导出。Agent Server 在服务该图时会导入此符号。 - 返回带
save参数的entrypoint.final(),以便对话状态在线程上跨轮次持久。
项目布局
一个可部署的项目需要这些文件:
my-agent/
├── agent.py # exports the agent graph
├── langgraph.json # Agent Server config
├── pyproject.toml # Python dependencies
└── .env # Provider credentials and LangSmith variableslanggraph.json 将 Agent Server 指向导出的符号:
json
{
"$schema": "https://langgra.ph/schema.json",
"dependencies": ["."],
"graphs": {
"claude_agent": "./agent.py:agent"
},
"env": ".env"
}toml
[project]
name = "my-claude-agent"
version = "0.0.1"
requires-python = ">=3.10"
dependencies = [
"langsmith[claude-agent-sdk]>=0.3.0",
"langgraph>=0.4.0",
]bash
LANGSMITH_API_KEY=your-langsmith-api-key
LANGSMITH_TRACING=true
LANGSMITH_PROJECT=my-claude-agent
ANTHROPIC_API_KEY=your-anthropic-api-key安装依赖
从你的项目目录:
bash
pip install -e .启用追踪
使用项目布局中框架专属的 .env 模板。当 langgraph.json 中设置了 "env": ".env" 时,Agent Server 会加载此文件。
在该文件中设置 LANGSMITH_PROJECT 和你的框架提供商凭据。对于 Claude Agent SDK 和 Strands Agents,还要设置 LANGSMITH_TRACING=true。对于 CrewAI 和 AutoGen,追踪在 agent.py 中通过 OtelSpanProcessor() 和框架 instrumentor 启用,因此只设置 LANGSMITH_API_KEY 和 LANGSMITH_PROJECT。
追踪 会在 LangSmith UI 中显示 agent 调用、工具调用和 LLM 交互。有关框架专属的追踪选项,参阅配置追踪中的链接。
本地运行
使用 LangGraph CLI 启动本地 Agent Server:
bash
langgraph devNOTE
如果 langgraph dev 报告缺少 langgraph-api,在同一环境中安装 langgraph-cli[inmem]。
这会在 http://127.0.0.1:2024 服务该 agent 并打开 LangSmith Studio。用 curl 发送一个请求:
NOTE
langgraph dev 可能在不同的端口上服务。检查终端输出中的 URL,并在需要时更新下方的 curl 命令。
bash
# Create a thread
THREAD=$(curl -s -X POST http://127.0.0.1:2024/threads \
-H "Content-Type: application/json" -d '{}' | python -c "import sys, json; print(json.load(sys.stdin)['thread_id'])")
# Run the agent and wait for the final response
curl -s -X POST "http://127.0.0.1:2024/threads/$THREAD/runs/wait" \
-H "Content-Type: application/json" \
-d '{
"assistant_id": "ASSISTANT_ID",
"input": [{"role": "user", "content": "Hello"}]
}'将 ASSISTANT_ID 替换为你 langgraph.json graphs 对象中的图键。例如,如果你的配置是 "graphs": {"claude_agent": "./agent.py:agent"},就用 claude_agent;如果你的配置是 "graphs": {"strands_agent": "./agent.py:agent"},就用 strands_agent。
NOTE
在部署之前验证 LangGraph API 能在本地运行。如果 langgraph dev 失败,部署到 LangSmith 也会失败。
部署到 LangSmith
一旦 agent 在本地运行,就用 langgraph deploy 部署它:
bash
langgraph deploy --name my-agent有关环境配置、部署类型和修订管理,参阅部署到 Cloud。对于自托管设置,参阅自托管部署。对于不带控制平面、仅用 Docker 托管的情形,参阅部署独立服务器。