多 Agent + 外挂协同

主 Agent + 子 Agent + 外挂系统,三个角色怎么协同才能不互相打架、不串台、不拖慢。这篇是四种典型编排模式 + 失败传播规则 + 一个完整实战对话模板。

前置条件

一、什么时候需要多 Agent

新手只用一个龙虾。但当你遇到下面这些场景,单 agent 就不够了:

  • 并行任务:同时研究 3 个竞品,串行要 30 分钟,并行只要 10 分钟
  • 隔离上下文:派一个子 agent 专门做"长文档总结",不污染主 agent 的对话记忆
  • 专家分工:一个 agent 专门查数据,一个专门写文案,一个专门做校对
  • 风险隔离:高权限操作(生产数据库)交给一个受限的子 agent,主 agent 拿不到原始数据

判断标准:如果任务的某一部分会污染主上下文可以并发,就拆成子 agent。

不要为了多 agent 而多 agent

每个子 agent 都是一次完整的 LLM 调用上下文——token 消耗翻倍、响应时间变长。能用一个 skill 解决的,不要拆成子 agent。子 agent 是编排层的工具,不是所有任务的工具。

二、四种典型编排模式

模式 1:主从(Master / Slave)

最简单。主 agent 拆任务、派活、收结果。

        ┌──────────┐
        │ 主 Agent │
        └────┬─────┘
             │ 派发任务
   ┌─────────┼─────────┐
   ▼         ▼         ▼
┌──────┐ ┌──────┐ ┌──────┐
│子 A  │ │子 B  │ │子 C  │
└──────┘ └──────┘ └──────┘

适合:主 agent 能明确把任务拆成 N 个互不依赖的子任务。

对话模板

帮我做一个竞品调研任务,用主从模式编排:

主任务:对比 3 个竞品(X / Y / Z)的产品定位
拆分:派 3 个独立子 agent,每个负责一个竞品:
  - 子 A:抓取竞品 X 的官网和产品页,整理 markdown 摘要
  - 子 B:抓取竞品 Y 的官网和产品页,整理 markdown 摘要
  - 子 C:抓取竞品 Z 的官网和产品页,整理 markdown 摘要

3 个子 agent 并发跑(不串行),全部完成后主 agent 把 3 份摘要汇总成对比表。

失败策略:单个子 agent 抓取失败重试 2 次,仍失败则跳过、标注"failed"。
最后告诉我:成功几个、失败几个、对比表。

模式 2:流水线(Pipeline)

每个 agent 处理一个阶段,输出给下一个。

┌──────┐     ┌──────┐     ┌──────┐     ┌──────┐
│ 抓取 │ ──> │ 翻译 │ ──> │ 摘要 │ ──> │ 排版 │
└──────┘     └──────┘     └──────┘     └──────┘

适合:任务有清晰的"上下游"阶段,每阶段需要的 prompt 完全不同。

对话模板

帮我做一个内容处理流水线,处理这篇文章:〈URL〉

按流水线 4 阶段编排:
1. 子 agent A(抓取):调 fetch_skill 抓原文
2. A 完成后,结果传给子 agent B(翻译):译成中文
3. B 完成后,传给子 agent C(摘要):做 200 字摘要
4. C 完成后,主 agent 排版推送给我

失败策略:任一阶段失败则停止整条流水线,告诉我失败位置和原因。

模式 3:并行 + 汇总(Fan-out / Fan-in)

N 个子 agent 并发跑,主 agent 等齐后汇总。

        ┌──────────┐
        │ 主 Agent │
        └────┬─────┘
             │ fan-out
   ┌─────────┼─────────┐
   ▼         ▼         ▼
┌──────┐ ┌──────┐ ┌──────┐
│子 A  │ │子 B  │ │子 C  │
└──┬───┘ └──┬───┘ └──┬───┘
   └─────────┼─────────┘
             │ fan-in

        ┌──────────┐
        │ 主 Agent │ ← 汇总
        └──────────┘

跟主从的区别:主从每个子 agent 任务可能不同,fan-out/in 的子 agent 任务模板相同,只是参数不同。

适合:批量同质任务(处理 10 个文件、查 50 个 URL)。

对话模板

帮我做一个批量处理任务,用 fan-out/in 模式:

任务:对下面 10 个 URL,每个派一个子 agent 做"抓取+摘要"
URL 列表:
  〈URL_1〉
  〈URL_2〉
  ... 
  〈URL_10〉

每个子 agent 任务模板相同,只是 URL 不同:
- 抓取 URL
- 返回 200 字摘要

10 个子 agent 并发跑。所有完成后,主 agent 把 10 份摘要合并成总报告。
失败策略:失败的子 agent 跳过,最后报告标注哪些 URL 失败。

模式 4:协商(Negotiation)

多个子 agent 各自给出方案,主 agent 或另一个评审 agent 选最优。

┌─────────────┐
│  主 Agent   │
└──────┬──────┘
       │ 分派同一个问题
   ┌───┴───┐
   ▼       ▼
┌──────┐ ┌──────┐
│专家 A │ │专家 B │  ← 各自独立给方案
└──┬───┘ └──┬───┘
   └───┬────┘

┌─────────────┐
│ 评审 Agent  │  ← 选最优 / 合并
└─────────────┘

适合:开放性问题(设计、写作、决策),单一思路容易跑偏。

对话模板

帮我做一个设计决策任务,用协商模式:

目标:给我们团队的周报定一个模板

派两个独立子 agent 当"专家",各自给方案:
- 专家 A:偏向"数据驱动"风格,重点是 KPI 表格,理由是清晰可量化
- 专家 B:偏向"叙事"风格,重点是进展故事,理由是好读有温度

两个方案都给我后,对比优劣:
- 数据驱动的优劣
- 叙事的优劣

然后根据我们团队的风格(〈描述团队特点〉),选一个或合并,给出最终方案。

三、子 Agent 和外挂的配合

子 agent 是"龙虾的分身",外挂是"龙虾的同事"。两者经常配合:

场景子 Agent 干什么外挂干什么
批量数据处理决定处理哪些数据、用什么策略实际跑 SQL / 调 API
多源信息汇总决定查哪些源、怎么合并抓取单个源
多步骤业务编排步骤、应对异常执行每一步的具体动作

铁律子 agent 永远不直接碰外挂的敏感数据。子 agent 调用 skill,skill 调外挂,外挂返回脱敏结果给子 agent,子 agent 处理后给主 agent。

主 agent
   │ 调用

子 agent
   │ 调用 skill

Skill(脱敏层)
   │ 调用

外挂(执行层)

四、失败传播和降级

多 agent 编排最容易翻车的地方:一个子 agent 失败了,整条链怎么办

三种策略

策略含义适合
Fail Fast任一子 agent 失败,立刻终止整个任务强一致场景(金融、交易)
Fail Safe失败的子 agent 返回默认值/空值,继续信息聚合场景(少一两个数据源不影响整体)
Retry & Skip失败重试 N 次,仍失败则跳过、记录网络不稳定场景

在对话里明确选哪个

任务失败策略(写进每个子 agent 的 prompt):
- 网络错误:自动重试 3 次,间隔 5 秒
- 仍失败:跳过这个子 agent,标注"failed"
- 主 agent 汇总时,失败的子 agent 不计入总数
- 如果失败超过 50%,整个任务判定为"失败",不发汇总报告

不要让龙虾自动重试不可逆操作

重试只适用于幂等操作

如果子 agent 调的外挂是"扣款"、"发邮件"、"删数据",绝不要自动重试——失败可能意味着"已经成功了一半",重试会扣两次钱、发两封邮件。

非幂等操作失败 → 直接 fail,让人判断怎么处理。

五、实战:市场调研任务

把前面的拼起来。任务:给 3 个竞品做调研,输出一份对比报告

错误做法(一个龙虾从头干到尾)

让龙虾顺序抓取 3 个网站、各自总结、对比、排版。

问题:① 耗时长(串行);② 上下文被塞满,对比时细节已丢失;③ 抓取失败时整个任务崩。

正确做法(多 agent + 外挂)

架构

主 agent
   │ 1. fan-out: 派 3 个调研子 agent

[子 agent X / Y / Z]  ← 各自调 fetch_skill + summarize_skill
   │ 2. fan-in: 3 份调研报告汇总

主 agent
   │ 3. 派 1 个对比子 agent(专家角色)

对比子 agent
   │ 4. 产出对比表 + 结论

主 agent → 推送到飞书

完整对话模板

帮我做一个市场调研任务,按下面步骤编排:

阶段 1 - 并发调研(fan-out):
派 3 个独立子 agent,分别负责竞品 X / Y / Z。
每个子 agent 的任务:调 fetch_skill 抓官网、用 summarize_skill 生成 markdown 调研报告。
失败策略:单个子 agent 抓取失败,重试 2 次;仍失败则跳过、标注。

阶段 2 - 汇总(fan-in):
3 个子 agent 都返回(或失败)后,主 agent 把成功的报告合并。

阶段 3 - 对比分析:
派一个"对比分析"子 agent,输入是合并后的报告,输出是对比表格(功能 / 价格 / 优劣)+ 结论。
如果阶段 1 失败超过 1 个,对比子 agent 不发起,直接报告"数据不足"。

阶段 4 - 推送:
对比报告生成后,通过飞书推送给我。

执行过程中:
- 每个阶段开始和结束时告诉我进度
- 失败的子 agent 不要重试超过 2 次
- 整个任务如果超过 30 分钟,主动停下来告诉我卡在哪

关键点:

  1. fan-out 阶段,每个子 agent 上下文隔离——抓竞品 X 的子 agent 不知道竞品 Y 的存在
  2. fan-in 在主 agent 做,避免子 agent 互相串台
  3. 失败策略显式写——单个失败不阻断、超过 50% 失败则中止
  4. 每个子 agent 调 skill,不直接抓 URL——抓取失败时 skill 层处理重试

六、调试技巧

1. 先单 agent 跑通,再加 agent

不要一上来就 3 agent 并发。先用 1 个 agent 把完整流程跑通(哪怕是串行的),然后逐个阶段拆成子 agent。每拆一个就测一次。

我有一个多 agent 任务想调试。先帮我用单 agent 模式跑一遍完整流程(即使串行也行),跑通后我们再逐个阶段拆成子 agent。每拆一个就测一次。

2. 让子 agent 输出过程日志

每个子 agent 在完成时,除了返回结果,还要返回:
- 用了哪个 skill
- skill 返回了多少数据
- 哪一步花了最长时间
- 是否触发了重试

主 agent 收齐后,先输出一份"执行摘要",再输出最终结果。

3. 调试时关掉并发

调试模式:所有子 agent 串行执行,每个完成后打印"子 agent X 完成",再启动下一个。
确认逻辑正确后再切回并发模式。

七、下一步

正文导航

打开抖音
有问题点击我