过去一年,Anthropic 与数十个团队合作,帮助他们在不同行业构建 LLM Agent。他们发现一个反直觉的事实:
最成功的实现,不是依靠复杂的框架或专门的库,而是基于简单、可组合的模式。
这篇文章总结了 Anthropic 在构建 Agent 过程中积累的方法论,以及给开发者的实用工程建议。
在 Anthropic 的分类体系中,所有 LLM 增强系统都被称为 agentic systems,但有一个关键的架构区分:
| 类型 | 定义 | 控制方式 |
|---|---|---|
| **Workflow** | 通过**预定义的代码路径**编排 LLM 和工具 | 开发者控制流程 |
| **Agent** | LLM **动态决定**自己的流程和工具使用 | 模型自主控制 |
核心原则:如无必要,不要构建 Agent/Workflow
Agentic 系统通常以延迟和成本换取更好的任务性能。在构建应用时,应该:
当任务可以明确定义、需要可预测性和一致性时,使用 Workflow。
将任务分解为顺序子任务,每个 LLM 调用处理前一个的输出。
输入 → [LLM 1] → 检查点 → [LLM 2] → 检查点 → [LLM 3] → 输出
适用场景: 任务可以干净地分解为固定子任务,用延迟换取更高准确性。
例子:
对输入分类,转发到专门的后续任务。
输入 → [分类器] → 路径 A / 路径 B / 路径 C
适用场景: 复杂任务有明确类别,分开处理效果更好。
例子:
多个任务同时进行,输出聚合处理。
分段(Sectioning): MapReduce 模式,分解为独立子任务并行运行。
投票(Voting): 相同任务并行执行多次,获得多样化输出。
适用场景: 需要加速完成,或需要多视角对比取最优结果。
例子:
中心 LLM 动态分解任务,委托给 worker LLM,汇总结果。
适用场景: 无法预测所需子任务的复杂任务。
关键区别: 与并行化拓扑相似,但子任务不是预定义的,由编排者根据输入动态确定。
例子:
一个 LLM 生成响应,另一个提供评估和反馈,形成闭环。
[生成器] → 输出 → [评估器] → 反馈 → [生成器] → ...
适用场景: 有明确评估标准,迭代改进确实有效。
两个标志:
Agent 适用于开放式问题,难以或无法预测所需步骤,无法硬编码固定路径。
关键前提:
"Agent 只是一些'在一个循环中,基于环境反馈来选择合适的工具,最终完成其任务'的大模型。"实现通常很简单:LLM 使用工具,基于环境反馈循环。
例子:
Agent 设计要简单。不要过度工程化。
明确显示 Agent 的规划和步骤。让用户知道发生了什么。
通过完善的工具文档和测试,精心设计 Agent 与计算机的接口。
工具设计的最佳实践:
在构建 SWE-bench Agent 时,他们花在优化工具上的时间比优化整体提示词还多。例如,发现模型在使用相对路径的工具时会出错(Agent 已移出根目录),于是改为始终要求绝对路径——模型使用这个方法 flawlessly。
许多框架可以简化 Agentic 系统实现:
| 原则 | 含义 |
|---|---|
| **从简单开始** | 不要构建庞大的控制流,提供健壮的原子工具 |
| **为删除而构建** | 架构模块化,新模型会取代你的逻辑 |
| **性能驱动复杂性** | 只有性能明显改善时才增加复杂性 |
| **工具即接口** | 精心设计工具,ACI 与 HCI 同等重要 |
成功 = 正确的系统,而非最复杂的系统
为什么适合 Agent:
为什么适合 Agent:
你在构建 Agent 时遵循了哪些原则?遇到过什么坑?欢迎在评论区分享。
还没有人回复