Claude Managed Agents 实测:SDK 2.3.0 的 beta 头、403 与不收电脑操作
照着 Anthropic quickstart 抄 /v1/agents 的 curl,回来的是 403 forbidden;装好 SDK 想取 agent,报 AttributeError。这篇用一个本地打点服务测出 SDK 2.3.0 每个端点实际发送的 beta 头,记录两个网络出口的真实状态码与耗时,并对照托管、自建 SDK、裸 Messages API 三条路线,含报错原文与按官方价目的费用推演。
💡 你将学到
照着 Anthropic quickstart 抄 /v1/agents 的 curl,回来的是 403 forbidden;装好 SDK 想取 agent,报 AttributeError。这篇用一个本地打点服务测出 SDK 2.3.0 每个端点实际发送的 beta 头,记录两个网络出口的真实状态码与耗时,并对照托管、自建 SDK、裸 Messages API 三条路线,含报错原文与按官方价目的
照着 quickstart 抄 curl https://api.anthropic.com/v1/agents,换个真 key 跑,回来的是 403 {"error":{"type":"forbidden","message":"Request not allowed"}}。换成 SDK 想取已建好的 agent,写 client.beta.agents.get(id),得到一句 AttributeError。两处都不是你的代码写错了。
先给结论:Claude Managed Agents 是 Anthropic 托管的 agent 运行时,四个对象串成一条链。agent 存配置,environment 定沙箱,session 是运行实例,events 是双向事件流。所有端点要带 anthropic-beta: managed-agents-2026-04-01,按 token 计费,托管的是循环和沙箱,不省推理钱。它不提供电脑操作能力,computer_toolset_20260801 那套桌面键鼠工具目前不进 Managed Agents,还得在你控制的环境里执行。会话状态留在 Anthropic 侧,beta 期间不适用零数据保留,也没有 HIPAA BAA。
想让 Claude 自己开浏览器点鼠标的,这篇到此为止。要跑几十分钟的多步任务、进沙箱改文件跑命令、断了能续上,往下看。
一条链怎么搭起来
三个 POST 一次 GET,顺序不能乱:先建 agent 拿 agent.id,再建 environment 拿 environment.id,然后建 session 把两个 id 粘一起,最后往 session 里塞事件。
from anthropic import Anthropic
client = Anthropic() # SDK 自动带 beta 头
agent = client.beta.agents.create(
name="Coding Assistant", model="claude-opus-5",
tools=[{"type": "agent_toolset_20260401"}])
env = client.beta.environments.create(
name="quickstart-env",
config={"type": "cloud", "networking": {"type": "limited", "allow_package_managers": True}})
sess = client.beta.sessions.create(agent=agent.id, environment_id=env.id)
client.beta.sessions.events.send(sess.id, events=[
{"type": "user.message", "content": [{"type": "text", "text": "把 fib.py 写到沙箱并跑一遍"}]}])
for ev in client.beta.sessions.events.stream(sess.id):
print(ev.type)
agent_toolset_20260401 一次打开 8 个内置工具:bash、read、write、edit、glob、grep、web_fetch、web_search。要关掉某个,在 configs 里写 {"name": "web_fetch", "enabled": false};也可以 default_config.enabled: false 全关再逐个开。单个工具输出超过 100,000 字符,平台自动写进沙箱文件,模型只拿到截断预览加路径,想让它看到全文得再读一次。
实测:SDK 2.3.0 每个端点自带哪个 beta 头
文档说 SDK 会自动加头,加在哪没人写清楚。本地起一个 http.server 打点服务,把 base_url 指到 http://127.0.0.1:8899,逐个调 beta 资源,记录真实请求头,不花额度也不用真 key。结果:
| 调用 | 实际路径 | anthropic-beta |
|---|---|---|
| messages.create | POST /v1/messages | 无 |
| agents.create / list / retrieve | /v1/agents | managed-agents-2026-04-01 |
| agents.versions.list | /v1/agents/{id}/versions | managed-agents-2026-04-01 |
| environments.create | /v1/environments | managed-agents-2026-04-01 |
| sessions.create / retrieve | /v1/sessions | managed-agents-2026-04-01 |
| sessions.events.send / list | /v1/sessions/{id}/events | managed-agents-2026-04-01 |
| sessions.events.stream | GET /v1/sessions/{id}/events/stream | managed-agents-2026-04-01 |
| sessions.resources / threads | /v1/sessions/{id}/resources、/threads | managed-agents-2026-04-01 |
| deployments / deployment_runs | /v1/deployments、/v1/deployment_runs | managed-agents-2026-04-01 |
| vaults.credentials | /v1/vaults/{id}/credentials | managed-agents-2026-04-01 |
| memory_stores.* | /v1/memory_stores、/v1/memory_stores/{id}/memories | agent-memory-2026-07-22 |
| files / skills | /v1/files、/v1/skills | 无 |
两处容易踩:memory store 走另一个头 agent-memory-2026-07-22,两个头不能互换;files 和 skills 虽然有 beta 命名空间,SDK 一个 beta 头都不发。同一轮 SDK 还统一发了 anthropic-version: 2026-10-21,而官方 quickstart 的 curl 示例仍写 2023-06-01,文档里两种都出现过,手工拼 curl 时对不上先怀疑版本头。
实测:这边网络拿不到 401
同一个 POST /v1/agents,假 key,两个出口:
| 出口 | 带 beta 头 | 状态码 | 耗时 | 返回体 |
|---|---|---|---|---|
| 本机(大陆家宽) | 是 | 403 | 14.50s | {"error":{"type":"forbidden","message":"Request not allowed"}} |
| 香港 ECS | 是 | 403 | 0.055s | 同上 |
| 香港 ECS | 不带 key | 403 | 0.055s | 同上 |
三个请求都没进到鉴权环节,拿不到 401 authentication_error,也没有 request-id 可查。想判断 key 有没有效、额度够不够,得先把出口换到能通的网络,否则看到的 403 跟 key 无关。这个坑花了半小时才绕明白。
三条路怎么选
| Managed Agents | Claude Agent SDK 自建 | 裸 Messages API | |
|---|---|---|---|
| 谁跑 agent 循环 | Anthropic | 你的进程 | 你写的 while |
| 沙箱 | 托管容器,或自托管 sandbox | 自己起容器 | 没有,自己造 |
| 会话状态 | 服务端事件日志,能回放 | 自己存 | 自己存 |
| 压缩与缓存 | 内置 compaction、prompt caching | 自己实现 | 全靠自己 |
| 定时跑 | deployments 配 cron | 自己的调度器 | 自己的调度器 |
| 桌面键鼠 | 不支持 | 支持,客户端执行 | 支持,客户端执行 |
| 零数据保留 / HIPAA | 不支持 | 看你自己的环境 | 看你自己的环境 |
取舍标准:循环逻辑越标准、越要长跑,越适合托管;循环里每一步都想插手,或者合规上不允许会话落在第三方,自己搭。
五个坑,附报错原文
- SDK 2.x 换了 HTTP 客户端,传老的 httpx Client 直接报
TypeError: Invalid http_client argument; httpx.Client is from the httpx package, but this SDK uses httpx2. Use httpx2.Client instead.。装httpx2就好。 - 没有
agents.get(),要用agents.retrieve(),否则AttributeError: 'Agents' object has no attribute 'get'。 - webhooks 只有
parse_unverified和unwrap,没有 list,报'Webhooks' object has no attribute 'list'。 - 限流是组织级:写端点 300 次/分钟,读端点 1,200 次/分钟。批量建 session 按这个压。
- 会话是持久化资源,平台不会替你定期清理也不会替你备份,跑完把产物从沙箱拉到自己仓库,别把 session 当存档盘。
钱怎么算
官方价目(每百万 token):Sonnet 5.5 输入 $2、输出 $10、cache 命中 $0.10;Opus 5.5 输入 $4、输出 $20、cache 命中 $0.20;Haiku 5.5 输入 $0.10、输出 $0.50。托管不额外打折,省的是基础设施和运维。
按 40 轮、每轮输入 30k token、输出 800 token、cache 命中率 80% 推演:Sonnet 5.5 约 $0.90,全价不用 cache 是 $2.72;换 Opus 5.5 是 $1.79,全价 $5.44。这是拿官方价目自己乘出来的示例,不是账单预测,真实账单还要算工具输出回灌和压缩重写。
最后
Managed Agents 解决的是长跑和状态这两件事。Anthropic 工程博客里写了架构调整后首 token 延迟 p50 降 60%、p95 降 90% 以上,代价是会话交给对方保管。桌面操作那条线它现在没接,一个 API 包不了全部场景。
延伸阅读:
- Computer Use Agent Guide 2026:桌面键鼠那条线怎么走,五个开源自托管方案实测。
- Best MCP Servers for Claude in 2026:Managed Agents 接 MCP 前先挑服务器。
- AI Agent Frameworks 2026:自建 harness 时框架怎么选。
- Anthropic Quickstarts 指南:官方现成项目,省掉搭骨架的时间。
- Claude Code 常见坑:拿 Claude Code 当现成 harness 的注意点。
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。