SKILL 28 / ORCHESTRATION · DEEP-DIVE

《Building Effective Agents》精读

一条可判定的分界线 · 五种模式的梯子 · 配套那五个 notebook · 「能不上 agent 就不上」的账怎么算

2026-09-29 · BigCat

上期钉的是「每次都要做的事」。再往上游一步,是更贵的那个问题:这活到底该不该上 agent。Anthropic 2024-12-19 那篇《Building Effective AI Agents》给的答案只有两句定义的分量——workflow 是预先写死的代码路径,agent 是模型自己决定路径。这期把这篇文章连同它那个配套 notebook 仓库一起拆开,再拿后来三篇官方文章去对它的账。

前置 → Skill 27 Hooks 与确定性自动化(确定性的事别派 agent)

// WHY THIS MATTERS

这篇文章被引用得太多,以至于多数人只记住了那五张图。它真正值钱的在两处:一是给了一条可判定的分界线,让「我们要不要做 agent」从品味之争变成事实之争;二是它自己一直在改——今天打开它,点名的框架名单已经和发表当天不是同一批。本期照旧:先给能跑的代码,再拆机制,再拿真材料对账,判据放后半程。

// 01

它替你干掉什么:把「要不要上 agent」从口水仗变成事实之争

论断:这篇文章最值钱的不是那五张图,是开头那两句定义。它把 agent 从一个形容词变回了一个有真假的判断。

原文(Erik Schluntz / Barry Zhang,2024-12-19):

Workflows are systems where LLMs and tools are orchestrated
through predefined code paths.

Agents are systems where LLMs dynamically direct their own
processes and tool usage, maintaining control over how they
accomplish tasks.

分界线落在一个当场就能回答的问题上:下一步调哪个工具,是你的代码决定的,还是模型决定的。代码决定 → workflow,无论它套了多少层;模型决定 → agent,哪怕它只有二十行。画得再花的流程图也可能是 workflow,一个 while 循环也可能是 agent。

配套代码:官方那五个 notebook

光读会以为自己懂了。参考实现在官方 cookbook 里——注意仓库已从 anthropic-cookbook 改名为 claude-cookbooks(老链接会跳转,目录路径没变):

git clone https://github.com/anthropics/claude-cookbooks
cd claude-cookbooks/patterns/agents

basic_workflows.ipynb               # 链式 / 路由 / 并行三件套
evaluator_optimizer.ipynb           # 评估-优化循环
orchestrator_workers.ipynb          # 编排者-工人
async_multi_agent_orchestration.ipynb
latency_multi_agent.ipynb           # 有延迟与预算约束的多 agent
util.py  prompts/                   # 共用工具与提示词

每个 notebook 都是不依赖任何框架的裸实现,这正是文章的态度:many patterns can be implemented in a few lines of code。什么时候别看:你要的是生产级重试、观测、持久化——这些一样都没有,它们是教具不是底座。(据 GitHub 仓库页 53.1k★,2026-09)

第一条立刻能跑的:把最后那一档跑起来

五种模式里只有末档需要真正的 agent 循环,而这一档现在有官方现成的:

npm install @anthropic-ai/claude-agent-sdk   # Node 18+
pip install claude-agent-sdk                 # 或 Python 3.10+
export ANTHROPIC_API_KEY=your-api-key
from claude_agent_sdk import query, ClaudeAgentOptions

async for m in query(
    prompt="Review utils.py for bugs that would crash. Fix them.",
    options=ClaudeAgentOptions(
        allowed_tools=["Read", "Edit", "Glob"],
        permission_mode="acceptEdits")):
    print(m)

这段抄自官方 quickstart。它替你干掉的是自己写 agent 循环:工具调用、上下文管理、重试、权限门都在库里。什么时候别装:任务是固定三步、每步都能预测——按文章的判据你要的是链式调用,直接调 API 写三次就行,别拖进一整个 harness。另注意 v0.1.0 起默认不再带 Claude Code 的系统提示词,要老行为得显式写 {"type":"preset","preset":"claude_code"}。

出处 · Building Effective AI Agents(2024-12-19)· Agent SDK Quickstart 与 Migration guide,2026-09 访问
// 02

机制:五种模式不是并列的菜单,是一根梯子

论断:每上一级,你交出去的控制权多一点,换回来的适应性多一点,账单也多一点。选型就是选梯子的第几级,不是选哪道菜。

梯子的地基叫 augmented LLM:an LLM enhanced with augmentations such as retrieval, tools, and memory。五种模式全建在它上面,区别只在谁来编排它。

控制权在代码 ──────────────────────────────► 控制权在模型 ① prompt chaining 固定步骤,A 的输出喂给 B ② routing 先分类,再进不同的专用路径 ③ parallelization sectioning 拆开并行 / voting 同题多跑 ④ orchestrator-workers 子任务由模型现场拆,不预先定 ⑤ evaluator-optimizer 一个写,一个批,循环到过关 ⑥ agents 步数不可预测,模型自己决定何时收工

上面那几档在 claude-cookbooks/patterns/agents/ 里一一对得上:①②③ 全在 basic_workflows.ipynb,④ 在 orchestrator_workers.ipynb,⑤ 在 evaluator_optimizer.ipynb,⑥ 没有单独的 notebook——因为它就是 claude-agent-sdk 那个 query() 循环本身。文章给每一档的适用条件都是一句能直接拿去开会的话:

最常见的误用:把 ④ 当成「更高级的 ③」。这俩的差别不是复杂度,是子任务清单谁生成。清单你本来就能写死却上了 ④,等于花模型的钱买一份你手里已有的答案。

文章自己的收口是三条原则,值得当 checklist 贴墙上:simplicity(设计保持简单)、transparency(显式展示 agent 的规划步骤)、ACI(像打磨 API 文档一样打磨工具文档与测试)。第三条是它最被低估的一条,下一节就是它的操作手册。

// 03

真实用法与边界:拿这篇 2024 年的文章去对三份后续材料的账

论断:这篇是骨架,它自己没长肉。真正让你少赔钱的那几个数字和那几套做法,都在后来三篇里。

① 多 agent 到底贵多少

官方 2025-06-13 的 How we built our multi-agent research system 把 ⑥ 这一档的账摊开算了:Opus 4 当 lead、Sonnet 4 当 subagent 的多 agent 系统,在其内部研究评测上比单个 Opus 4 高出 90.2%;代价是 agent 约烧掉聊天的 4 倍 token,多 agent 系统约 15 倍;并行工具调用把复杂查询耗时砍掉最多 90%。同一篇也划了边界:需要所有 agent 共享同一份上下文、或子任务之间强依赖的领域不适合,原文点名 most coding tasks involve fewer truly parallelizable tasks than research。什么时候别上:任务价值撑不起那 15 倍 token 的时候。

② 附录二的现代版

原文附录二叫「Prompt Engineering your Tools」,2025-09-11 的 Writing effective tools for AI agents 是它长大后的样子,也是 ACI 那条原则唯一的操作手册:合并工具(别给 list_users/list_events/create_event 三个,给一个 schedule_event)、命名空间(asana_search / jira_search 划清边界)、省 token 的返回(Claude Code 默认把工具返回卡在 25,000 token,自己做分页/过滤/截断)、只返高信号字段(给 name 和 file_type,别给 uuid 和 mime_type)、先写 eval 再调描述。

③ 2024 年那篇基本没讲的那一半

2025-09-29 的 Effective context engineering for AI agents 补上了盲区——上下文不是无限的。四个手法:compaction(接近上限时压缩历史)、结构化笔记(进度写进 NOTES.md 这类外部记忆)、子 agent 架构(在干净上下文里干活,只回摘要)、即时检索(存轻量标识符,用到再取)。一句总纲:找到 the smallest possible set of high-signal tokens。

④ 框架名单:这是一篇活文档

今天打开原文,「When and how to use frameworks」那节点名的是 Claude Agent SDK、Strands Agents SDK by AWS、Rivet、Vellum——而 Claude Agent SDK 这个名字是从 claude-code-sdk 改来的,2024-12 发表当天并不存在。别把旧笔记当现状。两个可装的:

pip install strands-harness      # 或 npm i @strands-agents/harness
pip install -U langgraph

strands-agents/harness-sdk 主打「any model, any cloud」的 harness 自控(据 GitHub 仓库页 8.5k★,2026-09);langchain-ai/langgraph 是有状态 agent 的低层编排框架(据 GitHub 仓库页 42.5k★,2026-09)。什么时候两个都别装:文章原话是先直接用 LLM API,因为框架会 create extra layers of abstraction that can obscure the underlying prompts and responses, making them harder to debug——你连自己发出去的 prompt 长什么样都看不见时,任何调优都是玄学。

出处 · 上述三篇 Anthropic Engineering 文章(日期为各自发布日)与两个仓库的 GitHub 页,2026-09 访问
// 04

代价与替代品:这篇文章最大的代价,是被当成地图

论断:它是一张 2024 年 12 月的地形图。地形没变,路牌全换了。照着它上路之前,先核一遍路牌。
  1. 术语漂移。cookbook 仓库改了名、SDK 改了名、框架名单换了人。凡是你从这篇文章里抄走的专有名词都得去一手源核一遍;抄走的判据可以直接用。
  2. 它不谈上下文。2024 年那会儿 context window 还不是设计约束的主角。只读这篇就去做 ⑥,你会在第三十轮工具调用上撞墙。
  3. 「90.2%」最容易被当成通用结论。那是研究类任务上的内部评测,同一篇紧接着就说编码任务可并行的部分远比研究少。
  4. 它的简单主义容易被念反。「保持简单」不等于「别上 agent」,而是「别在没量到收益前上」。

不上 agent,你还能怎么办:四个台阶

  1. 一条好 prompt。文章的第一条建议就是先把单次调用优化到位,必要时配上检索和样例。
  2. 链式三次调用。二十行代码,可调试、可断点、成本可预测。
  3. 一个 skill 或一份 CLAUDE.md。要的只是「每次都按这套方法做」——那是 Skill 6 的活,不需要 agent 循环。
  4. 一条 hook。要的是「每次都一定发生」——那是上期的活,连模型判断都不需要。

// 一页选购卡

先读/先装这三个:① Building Effective AI Agents 原文——读那两句定义和每档的「when to use」,图可以跳过。② git clone https://github.com/anthropics/claude-cookbooks 进 patterns/agents/ 把 basic_workflows.ipynb 跑一遍——十分钟,比看十遍图管用。③ pip install claude-agent-sdk(或 npm install @anthropic-ai/claude-agent-sdk)——只在确认自己真在 ⑥ 那一档时才装。

按需再看:How we built our multi-agent research system(15× token 与 90.2% 的出处)· Writing effective tools for AI agents(附录二的现代版)· Effective context engineering(compaction / 笔记 / 子 agent / 即时检索)· claude-agent-sdk-demos(其中 research-agent 就是编排者-工人的可跑版,据 GitHub 仓库页 2.8k★,2026-09)· strands-harness · langgraph。

明确别做:把编排者-工人用在子任务清单你本来就能写死的地方 · 没有客观评判标准还上评估-优化循环 · 把 90.2% 当成「多 agent 普遍更好」· 先选框架再想清楚自己在梯子第几级 · 从这篇 2024 年的文章里直接抄包名和框架名 · 只读这篇就去做长程 agent。

// 术语表

workflow(工作流)
LLM 与工具被预先写死的代码路径编排的系统。下一步是谁调的?代码。
agent(智能体)
LLM 自己决定流程与工具使用、并保持对「怎么完成」的控制权的系统。下一步是谁调的?模型。
augmented LLM(增强 LLM)
挂上检索、工具、记忆的 LLM。文章称它为一切 agentic 系统的基本构件,五种模式都建在它上面。
ACI
agent-computer interface,智能体-计算机接口。相对于给人用的 UI/HCI,指给模型用的那层工具接口。文章三条原则之一就是像打磨 API 文档一样打磨它。
sectioning vs voting
并行的两个变体。前者把任务拆成互不依赖的子任务同时跑(买速度),后者把同一任务跑多次取共识(买置信度)。
orchestrator-workers
编排者-工人。中央 LLM 现场拆出子任务派给工人再汇总。与并行的唯一分界:子任务清单不是预先写死的。
evaluator-optimizer
评估者-优化者。一个 LLM 产出、另一个给评价与反馈,循环到过关。前提是评判标准客观。
compaction(压缩)
上下文接近上限时把历史摘要化,保留架构决策与未决问题、丢掉冗余输出。长程 agent 的基础设施。

// 三个想不通的地方

既然多 agent 那一档能高出 90.2%,为什么文章通篇在劝你别用?
因为那两个数字是同一篇文章里的:高出 90.2%,同时烧掉约 15 倍 token。文章劝的从来不是「agent 不好」,是别在没量到收益前付这笔钱。真正的判据是每档的边际收益:从一条 prompt 到链式调用,收益通常很大、成本几乎不变;从编排者-工人到全自主 agent,收益不确定、成本确定地涨。所以「保持简单」不是审美偏好,是在收益未知时选成本已知的那一档。
分界线既然这么清楚,为什么现实里几乎没有纯粹的一种?
因为这条线是按决策点划的,不是按系统划的。Claude Code 本身就是混血:主循环里下一步调什么工具是模型决定的(agent),但 hook 在什么时机触发、权限怎么判、压缩什么时候发生,全是代码决定的(workflow)。真实系统是一张决策点的清单,每个点各自归属一边。所以有用的问法不是「我们在做 workflow 还是 agent」,而是「这个具体的决策,该由谁来做」——这也正好是上期 hooks 那条判据的另一种说法。
工具描述是给模型看的,「像打磨 API 文档一样打磨它」这个类比站得住吗?
站得住,而且比给人看的文档要求更高:人会猜、会试、会去读源码,模型基本只有你给的那段描述。官方后来那篇把这件事量化了——光是改工具描述就能让后续 agent 的任务完成时间降 40%。但类比也有裂缝:API 文档追求完备,工具描述追求高信号,完备反而是负担(返回 uuid 和 mime_type 就是完备害了信号)。更准确的说法或许是:像打磨错误信息一样打磨它——在最短的篇幅里说清此刻该怎么办。

// 延伸阅读