多智能体编排实践:从单 Agent 到 Coordinator-Subagent 架构的踩坑记录

11 阅读3分钟

业务背景

把一个大任务交给单个 Agent,问题不在模型能力,而在上下文与稳定性:任务越长,上下文越容易漂;一旦某一步失败,整个会话要重来。多智能体编排的思路,是把大任务拆成可独立执行、可独立验收的子任务,由一个 Coordinator 统一调度。

关键挑战

  1. 任务拆解粒度:拆太粗,子 Agent 仍会上下文爆炸;拆太细,调度开销与 token 成本上升。
  2. 状态共享:子 Agent 之间如何同步"已知信息"(代码库怎么测、团队偏好什么),否则每个子 Agent 都在重复探索。
  3. 失败恢复:某个子 Agent 挂了,是重试、降级,还是回滚?没有统一策略就会互相甩锅。
  4. 成本放大:并行不是免费的。参考 Cursor 官方文档,五个子智能体并行约等于五倍 token 消耗——因为它各自维护独立上下文。

方案:Coordinator-Subagent 分层

核心是把"决策"和"执行"分离。Coordinator 只做规划、派活、验收,不直接干活;Subagent 只做被指派的事,做完即返回。

# 伪代码:最小可用的分层编排骨架
class Coordinator:
    def run(self, goal: str):
        plan = self.decompose(goal)          # 1. 拆解为可验收子任务
        results = {}
        for task in plan.tasks:
            agent = self.spawn(task)         # 2. 派活(可并行)
            result = agent.execute(task)
            if not self.verify(task, result): # 3. 验收失败则重派/升级
                result = self.retry_or_escalate(task)
            results[task.id] = result
        return self.merge(results)           # 4. 汇总,交回人工终审

    def verify(self, task, result) -> bool:
        # 验收标准来自预先写好的 checklist,不依赖模型自由发挥
        return all(check(result) for check in task.acceptance_criteria)

三个设计要点:

  • Coordinator 不写代码/不产内容,只调度。这样它永远不会被单个子任务卡住,始终能响应新指令。
  • 验收标准前置:task.acceptance_criteria 在拆解时就确定,避免"做完才发现不对"。
  • 共享上下文文件:把"怎么测、怎么部署、团队偏好"沉淀成项目级文件,所有子 Agent 继承,减少重复探索。

实测观察

维度单 Agent分层多 Agent
长任务稳定性上下文易漂,中断即重来子任务独立,失败可局部重试
并行能力受单会话限制受资源与预算限制(非数量限制)
token 成本线性约按并行数倍增
适用任务短、单步长、可拆解、可验收

踩坑记录

  • 并发不是越多越好。社区有反馈:一次性拉起数十个子 Agent 会打爆执行宿主,出现"无法启动""工作区断开"。稳妥做法是分批(wave),一批跑完再起下一批。
  • 递归深度要限制。子 Agent 再开子 Agent 会形成树,失控。建议限制层级(部分产品已限制为两层)。
  • 验收标准模糊的任务别交给多 Agent。编程任务有测试可自动验收,所以效果好;换成"写一份市场分析",验收标准一模糊,产出质量就不可控。

适合 / 不适合

适合:任务可拆解、每步有明确验收标准、重复度高(迁移、批量重构、持续维护)。 不适合:任务边界模糊、验收靠主观判断、数据敏感且无法自托管的场景。

结论:多智能体编排降的是"搭编排层"的工程成本,不是"把活想清楚"的认知成本。后者仍是人的活。