AI AgentTechnical Deep Dive

多 Agent 协同:不是 Agent 越多越强,而是上下文分配得更合理

发布时间2026/03/07
分类AI Agent
预计阅读11 分钟
作者吴长龙
*

多 Agent 的价值不在“多”本身,而在于把复杂任务拆成边界清晰的角色,让每个执行单元只看到完成当前任务需要的信息。

01.先说结论:不是所有复杂任务都需要多 Agent

这是当前 LangChain 官方 multi-agent 文档里最值得先记住的一句话的意思:很多人说自己需要“multi-agent”,本质上是在追求下面几种能力之一:

  • 更好的上下文管理
  • 更清晰的职责边界
  • 更高的并行度
  • 更强的流程控制

但这并不自动意味着你必须真的拆成多个 agent。很多任务只要:

  • 缩减工具数量
  • 调整 prompt
  • 做好动态上下文加载

一个 agent 就已经够用了。

所以多 Agent 设计的起点,不应该是“我要不要也做一个多 Agent 系统”,而应该是:

单 Agent 现在到底卡在上下文、职责、并行还是流程控制的哪个问题上?

只有先回答清楚这个问题,后面的模式选择才有意义。

02.多 Agent 真正的核心是 context engineering

官方文档把这个点讲得很直白:multi-agent design 的中心问题是 context engineering,也就是“每个 agent 应该看到什么”。

这比“每个 agent 叫什么角色”重要得多。

因为一旦上下文分配做不好,就会出现两个常见问题:

  • 每个 agent 都看到太多信息,拆了和没拆差不多
  • 每个 agent 看不到真正需要的信息,只能低质量猜测

所以多 Agent 不是先拆角色,而是先做信息边界设计。

03.什么时候值得考虑多 Agent

更适合引入多 Agent 的情况通常有这些:

  • 一个 agent 的工具太多,选择明显变差
  • 任务由多个领域组成,单个上下文已经装不下
  • 不同步骤天然可以并行
  • 不同团队需要独立维护不同能力模块

如果只是一个普通问答助手或几个工具调用的工作流,先把单 Agent 做稳,几乎总是更划算。

04.官方文档里的 5 种核心模式

LangChain 当前官方 multi-agent 文档给出的模式非常值得直接吸收,因为它们本质上是在回答不同的工程约束。

1. Subagents

一个主 agent 把其他 agent 当成工具来调用。所有路由都经过主 agent。

适合:

  • 主控逻辑必须集中
  • 需要强上下文隔离
  • 需要并行调用多个子能力

代价是模型调用次数通常会更多,因为每次子任务结果都要回到主 agent 汇总。

2. Handoffs

控制权在不同 agent 之间切换。当前 agent 可以把对话直接交给另一个 agent。

适合:

  • 任务在不同阶段由不同角色主导
  • 子 agent 需要直接和用户继续交互
  • 希望在重复请求时复用当前活跃 agent 的状态

3. Skills

仍然是单 Agent 主控,但会按需加载特定技能、提示词或知识块。

适合:

  • 你主要想解决上下文过载,而不是必须拆成多个长期活跃角色
  • 希望保留统一对话入口

很多团队以为自己要“多 Agent”,其实最后真正需要的只是 skills。

4. Router

先做一个路由步骤,把请求分配给一个或多个专门 agent,再综合结果。

适合:

  • 输入类型差异明显
  • 不同分支彼此独立
  • 可以并行执行

5. Custom workflow

用 LangGraph 自己编排,把上述模式嵌到更复杂的流程里。

适合:

  • 需要 deterministic + agentic 混合流程
  • 需要审批、暂停、恢复、回放
  • 需要对子流程做更细控制

这类场景已经不是“简单多 Agent”,而是完整工作流系统。

05.怎么选,不要靠感觉

官方文档已经给了一个很好的判断思路,我这里把它翻成更接近工程语言的版本:

优先选 Subagents,当你需要

  • 明确的中心调度者
  • 强上下文隔离
  • 子能力像工具一样被调用

优先选 Handoffs,当你需要

  • 对话主导权切换
  • 子 agent 直接面向用户
  • 连续多轮任务里复用当前激活角色

优先选 Skills,当你需要

  • 按需加载领域知识
  • 维持单 Agent 体验
  • 降低 token 成本和上下文噪音

优先选 Router,当你需要

  • 显式分类后分发
  • 并行跑多个专门分支
  • 最后做统一综合

优先选 Custom workflow,当你需要

  • 复杂控制流
  • 多阶段状态迁移
  • 人工审核和恢复

06.一个简单的 Subagents 思路

如果你要做“研究 -> 分析 -> 写作”的流程,第一反应不一定要上 3 个长期对话 agent。一个更稳的起点,是让主 agent 调用三个子 agent 作为工具。

python snippetpython
def research_agent(task: str) -> str:
    """负责收集事实与资料。"""
    return "研究结果"


def analysis_agent(research: str) -> str:
    """负责提炼结论。"""
    return "分析结果"


def writing_agent(analysis: str) -> str:
    """负责组织输出。"""
    return "最终文稿"

这当然不是完整实现,但它体现了一个关键设计:

  • 研究 agent 不需要看到写作风格约束
  • 写作 agent 不需要看到全部搜索细节
  • 主 agent 只拿每一步的结果做协调

这就是 context engineering 的直接收益。

07.什么时候该把它提升到 LangGraph workflow

如果你的多 Agent 系统开始出现下面这些需求,就说明高层模式可能不够了:

  • 某些步骤失败要重试
  • 某些阶段要插人工审核
  • 某些子任务要并行再合并
  • 任务可以暂停,稍后恢复
  • 整条执行链需要可回放

这时更适合用 LangGraph 的 subgraphs 或 custom workflow,把 agent 模式嵌进图里,而不是继续依赖隐式控制流。

一个简单的图式思路可能像这样:

text snippettext
router
  -> research_subgraph
  -> analysis_subgraph
  -> review_subgraph
  -> synthesis
  -> END

官方 subgraphs 文档也明确提到,它适合:

  • 构建 multi-agent systems
  • 复用一组节点
  • 让不同团队维护不同子图

08.多 Agent 最容易踩的几个坑

1. 角色很多,边界很糊

把系统拆成 5 个 agent 听起来很高级,但如果它们都在读写同一堆上下文、做差不多的事,实际只是在增加协调成本。

2. 没有计算调用和 token 成本

官方 multi-agent 文档还专门比较了不同模式的调用数和 token 成本。这个提醒非常重要:模式不同,延迟和成本结构会差很多。

尤其是:

  • Subagents 通常控制力更强,但调用数可能更多
  • Skills 和 handoffs 在重复请求里更省调用
  • Router 适合并行,但也会引入额外路由开销

所以多 Agent 不是白来的能力,它几乎总是用更多复杂度换更强的边界控制。

3. 只拆角色,不拆上下文

如果每个 agent 仍然拿到几乎相同的信息,多 Agent 基本就失去意义了。

4. 过早框架化

任务还没验证清楚时,就开始设计一整套 supervisor、worker、message bus,最后很可能只是把一个本来简单的问题提前做复杂。

09.一个更稳妥的落地顺序

如果你现在正在考虑多 Agent,我会更建议按这个顺序来:

  • 先把单 Agent 跑稳
  • 找出单 Agent 真正的瓶颈是上下文、工具选择还是并行
  • 先尝试 skills 或 router 这种较轻模式
  • 只有在需要恢复、审批、并行合并时,再上 LangGraph custom workflow

这个顺序能帮你避免“为了多 Agent 而多 Agent”。

10.总结

多 Agent 的价值从来不在“Agent 数量”,而在更合理的信息分配和职责边界:

  • 用 subagents 做集中调度
  • 用 handoffs 做对话主导权切换
  • 用 skills 做按需上下文加载
  • 用 router 做分类分发
  • 用 custom workflow 做复杂编排

只要记住一点,设计通常就不会跑偏:多 Agent 的核心不是角色设定,而是 context engineering。

11.参考资料