LLM 分 Agent 的增益原理与权衡
概述
在 LLM 应用中,将一个复杂任务拆分为多个子 Agent(Sub-Agent)协作完成,往往比单个 Agent 端到端处理效果更好。这并非简单的”分工”,而是从根本上缓解了 LLM 的多项固有瓶颈。
核心原因
1. 上下文窗口聚焦
LLM 的上下文窗口是有限资源。单个 Agent 处理复杂任务时,上下文中同时塞入任务描述、多轮工具调用结果、中间状态、历史对话等,导致”信号被噪声淹没”。
分 Agent 后,每个子 Agent 只接收与自己职责相关的上下文片段,信噪比大幅提高。
2. 缓解”Lost in the Middle”问题
研究表明,LLM 对上下文中间部分的信息利用效率显著低于首尾。当上下文过长时,中间的关键信息容易被忽略。分 Agent 将长上下文切分为多个短上下文,每个子 Agent 的关键信息都处于高注意力区域。
3. 降低单步推理复杂度
LLM 的推理能力并非无限。一个需要同时考虑架构设计、代码实现、测试策略、错误处理的任务,对模型的认知负荷远大于只做其中一项。
分 Agent 本质上是一种认知卸载(cognitive offloading):把一个需要”同时想很多事”的难题,变成多个”只想一件事”的简单题。
4. 工具选择精度提升
当一个 Agent 可以调用 20+ 种工具时,选错工具的概率显著上升。每个子 Agent 只暴露与其职责相关的少量工具,工具选择变成一个更简单的决策问题。
5. 并行执行
独立的子任务可以并行运行,缩短总执行时间。例如:同时在多个文件中搜索信息、同时运行测试和代码检查。这是单 Agent 串行执行无法实现的。
6. 错误隔离
单 Agent 模式下,一次工具调用失败或推理偏差可能污染后续所有步骤(error propagation)。分 Agent 后,一个子 Agent 的失败不会影响其他子 Agent 的上下文,可以独立重试或降级处理。
7. 专业化的系统提示
每个子 Agent 可以有针对性的系统提示(system prompt),明确角色、约束和输出格式。这比在一个巨大的系统提示中塞入所有指令更有效——LLM 对清晰、聚焦的指令遵循度更高。
类比理解
| 单 Agent | 分 Agent |
|---|---|
| 一个人同时当架构师、开发者、测试、产品经理 | 每个角色各一人,各司其职 |
| 一个函数 1000 行包含所有逻辑 | 拆成多个单一职责的函数 |
| 开卷考试但书太多找不到答案 | 每科只带对应的参考书 |
分 Agent 的代价与权衡
分 Agent 不是免费的,需要注意:
- 协调开销:父 Agent 需要拆分任务、分发、汇总结果,这本身消耗 token 和推理能力
- 上下文断裂:子 Agent 看不到全局信息,可能做出局部最优但全局次优的决策
- Token 总量增加:多个 Agent 各自有系统提示和上下文,总 token 消耗通常更高
- 设计复杂度:如何拆分任务、如何定义 Agent 边界是一个需要经验的设计问题
因此,并非所有场景都适合分 Agent。简单任务用单 Agent 反而更高效。分 Agent 的收益主要体现在:任务复杂度高、涉及多个独立子任务、上下文量大的场景。
关键要点
- 分 Agent 的核心收益是降低每个推理步骤的复杂度,而非简单的分工
- 最重要的两个机制:上下文聚焦 + 认知负荷降低
- 适用于复杂、可分解、上下文量大的任务;简单任务不需要
- 设计 Agent 拆分方案时,应以”最小化子 Agent 间的信息依赖”为原则