abc小站

2026-10-28

别急着加 agent:Anthropic 为什么劝你先把 subagent 折回主循环

Anthropic 应用 AI 团队建议:先建 eval,再把 subagent 一个一个折回主循环,并盯住通过/失败的翻转;配套开源 single-agent-loop-kit。

Anthropic 文章题图
来源:Anthropic claude.com 原文题图

公司长什么样,系统就长什么样。

这是软件行业一条很有名的观察,叫康威定律。

10 月 22 日,Anthropic 应用 AI 团队在 claude.com 上发了一篇文章,把这条定律用到了 agent 身上。

大意是:很多多 agent 系统,长得很像设计它的那张组织架构图。

一个 router 在上面,下面挂着订单专员、物流专员、退款专员……

看起来分工明确,职责清晰。

但是,真的更好吗?

不一定。

为什么?

一、传话游戏

我们先来看一个公式:

传话次数 × 每次损耗 = 信息失真

传话游戏,很多人小时候都玩过。

第一个人说一句话,一个接一个传下去,传到最后,常常已经面目全非。

多 agent 系统,也有类似的问题。

router 把任务拆开,交给子 agent。

子 agent 只看得到自己那一份上下文。

做完了,再把结果压缩成一段话,交回去。

每一次交接,都是一次压缩。

每一次压缩,都可能丢东西。

Anthropic 在文章里,就用了“传话游戏”(telephone game)这个说法。

那怎么办?

把传话的环节去掉。

二、推荐的终态,长什么样

Anthropic 给出的推荐终态,可以用一个公式概括:

一个模型 + 一个上下文窗口 + 开放式工具循环

听起来很简单。

关键在细节。我拆成四点来说。

第一,harness 负责设边界。

轮数预算,成本预算,写入闸门。

模型可以自由地调用工具,但不能无限地转下去,也不能随便写东西。

自由,是在边界里的自由。

第二,工具调用批量发、并行跑。

每一轮,模型一次发出一批工具调用。

harness 并行执行,再把结果原样交回给同一个模型。

请注意两个词:“原样”和“同一个”。

没有中间商。

没有转述。

第三,计划写在上下文里。

模型在第一轮,就把计划写进上下文,然后随着结果不断修订。

为什么这很重要?

因为,写计划的,就是执行计划的。

在多 agent 架构里,往往是 router 写计划,子 agent 执行。执行中发现计划不对,得一层一层往回报。

在单循环里,它发现不对,当场就能改。

第四,东西各归其位。

流程、领域步骤 → skills

硬约束(校验、审批)、记忆查询 → tools

这个分法,很有讲究。

skills 讲的是“怎么做”,可以按需加载。

tools 讲的是“必须这么做”,由代码来保证,不靠模型自觉。

把审批写在提示词里,叫“希望它遵守”。

把审批写进工具里,叫“它绕不过去”。

一个靠自觉,一个靠机制。

三、怎么迁移:不是一刀切

那是不是把所有 subagent 一口气都合并掉,就好了?

不是。

Anthropic 给的方法,是一个很朴素的工程顺序:

先测 → 一次折一个 → 前后对比 → 看翻转

先测。

做一套任务完成度的 eval。

文章说,10 个 golden 例子,就能起步。

不用等到有一个完美的评测集,才开始动手。

一次折一个。

每次只合并一个 subagent。

它原来的 prompt,变成一个 skill。

它原来调用的 API,变成一个 MCP tool。

前后对比。

不只看总分。

看翻转。

看哪些任务“翻转”了:原来通过的,现在失败了;原来失败的,现在通过了。

为什么不能只看总分?

因为,总分可能纹丝不动,底下却是一个任务坏了,另一个任务好了。

平均数,会掩盖很多事情。

四、一个真实的翻转

文章里给了一个例子,非常值得细读。

在一个示例客服 agent 上,他们把一个 subagent 折进另一个之后,延迟降了。

这是好事。

但是,一个原本能通过的流程,坏了。

怎么坏的?

主 agent 手里有订单查询工具,就拿着它自己回答了,没有去问物流专员要送达日期。

更麻烦的是,这个问题,在两次运行里,只出现了一次。

这说明什么?

说明如果只跑一次 eval,你可能根本看不见它。

所以,Anthropic 的建议是:每个任务,要跑多次。

这个例子告诉我们一件事:

合并 ≠ 免费

延迟的收益,是看得见的。

行为的变化,是藏起来的。

当然,收益也是真实的。

据 Anthropic 文章,有一家客户把自己的多 agent harness 和单 agent 循环放在一起评估,后者跑得快了大约一倍(原文是 roughly 2x faster)。

请注意,这是 Anthropic 转述的单个客户的结果,而且是两种架构放在一起对比,不是一个普遍规律。

你的系统能不能得到同样的结果,只有你自己的 eval 能回答。

五、subagent,没有过时

读到这里,你可能会想:那 subagent,是不是该淘汰了?

不是。

文章并没有这么说。

它说的是:别默认就用多 agent。

但有几种情况,subagent 仍然合适。

验证。 让一个独立的 agent 检查结果,它不会被主循环的思路带偏。

并行。 几件真正互不相关的事,可以分头去做。

权限隔离。 有些工具,只该让某一个 agent 碰。

文章原话是,subagent 擅长验证、并行和模块化的权限划分。它还点了三种情况:单循环因为上下文膨胀,出现了可以测出来的性能下降;几件并行的事,各自需要一个干净的新上下文;单个 agent 选不对工具,或者系统提示里的指令互相打架。

文章最后给的规则也很干脆:折进去一个,只有折进去之后分数更差,才把它留作 subagent。

所以,正确的问题,不是“要不要 subagent”。

而是:这个 subagent,存在的理由是什么?

如果理由是“组织架构图上有这个岗位”,那就该考虑折回来。

如果理由是验证、并行、权限隔离,那就留着。

六、工具箱:single-agent-loop-kit

道理讲完了,怎么动手?

Anthropic 在 GitHub 上放了一个配套仓库:anthropics/single-agent-loop-kit。

先说清楚:它是参考实现,官方写明不维护,也不收 PR。

它把迁移拆成了几步:

audit → baseline → merge → fold → as-tool → upkeep

第一步 audit,审计。

对每一个 subagent,判定它该折回(fold)、合并(merge)、作为工具调用(as-tool),还是保留。

然后建 baseline。

再依次做 merge、fold、as-tool。

最后是日常维护,upkeep。

仓库里有几个脚本:

还有一个小型的单循环参考实现,reference_loop/loop.py。

仓库里带了一个示例 support-desk:一个 router 加 6 个 subagent,19 个 eval 任务,200 条合成的生产 trace。

设 KIT_MODEL=fake,可以零成本先做一遍连通性检查(KIT_MODEL=fake python3 evals/run_eval.py --variant smoke)。

用法也简单。

把仓库里的 skill 目录复制到你项目的 .claude/skills/single-agent-loop,在 Claude Code 里说一句:“Run the single-agent-loop skill.”

它会在这些节点停下来,等你确认:审计之后,付费运行之前,baseline 之后,每次改动之后。

我最喜欢的,是这个设计。

在花钱之前,停一下。

最后的话

回到开头。

公司长什么样,系统就长什么样。

但是,agent 不是员工。

人需要分工,很大程度上是因为一个人的精力有限、记忆有限、能看到的信息有限。

把人的组织架构,直接搬给模型,可能把人的限制,也一起搬了过去。

所以,下次想再加一个 agent 之前,先问自己一句:

我是在解决问题,还是在画组织架构图?

来源:Anthropic 原文(2026-10-22);single-agent-loop-kit(Apache-2.0,官方不维护)。“快了大约一倍”是文章转述的单个客户对比两种架构的结果,不是普遍规律;客服示例与脚本用途据原文和仓库 README;“传话次数 × 每次损耗”等公式为作者概括。