如果说 LLM 是 Agent 的”大脑”,那么范式(Paradigm)就是大脑的”思维方式”,工具调用机制就是”手”。本篇覆盖 Agent 决策和行动的核心设计模式。
一、五种基础编排模式
Anthropic 在 《Building Effective Agents》 中总结了五种基础编排模式,这是比具体框架更底层的设计原语,所有框架都在这五种模式的基础上组合构建。
1.1 Prompt Chaining(链式调用)
结构:将复杂任务拆解为多个步骤,每个步骤的输出作为下一个步骤的输入。
1 | 用户需求 → [步骤1: 提取关键信息] → [步骤2: 搜索相关资料] → [步骤3: 生成报告] → 输出 |
适用场景:任务有明确的线性步骤,每步结果可验证(加入检查点)。例如:文档翻译 → 质量检验 → 格式化输出。
优点:流程清晰,每步可独立测试;出错时容易定位。
缺点:不灵活,无法处理步骤之间需要动态决策的情况。
1.2 Routing(路由分发)
结构:先对输入进行分类,再路由到对应的专门化子流程。
1 | 用户输入 → [分类器 LLM] → 判断类型 |
适用场景:不同类型的任务需要不同的处理逻辑或专业知识。例如:客服系统按问题类型路由,代码库按语言路由到不同的代码 Agent。
优点:每条路径可以针对性优化;各路径互相隔离,易于维护。
缺点:分类准确率直接决定整体效果;需要维护多条路径。
1.3 Parallelization(并行聚合)
结构:将任务的多个子任务同时执行,再聚合结果。
1 | ├─ [子任务 A] ─┐ |
两种变体:
- 分段并行:同一任务由多个 Agent 独立处理,取最优或多数投票(提升准确率)
- 任务并行:互相独立的子任务同时执行(降低总延迟)
适用场景:子任务之间无依赖关系;对响应速度有要求;需要通过多次独立评估提升准确率。
1.4 Orchestrator-Subagents(主控-子 Agent)
结构:一个 Orchestrator Agent 负责规划和任务分配,多个 Subagent 负责专门的执行工作。
1 | 用户需求 → [Orchestrator] |
适用场景:需要动态规划的复杂任务,子任务在执行前无法完全预知。例如:自主软件工程 Agent(Devin 的模式),复杂研究任务。
特点:Orchestrator 是”项目经理”,Subagent 是”专业执行者”。Orchestrator 的质量直接决定整体效果。
1.5 Evaluator-Optimizer(生成-评估循环)
结构:一个 LLM 生成输出,另一个 LLM 评估并给出改进建议,循环迭代直到质量达标。
1 | [生成 Agent] → 输出草稿 → [评估 Agent] → 满意? → 是 → 最终输出 |
适用场景:输出质量有明确标准;单次生成质量不稳定;可以接受额外的延迟和成本换取更高质量。代表场景:代码生成后自动测试、文章写作后风格评审。
本质:用 LLM 的判断能力来弥补生成能力的不稳定性,类似于”写-改-审”的人类写作流程。
二、三大经典 Agent 范式
在五种基础模式之上,形成了三个经典的 Agent 范式,是目前工程实践中使用最广的决策架构。
2.1 ReAct:推理与行动交织
来源:Yao et al. 2022,论文标题即 “Synergizing Reasoning and Acting in Language Models”。
核心思想:将推理(Reasoning)和行动(Acting)交替进行,而不是先规划所有步骤再执行。每次行动后的观察结果立即影响下一步推理。
1 | Thought: 我需要知道 X 才能回答用户的问题,调用工具 A 查询 X。 |
优点:
- 行动后立即利用观察结果,不会在错误方向上走太远
- 推理步骤可见,便于调试和理解
- 适合信息未知但工具齐全的探索性任务
局限:
- 容易陷入循环(工具调用失败→重试→再失败)
- 对工具的依赖性强,工具不可用时无法应对
- 没有全局规划,可能在局部优化上浪费步骤
2.2 Plan-and-Solve:先规划再执行
核心思想:将任务分解为两个阶段——先制定完整计划(Planning),再按计划执行(Executing)。
1 | 阶段一(规划): |
与 ReAct 的对比:
| 维度 | ReAct | Plan-and-Solve |
|---|---|---|
| 规划时机 | 边走边决策 | 先制定全局计划 |
| 灵活性 | 高,能随时调整 | 低,计划变更成本高 |
| 效率 | 可能走弯路 | 路径更优,但计划本身可能有缺陷 |
| 适用场景 | 探索性任务,步骤未知 | 结构化任务,步骤可预知 |
适用场景:任务的步骤在开始前大体可知,且步骤之间有明确依赖关系。例如:生成技术报告、执行一套完整的数据分析流程。
2.3 Reflection:自我批评与迭代改进
来源:Shinn et al. 2023,Reflexion 论文系列。
核心思想:Agent 在执行后对自己的输出进行评估和反思,将反思结果存入记忆,在下一次尝试时避免同样的错误。
1 | 第一次尝试: |
两种形式:
- 自我反思:Agent 用自己来评估自己(节省成本,但可能有盲区)
- 外部反思:用独立的 Evaluator LLM 或外部工具(如测试框架)来评估
成本-收益分析:Reflection 机制会增加 2-3 倍的 Token 消耗和延迟,适合质量要求高于速度要求的场景(代码生成、复杂分析)。对于简单任务,单次 ReAct 已经够用。
三、工具调用机制
工具是 Agent 连接外部世界的接口,也是从”只能说”到”能做”的关键跨越。
3.1 Tool 范式的演进
1 | 文本输出 → Agent 用自然语言描述要做什么,人类执行 |
每一步都在扩大 Agent 的行动边界,但也带来新的安全和可靠性挑战。
3.2 Function Calling 的工程机制
Function Calling 是目前最主流的工具调用方式,工作机制如下:
1. 工具定义(JSON Schema):
1 | { |
工具描述的质量直接影响 Agent 是否能正确选择和调用工具。description 字段对 LLM 的工具选择影响最大,含糊的描述会导致工具调用错误。
2. 并行 vs 串行工具调用:
- 串行:顺序调用,第 N 个工具的结果可能影响第 N+1 个工具的参数
- 并行:当多个工具调用互不依赖时,同时发出,节省总延迟
现代 LLM API(OpenAI、Anthropic)都支持在单次响应中返回多个工具调用,框架负责并行执行。
3. Tool Hallucination(工具幻觉):
LLM 可能调用不存在的工具,或传入不合法的参数。防护措施:
- 严格校验工具名称是否在注册表中
- 用 JSON Schema 验证参数格式
- 对参数做语义层的合理性检查
3.3 Structured Output:可靠性的基础
问题:自由文本输出无法被程序稳定解析,”大约是 JSON 格式”的输出会导致生产事故。
解决方案:
- JSON Mode:强制要求 LLM 输出合法 JSON,但不能约束 JSON 的具体结构
- JSON Schema 约束:指定输出必须符合特定 Schema,拒绝不合规的输出(最严格)
- Instructor 库:用 Pydantic 定义输出 Schema,自动重试直到格式正确
- Outlines 库:通过约束采样(Constrained Sampling),从 Logit 层面保证输出符合语法
为什么 Structured Output 是生产可靠性的基础:Agent 的工具调用参数、状态更新、最终输出都需要程序处理,非结构化输出意味着每次都需要脆弱的字符串解析,一旦格式偏差就可能导致整个流程失败。
四、范式选择的判断框架
1 | 任务结构是否清晰? |
在实际工程中,复杂系统往往是多种范式的组合:Routing 先分类,Plan-and-Solve 做高层规划,ReAct 执行具体步骤,Reflection 在关键输出上做质量验证。
五、总结
| 概念 | 核心要点 |
|---|---|
| Prompt Chaining | 线性步骤串联,每步输出是下步输入 |
| Routing | 先分类再路由到专门处理流程 |
| Parallelization | 独立子任务并行执行,汇总结果 |
| Orchestrator-Subagents | 主控 Agent 分配任务,专业子 Agent 执行 |
| Evaluator-Optimizer | 生成-评估-改进循环,以质量换速度 |
| ReAct | 推理与行动交替,边做边学,适合探索性任务 |
| Plan-and-Solve | 先规划再执行,适合结构清晰的任务 |
| Reflection | 自我评估与迭代,质量优先时使用 |
| Function Calling | 工具调用的标准机制,Schema 定义工具接口 |
| Structured Output | 约束 LLM 输出格式,生产可靠性的基础 |
下一篇:框架生态全景——从低代码平台到重框架,六层分类图谱与选型判断逻辑。