Claude Managed Agents 实战:用多智能体编排 + Webhooks 跑一个“自动审稿流水线“
Anthropic推出多智能体协作审稿系统 Anthropic近日发布Claude Managed Agents三项新功能:目标驱动评分(Outcomes)、多智能体编排(Multiagent Orchestration)和异步回调(Webhooks)。这些功能共同构成了一个完整的智能审稿流水线解决方案。 系统采用主从架构设计,主代理(Lead Agent)使用轻量级Haiku模型负责任务分发,三

TL;DR
Anthropic 在 5 月 6 日 Code w/ Claude 上把 Claude Managed Agents 的三个能力推进到公测:Outcomes(带评分员的目标驱动)、Multiagent Orchestration(一主多从并行)、Webhooks(异步完成回调)。本文给一个可落地的小项目:用主-从代理跑文章审稿流水线,主代理用 Haiku 接需求,子代理用 Opus 并行做"事实核查 / 风格润色 / 结构评估"三件事,Outcomes 卡质量门槛,Webhook 通知你的服务。
一、为什么是这三个能力一起出?
Anthropic 这次没有发布新模型,但把"如何把代理接入生产系统"这件事补齐了三块拼图。
Outcomes 解决"代理不知道好不好"的问题。你写一个 rubric,独立的 grader 模型在自己的 context 里打分,代理拿到"哪里没达标"再迭代。Anthropic 自己的内部基准里,Outcomes 把任务成功率提升 最多 10 个百分点,docx 生成质量 +8.4%,pptx +10.1%。
Multiagent Orchestration 解决"上下文塞不下、子任务又要并行"的问题。一个 lead agent 可以协调最多 20 种 subagent,最多 25 个并行线程,所有 subagent 共享同一份文件系统,事件持久化、可在 Claude Console 里逐步追踪。
Webhooks 解决"我不想轮询、不想拿着 connection 等"的问题。代理跑完一个 Outcome 自动 POST 你的 endpoint。这是把"需要人盯着"的玩具,变成"能挂在生产 CI 里"的工具的关键。
三者上线统一在 managed-agents-2026-04-01 beta header 后面。
二、实战目标:一个文章审稿流水线
假设我们要做这样一件事:作者把文章草稿提交到一个 API endpoint,系统应该并行做:
事实核查(找出文中可疑的数字 / 名字 / 引用,给出可信度评分)、风格润色(按品牌 voice 给出修订建议)、结构评估(按"标题 + TL;DR + 主体三段 + 参考资料"模板检查)。
三项都通过后,发 webhook 到内部 Slack bot 通知作者,否则把"哪里没达标"返回给作者。
这刚好是 Lead + 3 个 Subagent 的多智能体场景,搭配 Outcomes 卡门槛、Webhook 异步通知。之所以选这个例子,是因为它把当前 Managed Agents 的几个新能力都用到了:并行子任务(Multiagent)、可量化质量门槛(Outcomes)、异步完成回调(Webhook),同时业务逻辑足够简单,不会被工程复杂度淹没。换成"代码 PR 审查"、“账单异常排查”、“客服工单分诊”,整体骨架都一样,只是 rubric 和 subagent 不同。
在动手前,最好先在纸上画一遍数据流向:草稿从哪里来、subagent 各自要读什么、grader 看什么、最终结果给谁。把每一步的输入输出列清楚,能避免后面发现"原来 fact_checker 看不到 voice_guide"这种返工。
三、定义 outcomes(评审 rubric)
先把"什么叫合格"写清楚。Outcomes 的 rubric 是自然语言,Anthropic 推荐写得像"验收清单"。
{
"name": "article_quality_v1",
"criteria": [
{
"id": "facts",
"description": "文章中所有数字、人名、引用都能在外部公开来源核实,否则该条须被标红并给出怀疑等级 (low/medium/high)。"
},
{
"id": "voice",
"description": "全文风格与品牌 voice guide 一致:第二人称、避免 buzzword、段落 ≤ 4 句。违反的句子要列出。"
},
{
"id": "structure",
"description": "包含 Title / TL;DR / 至少 3 个二级标题 / 参考资料章节,否则不合格。"
}
],
"pass_when": "facts.high_risk_count == 0 AND voice.violations <= 3 AND structure.missing_sections == 0"
}
pass_when 是 grader 用来判定是否通过的逻辑表达式。不通过时 grader 会把哪一项不达标返回给 lead agent,lead 再决定是直接退回作者,还是触发某个 subagent 重跑。
四、定义 subagents
Subagent 用 JSON 描述给 lead,每个 subagent 独立选模型、独立提示词、独立工具。
{
"subagents": [
{
"name": "fact_checker",
"model": "claude-opus-4-7",
"system_prompt": "你是事实核查员。对输入文章中每个数字、人名、引用,给出 cite_url 与可信度 (low/medium/high)。",
"tools": ["web_search", "url_fetch"]
},
{
"name": "voice_editor",
"model": "claude-opus-4-7",
"system_prompt": "你按附件 voice_guide.md 检查文章,列出所有违反第二人称 / buzzword / 段落过长的句子,给出建议改写。",
"tools": ["read_file"]
},
{
"name": "structure_auditor",
"model": "claude-haiku-4-5",
"system_prompt": "你按模板检查 markdown 文档结构,缺失章节就报错。",
"tools": []
}
]
}
structure_auditor 走 Haiku 完全够用,可以省 80%+ 成本;前两者更依赖语义判断,用 Opus 更稳。Spiral 团队对外披露的就是类似策略:lead 跑 Haiku、写作 subagent 跑 Opus。
五、把 lead agent 跑起来 + 接 webhook
下面是一个 Python 伪代码(实际请以 官方文档 字段为准),把 lead agent 启动并注册一个 webhook。
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ANTHROPIC_API_KEY"],
default_headers={"anthropic-beta": "managed-agents-2026-04-01"},
)
job = client.managed_agents.sessions.create(
lead_model="claude-haiku-4-5",
lead_system_prompt=(
"你是审稿流水线的主调度。收到草稿后并行调度 "
"fact_checker / voice_editor / structure_auditor 三个子代理,"
"汇总结果,触发 Outcome 评估,最终把通过/不通过结果交回给我。"
),
subagents=SUBAGENTS_JSON, # 第四节那段 JSON
outcome=OUTCOME_JSON, # 第三节那段 JSON
input={
"draft_markdown_url": "https://drafts.example.com/a83.md",
"voice_guide_url": "https://internal.example.com/voice_guide.md",
},
webhook={
"url": "https://hooks.example.com/article-review",
"events": ["outcome.passed", "outcome.failed"],
"signing_secret": os.environ["HOOK_SECRET"],
},
)
print("session id:", job.id)
你的 webhook 接收方需要校验签名再处理,避免别人伪造回调。
from flask import Flask, request, abort
import hmac, hashlib, os
app = Flask(__name__)
SECRET = os.environ["HOOK_SECRET"].encode()
def verify(sig: str, body: bytes) -> bool:
expected = hmac.new(SECRET, body, hashlib.sha256).hexdigest()
return hmac.compare_digest(sig, expected)
@app.post("/article-review")
def hook():
sig = request.headers.get("X-Claude-Signature", "")
if not verify(sig, request.get_data()):
abort(401)
payload = request.get_json()
if payload["event"] == "outcome.passed":
notify_slack_pass(payload["session_id"])
else:
notify_slack_fail(payload["session_id"], payload["grader_feedback"])
return "", 204
六、踩坑提示
下面这些是从 Anthropic 官方文档和早期用户披露中提炼的几条注意事项。
一是别让 lead 自己干活。 多智能体编排的本意是 lead 当调度。你给 lead 配 Opus、又让它自己写文本,子代理就变摆设,账单会爆。Spiral 那种"Haiku 当 lead、Opus 当 worker"的拆分是当前主流姿势。
二是 Outcomes 的 rubric 别写得太抽象。 “通顺易读"这种描述 grader 会给你打满分。要拆成"段落 ≤ 4 句”、"避免 buzzword 清单 X"这种可机判定的小条款。Wisedocs 团队对外说他们的审查代理在引入 Outcomes 后效率提升 50%,关键就是把内部审查指南拆成了 rubric。
三是 webhook 重试要做幂等。 Anthropic 文档明确,webhook 失败会重试。如果你直接发 Slack,重复通知会很烦,按 session_id 做去重。
四是别忘了带 beta header。 anthropic-beta: managed-agents-2026-04-01,不带这个头 multiagent / outcomes / webhooks 全部 404。
五是用 Claude Console 看 trace。 当 subagent 行为不符合预期时,Console 里能逐条看到 lead 把任务怎么拆、subagent 收到什么 prompt、最后输出什么——比日志好用 10 倍。
七、可以再加什么
如果你想把这个流水线往生产推一步,下面三件事都比较顺手:
把 Outcomes 的 rubric 版本化,跟着 voice_guide 一起进 git,每次改 rubric 都生成新 outcome name,便于 A/B;给 lead 接 Memory + Dreaming(Dreaming 目前是研究预览,需要申请),让它把"过去哪些类型的稿件最常败在 voice 项"沉淀成自己的记忆;最后,把 webhook 触发的通知改成 PR:fact_checker 输出可信度 high 的疑点直接以 GitHub PR 注释形式落地,作者在原稿位置就能看见。
另一个值得做的演进是"成本可视化"。Multiagent 一旦并发起来,Opus 子代理的账单会比单代理高一个量级。建议在 webhook 回调里顺手把每个 session 的 token 用量、grader 重试次数、subagent 失败次数写到一张表,方便后面按 outcome 名做成本/质量回归——这件事 Anthropic 暂时没给你做。
最后,把 lead agent 自己也版本化。lead 的 system prompt 决定了它怎么拆任务、怎么决定何时重试、什么时候直接抛回用户。这是这个流水线最容易"看似没改、行为大变"的地方,必须有 prompt diff、有 A/B、有金丝雀流量,否则你某天会发现整条线突然只用了一个 subagent。
至此你应该能感受到,Managed Agents 这次更新的关键词不是"更强的模型",而是把代理从"PoC 玩具"升级为"可以挂上生产管道的零件"。模型这一年还会继续升级,但今天值得你花一晚上熟悉的,是这套调度 + 评估 + 异步通知的工程接口——它一旦写好就能跟着任何后续模型一起复用。
参考资料
更多推荐

所有评论(0)