构建高效
Agent
基于 Anthropic「Building Effective Agents」方法论,从增强型 LLM 到五大工作流模式、自主 Agent 架构到上下文工程,8 章节系统掌握 Agent 设计哲学。
Chapter 01
增强型 LLM — Agent 的基础积木
在讨论 Agent 和工作流之前,Anthropic 首先定义了一切的原子单元:增强型 LLM。裸模型什么都不是,加上 retrieval、tools 和 memory,它才成为可组合的积木。
Anthropic 核心理念
Agent 系统的成功不取决于框架有多复杂,而取决于你的基础积木有多可靠。把一个增强型 LLM 做到极致,比堆叠十个脆弱组件强一百倍。
四大增强能力
检索 (Retrieval)
让 LLM 访问最新知识。通过 RAG 从向量数据库、搜索引擎或文档库中拉取相关上下文,解决模型知识截止日期和领域知识不足的问题。
工具 (Tools)
让 LLM 对外部世界产生副作用。发邮件、查数据库、调 API、执行代码——工具把"只会说"变成"能做事"。
记忆 (Memory)
跨对话持久化信息。短期记忆是当前上下文窗口,长期记忆是持久化的用户偏好、历史摘要、学到的事实。
LLM 核心 (Model)
推理引擎本身。选择合适的模型(速度 vs 能力权衡)、设计精准的 System Prompt、控制温度和输出格式。
为什么"增强型 LLM"是第一原则?
Anthropic 的方法论有一个反直觉的起点:别急着造 Agent。
很多团队一上来就想搭建复杂的多 Agent 系统,结果是:
- 每个节点的 LLM 调用都不够可靠 → 错误在链路中指数放大
- 调试困难 → 不知道问题出在哪个环节
- 延迟叠加 → 用户体验反而不如单次调用
正确的做法是:先把一个增强型 LLM 做到足够好——检索够准、工具够稳、Prompt 够清晰——然后才考虑是否需要工作流或 Agent。
代码示例:构建一个增强型 LLM
设计原则
增强型 LLM 是一个可组合的原子单元。所有后续的工作流模式和 Agent 架构,本质上都是对这个原子单元的不同编排方式。先让原子足够强,再谈分子结构。
五大工作流模式
Anthropic 定义的五种预定义编排模式 — 在需要 Agent 之前先用工作流
Chapter 02
提示链 (Prompt Chaining)
将复杂任务分解为一系列串行的 LLM 调用,每一步的输出成为下一步的输入。中间可以插入"质量门禁"来验证结果。
核心优势
每一步都可以独立优化 Prompt、独立验证输出质量。用简单可控的步骤处理复杂任务,降低出错概率。
适用前提
任务可以清晰地分解为顺序步骤。如果步骤之间需要复杂的条件分支,请考虑路由模式。
典型用例:文档生成流水线
- Step 1 — 生成大纲:LLM 根据需求生成文档大纲
- Gate — 大纲审查:检查大纲是否覆盖所有必要章节
- Step 2 — 逐章撰写:LLM 根据大纲逐章生成内容
- Gate — 内容审查:检查是否有事实性错误、格式问题
- Step 3 — 润色与格式化:最终编辑、语言风格统一
另一个经典用例是代码审查:Step 1 理解代码意图 → Step 2 检查潜在 bug → Step 3 生成审查报告。
代码示例:营销文案生成链
Anthropic 建议
提示链中的"门禁"(Gate) 是关键——它不只是错误检查,更是用编程逻辑补偿 LLM 的不确定性。门禁可以是简单的格式验证,也可以是另一个 LLM 调用来判断质量。
Chapter 03
路由 (Routing)
对输入进行分类,然后将其路由到最合适的专业处理器。每个分支可以有独立的 Prompt、工具集、甚至不同的模型。
类别 A
专业 Prompt + 工具集 A
类别 B
专业 Prompt + 工具集 B
类别 C
专业 Prompt + 工具集 C
关键洞察
路由的本质是关注点分离。一个通用 Prompt 很难同时处理投诉、咨询、退货三种场景;但三个专业 Prompt 各自处理一种场景,效果显著提升。LLM 擅长分类,分类准确率往往远高于"一个 Prompt 处理所有情况"。
典型用例:客服分流系统
分类层:分析用户消息意图,分为:
- 技术支持 → 路由到技术知识库 RAG + 诊断工具
- 退换货 → 路由到订单系统 API + 退货政策 Prompt
- 销售咨询 → 路由到产品数据库 + 推荐引擎
- 投诉 → 路由到情绪安抚 Prompt + 升级工单系统
另一个典型场景是内容审核:先分类内容类型(文本/图片/视频),再路由到不同审核管道。
代码示例:路由分类器
Chapter 04
并行化 (Parallelization)
同时运行多个 LLM 调用,要么处理任务的不同方面(分段),要么用多次尝试提高可靠性(投票)。
分段 (Sectioning)
把任务拆成独立子任务,并行处理后合并结果。
投票 (Voting)
同一任务执行多次,聚合结果选出最佳答案或多数答案。
典型用例:代码审查并行化
传统做法是让一个 LLM 做"全面审查",但效果往往不够好。并行化方案:
- 安全审查 Agent → 专注检查注入攻击、XSS、权限漏洞
- 代码风格 Agent → 检查命名规范、代码结构、DRY 原则
- 正确性 Agent → 检查逻辑错误、边界条件、类型安全
- 性能 Agent → 检查 N+1 查询、内存泄漏、算法复杂度
四个 Agent 同时运行,最后合并为一份完整的审查报告。每个 Agent 的 Prompt 可以专注于一个维度,比"什么都审"准确得多。
代码示例:并行安全审查
何时用投票
当任务的准确性比延迟更重要时,用投票。例如内容审核:宁可多花 3 倍 token,也不能漏掉有害内容。三次审核中两次标记为有害 → 拦截。
Chapter 05
编排者-执行者 (Orchestrator-Workers)
一个中央 LLM 动态分解任务、分配给工作者 LLM 执行,最后综合结果。与并行化的区别:任务分解是动态的,不是预定义的。
动态分析任务 → 决定需要几个子任务
Worker 1
Worker 2
Worker 3
Worker N
| 维度 | 并行化 | 编排者-执行者 |
|---|---|---|
| 任务分解 | 开发时预定义 | 运行时 LLM 动态决定 |
| 子任务数量 | 固定 | 根据输入变化 |
| 灵活性 | 低(但可控) | 高(但不确定) |
| 适用场景 | 结构化、可预测的任务 | 开放式、复杂的任务 |
典型用例:多源研究任务
用户请求:"帮我调研 2025 年中国新能源汽车市场的竞争格局"
Orchestrator 动态分解:
- Worker 1 → 搜索 BYD、蔚来、理想最新季度财报数据
- Worker 2 → 搜索政策补贴变化和充电基础设施发展
- Worker 3 → 搜索海外市场(欧洲/东南亚)出口数据
- Worker 4 → 搜索技术路线对比(固态电池、800V平台等)
Orchestrator 综合:汇总四个 Worker 的结果,生成结构化研究报告。
注意:如果用户问的是"特斯拉 FSD 技术分析",Orchestrator 可能只生成 2 个 Worker(技术细节 + 竞品对比)。子任务数量由内容决定。
代码示例:编排者模式
复杂度警告
编排者模式引入了LLM 决策不确定性——Orchestrator 的任务分解质量直接决定最终结果。如果任务分解可以硬编码,优先用并行化模式。只有当子任务无法预定义时,才使用编排者模式。
Chapter 06
评估-优化循环 (Evaluator-Optimizer)
一个 LLM 生成内容,另一个 LLM 评估质量并给出改进意见。循环迭代直到达标。这是五大模式中最"Agent 化"的工作流。
Generator
生成/改进内容
Evaluator
评估 + 具体反馈
Generator 的职责
- - 首次生成初始版本
- - 接收 Evaluator 反馈后改进
- - 保留好的部分,修改有问题的部分
Evaluator 的职责
- - 按预定义标准评分
- - 给出具体、可操作的改进建议
- - 判断是否达标(通过/不通过)
典型用例:文学翻译优化
文学翻译是 Evaluator-Optimizer 的理想场景,因为"翻译质量"有明确的评估标准但很难一次做到完美:
- Round 1:Generator 生成初始翻译
- Evaluator:准确性 7/10(第三段有误译),流畅度 6/10(第二段太生硬),文风 5/10(未还原原文幽默感)
- Round 2:Generator 针对反馈修改
- Evaluator:准确性 9/10,流畅度 8/10,文风 7/10(幽默感有了但某处过度本地化)
- Round 3:微调 → 全部 8/10+ → 通过
同样适用于代码优化(功能正确性 + 性能基准 + 代码质量评分)。
代码示例:迭代写作优化器
成本提醒
每一轮迭代都消耗 token。设置最大轮次和明确的评估标准,避免无限循环。Evaluator 的 Prompt 越具体(比如用 rubric 打分而不是"好不好"),收敛越快。
架构选择
何时用工作流、何时用 Agent、以及贯穿一切的上下文工程
Chapter 07
自主 Agent vs 工作流
Anthropic 的核心哲学:不要在工作流能解决问题的地方使用 Agent。Agent 是 LLM 在循环中自主决策,带来灵活性的同时也带来不可预测性。
Anthropic 的忠告
"Start with the simplest solution possible. Don't build a framework — build with LLM API calls directly. Add complexity only when it demonstrably improves outcomes."
从最简单的方案开始。不要搭建框架——直接用 LLM API 调用。只在复杂性能明确改善结果时才增加它。
什么是自主 Agent?
Agent = LLM 在循环中运行,自主决定每一步做什么,直到完成目标。
核心权衡
| 维度 | 工作流 (Workflows) | 自主 Agent (Agents) |
|---|---|---|
| 控制 | 高 — 开发者预定义路径 | 低 — LLM 自主决策 |
| 灵活性 | 低 — 固定模式 | 高 — 适应未知情况 |
| 可预测性 | 高 — 相同输入相似输出 | 低 — 路径可能每次不同 |
| 调试 | 容易 — 每步可检查 | 困难 — 需要 trace 追踪 |
| 延迟 | 可预测 | 不确定(可能多次循环) |
| 成本 | 可预测 | 不确定(token 消耗变化大) |
| 适用场景 | 结构化、可预测的任务 | 开放式、需要适应性的任务 |
何时用 Agent?Anthropic 的判断标准
用工作流的信号:
- 任务步骤可以提前定义
- 需要高可靠性和一致性
- 成本和延迟需要可控
- 错误后果严重(金融、医疗)
用 Agent 的信号:
- 任务步骤无法提前确定(比如"研究这个问题并给出建议")
- 需要自适应——根据中间结果动态调整策略
- 任务涉及多工具协作,工具调用顺序由内容决定
- 可以容忍一定的不确定性和延迟
黄金法则:如果你能画出一个流程图来描述任务 → 用工作流。如果你画不出来 → 考虑 Agent。
Agent 的典型应用场景
Anthropic 提到两类特别适合 Agent 的场景:
1. 编程 Agent(如 Claude Code)
- 需要根据代码上下文动态决定:读哪个文件、改哪行代码、运行什么测试
- 每个步骤的结果决定下一步做什么
- 错误可以通过运行测试来自动检测和修复
2. 计算机使用 Agent
- 操作复杂的 GUI 界面,需要理解屏幕内容并决定点击位置
- 每次操作后界面变化,需要重新评估状态
- 步骤无法提前定义(取决于界面状态)
这两类场景的共同特点:环境反馈丰富(编译器/测试/界面截图),让 Agent 可以"看到"自己行为的结果并自我修正。
代码示例:简单的自主 Agent 循环
注意这个循环的关键:LLM 自己决定何时停止。这就是 Agent 和工作流的本质区别。
Anthropic 的渐进式方法
推荐的演进路径:单次 LLM 调用 → 提示链 → 路由/并行化 → 编排者模式 → 自主 Agent。只在当前方案无法满足需求时,才升级到更复杂的模式。每一步升级都要有明确的"为什么"。
Chapter 08
上下文工程 (Context Engineering)
Prompt Engineering 的进化版。不只是写好提示词,而是系统性地管理 LLM 看到的全部信息——在正确的时间提供正确的上下文。
核心原则
上下文窗口是你唯一拥有的东西。LLM 的全部行为由上下文窗口中的内容决定。它看到什么,就用什么推理。看不到的信息,对它来说就不存在。上下文工程就是精心策划 LLM 看到的一切。
上下文的四个层次
System Prompt 设计
定义角色、行为边界、输出格式、思考方式。好的 System Prompt 不是"你是一个助手",而是详细的行为手册。
Few-shot 示例
用具体的输入-输出示例来"教"模型期望的行为。比千言万语的描述更有效,尤其是格式化输出和边界情况处理。
检索上下文 (RAG)
动态拉取相关信息。关键不是"检索了什么",而是检索结果如何格式化——结构化呈现、标注来源、控制长度。
工具结果 & 记忆
工具返回值的格式化决定后续推理质量。长期记忆的注入时机和方式同样关键——不是越多越好。
System Prompt 设计实战:从初级到专家
初级(常见但效果差):
中级(定义角色和约束):
专家级(完整行为手册):
工具结果格式化:被低估的关键环节
大多数人关注 Prompt 怎么写,却忽略了工具返回值怎么给 LLM 看。
差的做法(把原始 JSON 直接扔给 LLM):
好的做法(结构化、精简、标注重点):
格式化的原则:只给 LLM 它需要的信息,用人类可读的格式,标注关键信息。
记忆管理的三层策略
第一层:会话内记忆(短期)
- 当前对话的所有消息
- 挑战:上下文窗口有限,需要适时摘要压缩
- 策略:保留最近 N 轮完整对话 + 更早对话的摘要
第二层:用户级记忆(中期)
- 用户偏好、历史行为模式、之前解决过的问题
- 存储在数据库中,按需检索注入
- 策略:每次对话结束提取关键事实存入记忆库
第三层:全局知识(长期)
- 产品文档、FAQ、政策规定
- 通过 RAG 按需检索
- 策略:定期更新索引,监控检索质量
上下文窗口管理的实用技巧
1. 信息优先级排序
- System Prompt(最高优先级)→ 总是在最前面
- 当前用户请求 → 紧随其后
- 最相关的检索结果 → 按相关度排序,只取 top-K
- 历史对话 → 最近的优先,旧的可以摘要
2. 上下文压缩技术
- 摘要链:每 N 轮对话生成一次摘要,替换原始消息
- 选择性保留:只保留包含工具调用和关键决策的对话轮次
- 分层缓存:高频信息放在 Prompt 中,低频信息通过工具按需获取
3. 避免的陷阱
- 不要把所有信息都塞进上下文 → 噪声会降低推理质量
- 不要假设"模型会忽略不相关的信息" → 它不会,它会被干扰
- 不要用"请忽略之前的指令" → 这暗示模型存在矛盾指令
全书架构速查表
| 模式 | 核心机制 | 适用场景 | 复杂度 |
|---|---|---|---|
| 增强型 LLM | 单次调用 + 工具 | 大多数简单任务 | 最低 |
| 提示链 | 串行 LLM 调用 + Gate | 可分步的确定性任务 | 低 |
| 路由 | 分类 → 专业处理器 | 多类型输入、客服分流 | 低 |
| 并行化 | 同时多个 LLM 调用 | 多维度审查、投票 | 中 |
| 编排者-执行者 | 动态分解 + 分发 | 开放式研究、复杂编码 | 中高 |
| 评估-优化循环 | 生成 → 评估 → 迭代 | 创意写作、翻译优化 | 中高 |
| 自主 Agent | LLM 循环 + 自主决策 | 不可预定义的复杂任务 | 最高 |
最终心法
Anthropic 反复强调的主题只有一个:简单性。最好的 Agent 系统不是最复杂的系统,而是用最简单的架构解决问题的系统。上下文工程是贯穿所有模式的底层能力——无论你用哪种架构,LLM 看到的信息质量永远是决定性因素。