Anthropic 工程团队(Erik S. & Barry Zhang)撰写的 Agent 系统设计指南。核心论点:成功不在于构建最复杂的系统,而在于构建适合需求的系统——从最简单的方案开始,只在简单方案不够用时才加复杂度。很多场景下优化单次 LLM 调用(加检索、加示例)就够了,不需要上升到 Agent。
Workflow 与 Agent 的区分
| 维度 | Workflow | Agent |
|---|---|---|
| 定义 | LLM 和工具沿预定义代码路径编排 | LLM 自主决定流程和工具使用 |
| 特点 | 可预测、一致 | 灵活、自主决策 |
| 适用 | 任务明确、步骤可枚举 | 开放性问题,路径无法预知 |
五种 Workflow 模式
-
Prompt Chaining(提示链):任务拆成固定步骤串行执行,每步输出是下步输入,中间可加程序检查。用延迟换准确性——每步 LLM 调用更简单更准。例:先生成营销文案 → 再翻译成其他语言。
-
Routing(路由):先分类输入,再导向专门的后续处理。适用于输入有明确分类、不同类别需要不同处理。例:客服问题分流到不同 prompt 和工具;简单问题走小模型,难题走大模型。
-
Parallelization(并行化):两种变体——分片(任务拆成独立子任务并行跑,结果聚合)和投票(同一任务跑多次,取多个输出的共识)。适用于子任务可并行加速,或需要多视角提高置信度。例:一个模型处理用户请求,另一个并行做内容安全审查。
-
Orchestrator-Workers(编排-执行):中心 LLM 动态拆解任务、分配给 worker、综合结果,子任务不是预定义的,由编排者根据输入运行时决定。适用于复杂任务,子任务数量和性质无法预知。例:改多个文件的编码任务。与并行化的区别:并行化的子任务是预定义的,编排-执行的子任务是运行时决定的——这也是 claude-code-usage 里”扇出与综合”模式的理论原型。
-
Evaluator-Optimizer(评估-优化):一个 LLM 生成,另一个 LLM 评估反馈,循环迭代直到满意。适用于有明确评估标准、迭代优化有可衡量改进的场景。例:文学翻译、复杂搜索。这也是 claude-code-usage 中”对抗验证”模式的理论原型。
Agent 模式
Agent = LLM 在循环中根据环境反馈自主使用工具,直到任务完成:Human → Agent → [Observe → Think → Act → Observe → ...] → Done(可随时回到人类获取反馈)。
核心特征:
- 起点是人类指令,之后自主规划和执行
- 每步从环境获取真实反馈(工具返回、代码执行结果)
- 可在检查点暂停等人类确认
- 需要设定停止条件(最大迭代次数)
适用于开放性问题、步骤数无法预测、无法写死路径的场景,例如 SWE-bench 编码 Agent、Computer Use Agent。注意:自主性 = 更高成本 + 错误可能累积,建议在沙箱中充分测试并加防护栏。
三个核心原则
- 保持简单——Agent 设计越简单越好
- 保持透明——显式展示 Agent 的规划步骤
- 精心设计 ACI(Agent-Computer Interface)——和 HCI 同等重要,工具文档和测试要下功夫
工具设计(ACI)要点
工具定义和规范应该获得和 prompt 同等程度的打磨:
- 格式贴近模型在互联网上见过的自然文本,不要让模型写 diff header 或转义 JSON 代码
- 给模型足够的 token”思考”,别让它写到角落里退不出来
- 参数命名和描述要让模型一看就懂,像给初级开发者写 docstring
- 防错设计(Poka-yoke):改参数让错误更难发生(如强制绝对路径代替相对路径)
- 大量测试:用真实输入跑,看模型犯什么错,迭代优化工具定义
Anthropic 在做 SWE-bench Agent 时,花在优化工具上的时间比优化 prompt 还多。
框架建议
框架(Claude Agent SDK、LangGraph 等)能快速上手,但会引入抽象层,让调试更难,也容易诱使开发者加不必要的复杂度。建议先用 LLM API 直接写——很多模式几行代码就能实现。如果用框架,务必理解底层代码,因为对框架行为的错误假设是客户最常见的错误来源。
与 Claude Code 实践的对照
这篇 2026 年初的理论文章为后续 Claude Code 的 claude-code-usage、claude-code-subagents 提供了设计原型:Orchestrator-Workers → Dynamic Workflows 的”扇出与综合”,Evaluator-Optimizer → “对抗验证”,而 Subagents 机制本质上是把”侵占主上下文的子任务”隔离出去执行的工程实现,呼应了本文”保持简单、保持透明”的原则。