Sub-Agent 还是 Agent 团队?这个架构决策影响一切

0 阅读4分钟

任务稍微复杂一点,人们就想到多智能体。这个直觉通常是错的。

真正要问的不是"该不该用多个 Agent",而是"这个任务到底需要哪种协调方式"。这个问题的答案,决定了架构的走向。

Sub-Agents vs Agent Teams 架构对比

左边是"过度协调":四个 Agent 之间的箭头乱成一锅粥。右边是"结构化执行":一个父 Agent 统一调度,清晰向下分发。选哪种架构,结果天差地别。

Claude 风格的系统给了你两个选择:Sub-Agent 和 Agent 团队。看着相似,解决的是完全不同的问题。

Sub-Agent:并行 + 隔离

Sub-Agent 是在独立上下文里运行的专注实例。最直接的理解方式是"委托"——你把一件具体的事交出去,它返回一个干净的结果。

每个 Sub-Agent 拿到的东西:

  • 定义其角色的系统提示
  • 一套有限的工具
  • 完全隔离的上下文
  • 一个范围明确的任务

Sub-Agent 工作流程:父 Agent 派发任务,子 Agent 并行执行并压缩结果返回

完成之后,它只返回最终输出,没有推理过程,没有中间步骤。漏斗图说明了这一点:只有压缩后的结果回到父 Agent,上下文始终保持干净。

这一点容易被忽略:Sub-Agent 的价值不仅是速度,更是压缩。它把一团混乱的探索过程变成一个干净的信号传回来。

有三条硬性约束:

  • Sub-Agent 之间不能互相通信
  • Sub-Agent 不能再派生新的 Agent
  • 所有信息流都经过父 Agent

这些限制让系统保持可预测。代码里是这个样子:

from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

async def main():
    async for message in query(
        prompt="Review the authentication module for issues",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Grep", "Glob", "Agent"],
            agents={
                "security-reviewer": AgentDefinition(
                    description="Find vulnerabilities and security risks",
                    prompt="You are a security expert.",
                    tools=["Read", "Grep", "Glob"],
                    model="sonnet",
                ),
                "performance-optimizer": AgentDefinition(
                    description="Identify performance bottlenecks",
                    prompt="You are a performance engineer.",
                    tools=["Read", "Grep", "Glob"],
                    model="sonnet",
                ),
            },
        ),
    ):
        print(message)

注意 description 字段——它是路由信号,父 Agent 靠这个判断把任务交给谁。

Agent 团队:通过通信协调

Agent 团队适合协作场景。不再是互相隔离的工作单元,而是能维持上下文、实时通信、动态调整的 Agent 集合。

Agent 团队架构:Team Lead 分配任务,成员之间直接通信,共享任务列表追踪进度

结构上包含三层:

  • 主导 Agent(Team Lead):分配任务、综合结果,持久化会话
  • 成员 Agent:Frontend Dev、Backend Dev、Test Writer 各自执行,彼此可以直接发消息
  • 共享任务列表:记录任务状态和依赖关系,所有成员都能读写

前端 Agent 发出"API structure changed"的信号,后端和测试 Agent 立刻响应。任务之间不再是单向传递,而是真正的双向协调。

两者的本质差异

Sub-AgentAgent 团队
状态无状态持久化
执行方式一次性持续交互
控制方式父 Agent 管控对等通信
适用场景任务相互独立任务之间有依赖

判断标准很简单:任务之间独立就用 Sub-Agent,任务之间有依赖就用 Agent 团队。

大多数人犯的错误

最常见的设计是按角色切分:规划者、开发者、测试者。这个方案在每次交接时都会丢信息。

按角色拆分(WRONG)vs 按上下文拆分(RIGHT)

左边的"传话游戏":Planner → Implementer → Tester,每次交接都在损耗信息,测试者最后根本不知道规划者当时做了哪些决策。

右边的正确做法:Feature Agent 内部同时包含实现和测试,共享同一上下文,没有任何交接损耗。Auth Agent 是独立的另一个功能域,上下文可以干净切分,才值得分开。

核心原则:按 Agent 需要知道什么来划分,而不是按它扮演什么角色来划分。

五种真正有用的模式

多智能体系统的五种编排模式

Prompt Chaining(顺序链) — 上一步的输出作为下一步的输入,中间可以加可选检查。适合有明确流程的任务。

Routing(路由) — 基于 description 字段把任务派给最合适的 Agent。简单查询用 Haiku,复杂查询上 Sonnet。

Parallelization(并行化) — 独立任务同时跑,Sub-Agent 的典型用例,覆盖面更广。

Orchestrator–Worker(编排者-工作者) — 一个主 Agent 统一调度,其余专注执行。生产环境中最常见的模式。

Evaluator–Optimizer(评估-优化循环) — Generator 生成结果,Evaluator 评估并反馈,形成迭代。质量优先于速度。

什么时候不该上多智能体

有时候一个 Agent 就够了,不要高估架构复杂度带来的收益。

适合用多 Agent:需要上下文隔离、有真正可并行的独立任务、需要领域专业化。

不适合的场景:Agent 之间高度依赖彼此的结果、协调开销超过了并行收益、任务本身很简单。


围绕上下文边界做设计,而不是角色边界。复杂度只有在真正需要的地方才值得付出。