Anthropic
Managed Agents
完整指南
构建、部署并编排自主运行的 AI Agent。一次创建,无限复用,托管执行环境,SSE 实时流式传输。
四个关键对象
Managed Agents 由四个核心原语组成。理解它们的边界和职责,是正确设计系统架构的第一步。
Agent(智能体)
持久化的配置模板,包含模型选择、系统提示词和工具集定义。创建一次,在多个 Session 中复用。类比:函数定义,而非函数调用。
持久化 · 可复用Environment(环境)
沙盒容器模板,定义网络访问策略、预装软件包和运行时资源。与 Agent 分离设计,允许同一 Agent 在不同环境中执行。
沙盒隔离 · 可配置Session(会话)
Agent 的单次运行实例。绑定一个 Agent + 一个 Environment,每个任务创建独立 Session,互相隔离,状态不跨越泄漏。
一次性 · 状态隔离Events(事件流)
基于 SSE(Server-Sent Events)的双向通信机制。用户消息写入(POST),Agent 响应和工具调用流式读出(GET),通过 session.status_idle 信号任务完成。
四步运行第一个 Agent
从零到运行中的 Agent,只需四个 API 调用。以下示例使用 Python SDK,假设你已安装依赖并配置了 API Key。
ant)和 Python SDK,并导出 API Key。
brew install anthropics/tap/ant
pip install anthropic
export ANTHROPIC_API_KEY="your-key"
创建 Agent(持久化配置)
from anthropic import Anthropic
client = Anthropic()
agent = client.beta.agents.create(
name="Coding Assistant",
model="claude-sonnet-4-6",
system="You are a helpful coding assistant. Write clean, "
"well-documented code and explain your decisions.",
tools=[{"type": "agent_toolset_20260401"}],
)
print(f"Agent created: {agent.id}")
# Agent ID 是持久的 — 保存它以便后续复用!
创建 Environment(沙盒容器模板)
Environment 定义 Agent 代码执行的沙盒环境。unrestricted 网络模式允许 Agent 访问外部 URL;也可设置 none 完全隔离网络。
environment = client.beta.environments.create(
name="quickstart-env",
config={
"type": "cloud",
"networking": {"type": "unrestricted"}, # 允许网络访问
},
)
print(f"Environment created: {environment.id}")
# Environment ID 同样持久化 — 可跨 Session 复用
创建 Session(运行实例)
Session 将 Agent 配置与 Environment 绑定,产生一个独立的运行实例。每个任务创建独立 Session,保证状态隔离。
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
title="Fibonacci Task — 2026-04-09",
)
print(f"Session created: {session.id}")
# Session 是短暂的 — 每个独立任务用一个新 Session
发送消息并流式接收事件
使用 SSE 建立事件流连接。发送用户消息后,Agent 开始工作并实时推送事件。收到 session.status_idle 说明当前任务已完成。
with client.beta.sessions.events.stream(session.id) as stream:
# 向 Agent 发送用户消息
client.beta.sessions.events.send(session.id, events=[{
"type": "user.message",
"content": [{"type": "text", "text": "创建一个 Fibonacci 数列生成脚本,"
"包含单元测试,并运行验证它正确工作。"}],
}])
# 流式接收 Agent 响应
for event in stream:
match event.type:
case "agent.message":
# Agent 的文本回复
print(f"🤖 Agent: {event.content}")
case "agent.tool_use":
# Agent 正在使用工具(如执行 bash 命令)
print(f"🔧 工具调用: [{event.name}] {event.input}")
case "agent.tool_result":
# 工具执行结果
print(f"✅ 结果: {event.content[:200]}...")
case "session.status_idle":
# Agent 完成任务,退出循环
print("✨ 任务完成")
break
真实世界的应用场景
Managed Agents 适用于需要多步骤推理、代码执行和持续迭代的复杂自动化任务。
代码生成器
自动生成、测试并修复完整项目代码
- Agent 分析需求,设计 API 结构和数据库 Schema
- 生成 FastAPI 路由、Pydantic 模型和 SQLAlchemy ORM 代码
- 执行
pip install安装依赖,运行 pytest - 根据测试失败结果自动修复代码,直到全部通过
- 生成 README 和 API 文档
agent = client.beta.agents.create(
name="Code Generator",
model="claude-sonnet-4-6",
system="You are an expert software engineer. Write production-quality "
"code with tests. Always run tests and fix failures before finishing.",
tools=[{"type": "agent_toolset_20260401"}],
)
数据分析师
处理 CSV、生成图表和洞察报告
- Agent 读取 CSV 文件,检查数据质量和异常值
- 使用 pandas 进行数据清洗和统计聚合
- 用 plotly 生成交互式月度趋势折线图和产品排行柱状图
- 计算关键指标(MoM 增长率、客单价、退货率)
- 输出完整的 HTML 报告,包含 AI 生成的自然语言洞察
client.beta.sessions.events.send(session.id, events=[{
"type": "user.message",
"content": [
{"type": "text", "text": "分析以下销售数据:"},
{"type": "document", "source": {
"type": "base64",
"media_type": "text/csv",
"data": base64_csv_data,
}},
],
}])
DevOps 助手
自动化 CI/CD 配置和基础设施脚本
- 分析项目结构,识别框架版本和测试框架
- 生成
.github/workflows/ci.yml,包含矩阵测试策略 - 编写 Dockerfile(多阶段构建,最小化镜像体积)
- 配置 Vercel 部署步骤和环境变量处理
- 验证 YAML 语法,检查 Secret 引用是否正确
# DevOps Agent 需要访问外部资源(npm, Docker Hub)
environment = client.beta.environments.create(
name="devops-env",
config={
"type": "cloud",
"networking": {"type": "unrestricted"},
},
)
研究助手
抓取、阅读并汇总最新研究资料
- 访问 arXiv、Semantic Scholar API 搜索相关论文
- 下载 PDF,提取摘要、方法和实验结果
- 对比各论文的技术方案(量化、蒸馏、推测解码等)
- 按引用量、新颖性和实用性综合评分排序
- 生成 Markdown 研究报告,附带论文链接和核心贡献摘要
for event in stream:
match event.type:
case "agent.tool_use" if event.name == "bash":
# 实时看到 Agent 正在访问哪些 URL
print(f"📡 访问: {event.input.get('command', '')[:80]}")
case "agent.message":
# 流式打印 Agent 的分析文本
print(event.content, end="", flush=True)
case "session.status_idle":
break
端点速查
所有端点都在 https://api.anthropic.com/v1/ 下。使用 SDK 时,Beta header managed-agents-2026-04-01 由 SDK 自动附加,无需手动处理。
| 端点路径 | 方法 | 描述 | 关键参数 |
|---|---|---|---|
| /v1/agents | POST | 创建 Agent(持久化配置) | name, model, system, tools |
| /v1/agents/:id | GET | 获取 Agent 详情 | id |
| /v1/agents | GET | 列出所有 Agent | limit, after_id |
| /v1/environments | POST | 创建 Environment(沙盒模板) | name, config.type, config.networking |
| /v1/sessions | POST | 创建 Session(运行实例) | agent, environment_id, title |
| /v1/sessions/:id | GET | 获取 Session 状态 | id |
| /v1/sessions/:id/events | GET SSE | 建立 SSE 事件流,接收 Agent 实时输出 | id(路径参数) |
| /v1/sessions/:id/events | POST | 向 Agent 发送用户消息 | events[].type, events[].content |
| 事件类型 | 方向 | 触发时机 |
|---|---|---|
| user.message | → 发送 | 用户向 Agent 发送文本或文件 |
| agent.message | ← 接收 | Agent 生成文本回复(可能分块流式) |
| agent.tool_use | ← 接收 | Agent 调用工具(bash, read_file, web_search 等) |
| agent.tool_result | ← 接收 | 工具执行完毕,返回结果 |
| session.status_idle | ← 接收 | Agent 完成当前任务,等待下一个用户消息 |
| session.status_error | ← 接收 | Session 发生错误,需要处理 |
使用 @anthropic-ai/sdk
TypeScript SDK 提供完整的类型定义,与 Python SDK 的 API 设计几乎一致。以下展示与 Python 快速开始相同的四步流程。
npm install @anthropic-ai/sdk
# 或
bun add @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
});
async function runAgent() {
// 步骤 1: 创建 Agent(一次性,可复用)
const agent = await client.beta.agents.create({
name: "Coding Assistant",
model: "claude-sonnet-4-6",
system:
"You are a helpful coding assistant. Write clean, " +
"well-documented code and explain your decisions.",
tools: [{ type: "agent_toolset_20260401" }],
});
console.log(`Agent created: ${agent.id}`);
// 步骤 2: 创建 Environment
const environment = await client.beta.environments.create({
name: "quickstart-env",
config: {
type: "cloud",
networking: { type: "unrestricted" },
},
});
// 步骤 3: 创建 Session
const session = await client.beta.sessions.create({
agent: agent.id,
environment_id: environment.id,
title: "Fibonacci Task",
});
// 步骤 4: 建立 SSE 流并发送消息
const stream = await client.beta.sessions.events.stream(session.id);
// 发送用户消息
await client.beta.sessions.events.send(session.id, {
events: [
{
type: "user.message",
content: [
{
type: "text",
text: "创建一个 Fibonacci 数列生成脚本,包含单元测试。",
},
],
},
],
});
// 消费事件流
for await (const event of stream) {
switch (event.type) {
case "agent.message":
console.log("🤖 Agent:", event.content);
break;
case "agent.tool_use":
console.log(`🔧 工具: [${event.name}]`);
break;
case "agent.tool_result":
console.log("✅ 结果:", String(event.content).slice(0, 200));
break;
case "session.status_idle":
console.log("✨ 任务完成");
stream.return(); // 关闭流
break;
case "session.status_error":
console.error("❌ 错误:", event);
stream.return();
break;
}
}
}
runAgent().catch(console.error);
interface AgentRunOptions {
agentId: string; // 复用已存在的 Agent
environmentId: string; // 复用已存在的 Environment
prompt: string;
onToolUse?: (name: string, input: unknown) => void;
onMessage?: (content: string) => void;
timeoutMs?: number; // 默认 5 分钟
}
async function runAgentTask(opts: AgentRunOptions): Promise {
const { agentId, environmentId, prompt, timeoutMs = 300_000 } = opts;
const session = await client.beta.sessions.create({
agent: agentId,
environment_id: environmentId,
title: `Task — ${new Date().toISOString()}`,
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), timeoutMs);
try {
const stream = await client.beta.sessions.events.stream(session.id, {
signal: controller.signal,
});
await client.beta.sessions.events.send(session.id, {
events: [{ type: "user.message", content: [{ type: "text", text: prompt }] }],
});
for await (const event of stream) {
if (event.type === "agent.message") opts.onMessage?.(event.content as string);
if (event.type === "agent.tool_use") opts.onToolUse?.(event.name, event.input);
if (event.type === "session.status_idle") break;
if (event.type === "session.status_error") throw new Error(`Session error: ${JSON.stringify(event)}`);
}
} finally {
clearTimeout(timeout);
}
}
ant 命令行参考
ant 是 Anthropic 官方 CLI,通过 Homebrew 安装。支持通过命令行管理 Agent、Environment 和 Session,适合脚本化流水线和快速调试。
brew install anthropics/tap/ant
ant --version
ant auth login
# 一次性创建(保存 ID 供复用)
AGENT_ID=$(ant beta:agents create \
--name "DevOps Agent" \
--model claude-sonnet-4-6 \
--system "You are a DevOps expert." \
--output json | jq -r '.id')
ENV_ID=$(ant beta:environments create \
--name "devops-env" \
--networking unrestricted \
--output json | jq -r '.id')
echo "Agent: $AGENT_ID"
echo "Env: $ENV_ID"
# 每次任务创建新 Session
SESSION_ID=$(ant beta:sessions create \
--agent $AGENT_ID \
--environment $ENV_ID \
--output json | jq -r '.id')
# 运行任务(流式输出)
ant beta:sessions run \
--session $SESSION_ID \
--message "创建 Nginx 反向代理配置,支持 HTTPS 和 gzip 压缩"
生产环境建议
以下建议来自 Managed Agents API 的设计原则,帮助你构建稳定、高效的 Agent 系统。
复用 Agent 和 Environment ID
Agent 和 Environment 是持久化的配置。创建一次后将 ID 存入数据库或环境变量,每次任务复用,只为每个任务创建新 Session。避免重复创建浪费资源。
使用 agent_toolset_20260401
这是完整工具集,包含 bash(命令执行)、文件读写、Web 访问等核心能力。如果 Agent 需要执行代码、访问网络,必须指定此工具集。
正确处理 session.status_idle
收到此事件意味着 Agent 完成了当前任务,正在等待下一条用户消息。这是退出事件循环的正确信号,不要依赖超时来判断任务完成。
SSE 断流重连处理
SSE 连接可能因网络波动中断。生产代码应实现重连逻辑(指数退避),并通过 GET /v1/sessions/:id 检查 Session 当前状态,决定是否需要重新订阅事件流。
Beta Header 自动附加
使用官方 Python 或 TypeScript SDK 时,managed-agents-2026-04-01 Beta header 由 SDK 自动处理,无需手动设置。直接调用 HTTP API 时才需要手动添加。
精心设计 System Prompt
System prompt 对 Agent 行为影响巨大。明确指定:输出格式要求、错误处理策略(遇到失败是重试还是报告)、完成任务的判断标准、工具使用优先级。
谨慎选择网络策略
默认使用 unrestricted(允许全部网络访问)。处理敏感数据时考虑 none(完全隔离)。未来版本可能支持白名单域名策略,根据安全需求选择合适配置。
监控和日志记录
记录每个 Session 的 ID 和开始时间。在 agent.tool_use 事件中记录工具名称和耗时。设置任务超时(通常 5-15 分钟),避免失控的 Agent 无限运行产生意外费用。
什么时候该用 Managed Agents?
Anthropic 提供多种 AI 集成方式,各有适用场景。选择正确的方案对架构设计至关重要。
| 能力维度 | Managed Agents | Messages API | Claude Code | Tool Use (API) |
|---|---|---|---|---|
| 代码执行环境 | ✓ 托管沙盒 | ✗ 无 | ✓ 本地机器 | ✗ 需自建 |
| 自主多步推理 | ✓ 内置 Loop | ✗ 单轮 | ✓ 完整 Loop | △ 需手动管理 |
| 实时流式输出 | ✓ SSE | ✓ SSE | ✓ 终端输出 | ✓ SSE |
| 配置持久化 | ✓ Agent 对象 | ✗ 每次传入 | △ CLAUDE.md | ✗ 每次传入 |
| 网络访问控制 | ✓ 策略可配置 | ✗ 无执行环境 | △ 依赖本地 | ✗ 需自建 |
| 适合对象 | 自动化任务、SaaS 平台嵌入 | 简单对话、内容生成 | 开发者本地工具 | 自定义工具集成 |
| 基础设施负担 | ✓ 零基础设施 | ✓ 零基础设施 | △ 本地机器 | ✗ 需自建执行层 |
| 典型延迟 | 秒级~分钟级(任务型) | 毫秒~秒级(单轮) | 秒级~分钟级 | 毫秒~秒级 |