首页 / 文章

子代理与多代理系统如何分配任务与成本令牌。

子代理与多代理系统:协调者-工作者设计、四种拓扑结构、每种结构的代币成本,以及单代理表现更佳的情形。

发布者:REACTAPP.TOP阅读约 12 分钟2648 词

来源: Subagents vs. Multi-Agent Systems: The Complete Guide to How AI Agents Actually Work Together

为何单个智能体会有性能上限

凡是看过《Claude Code》、《LangGraph》或Claude的研究功能演示的人,都见过这样的场景:助手不再自行回答问题,而是去寻求帮助。这时会出现一个文件检索助手,它四处查找后带回结果;而研究功能则能在人打开两个标签页的时间里悄悄查阅数十个资料来源。这并非模型突然变聪明了,而是有小型团队在背后处理工作。

下文将简要介绍这种团队协作是如何形成的,涵盖子智能体、多智能体系统、其底层架构以及相关成本。

单个智能体,即通过工具在循环中运行的一个模型,确实具备相应能力。它能读取文件、浏览网页、编写代码,并进行多步骤推理。不过,设计中已预设了三个限制:

  • 一个上下文窗口。智能体所读取、思考和执行的所有内容都集中在同一个空间内。在漫长的探索任务中,工具的输出最终会使得初始问题被忽视。
  • 单一执行流程。所有操作都是按顺序进行的。如果进行50次搜索,每次耗时2秒,那么在开始任何输出之前就需要超过90秒的时间。
  • 单一视角。单个提示词决定了所有的决策,因此智能体很难同时考虑两种相互矛盾的方案,也难以发现自身的盲点。

子智能体与多智能体系统是解决这一问题的两种方法,通常会结合使用。后续内容将介绍这两种方法的定义、构建方式以及何时能带来实际效益。

什么是子智能体

子代理是在单个会话中启动的、功能范围有限的辅助工具。它在独立的上下文窗口中处理单一的特定任务,处理完成后再反馈结果。

Claude Code就是一个很好的例子。如果主编码会话需要理解代码库中某些陌生的部分,它可以将探索任务交给子代理,从而避免干扰主对话流程。子代理会:

  • 以一个全新、干净的上下文窗口开始工作
  • 通常只配备数量较少且功能受限的工具
  • 自行执行阅读、搜索和推理的闭环流程
  • 向父会话发送总结,并将对话记录保存在自己那里

这里的重点在于隔离性,而非额外的智能功能。主对话流程不会看到助手打开的五十个文件,只会看到其中重要的三句话,因此即使在长时间的会话中,主线程也能保持清晰,不会被冗余信息充斥。

像 Claude Code 这样的工具在实现该模式时具有以下几大特点:

  • 子代理存在于同一个会话中。它们是一种任务分配方式,而非独立的运行进程。
  • 它们通常无法自行启动其他子代理,这使得层级结构保持扁平,便于理解。
  • 子代理的定义只需编写一次即可重复使用。为审核用子代理设定固定的系统提示和简短的工具列表,它在每次被调用时都会表现出完全一致的行为。
  • 它们可以并行运行于独立的任务中,例如同时检查代码库中的十个不同区域。
  • 什么是多智能体系统

    多智能体系统的结构有所不同。多个独立的智能体各自拥有自己的上下文、工具,有时还有自己的模型,共同追求一个目标,这一过程通常比单次任务委托要漫长或复杂得多。

    Anthropic的Research功能是最著名的公开案例。面对一个宽泛的问题时,不会直接给出答案。相反,一个主智能体会制定解决方案并生成多个子智能体,这些子智能体会同时从不同角度展开研究。它们的结果会被整合,检查引用是否准确,最终以一个统一答案的形式返回。

    总体而言,主导智能体、并行专家智能体以及最终综合步骤构成了当今大多数生产型多智能体系统所采用的模式,也正是本文后续部分要探讨的设计。

    两种概念的差异

    网络上这些术语经常被混用,从而造成混淆。此处展示了它们之间的实际区别。

    最简单的记忆方法是:子智能体是在智能体内部使用的一种技术,而多智能体系统则是围绕多个智能体设计的架构。实际上,许多多智能体系统都是基于子智能体模式构建的。那些使用子智能体的主导智能体同时具备这两种属性。

    协调器与工作节点架构

    几乎所有的生产级多智能体系统,包括 Anthropic 的 Research 功能、LangGraph 的监督者模式以及 Claude Code 的子智能体模型,都属于同一设计模式的变体:协调者与执行者。

    每个组件都有特定的职责:

    • 主导智能体(协调者)。它负责读取查询,制定策略,并判断该任务需要投入多少精力。这一判断的重要性往往超出人们的想象。这些系统的早期版本有时会为一个仅需一个子智能体就能处理的问题启动五十个子智能体。
    • 内存或临时存储区。计划内容会被记录在对话之外。长时间的智能体运行可能会超出模型的上下文窗口限制,如果这种情况在运行过程中发生,计划就必须保留下来,不能随模型内容被截断而消失。
  • 子代理。每个子代理都有明确的目标、规定的输出格式、关于应使用哪些工具和来源的建议,以及明确的界限,以避免两个子代理悄悄重复彼此的工作。每个子代理都会独立执行搜索、判断和优化的工作流程。
  • 引用代理(或综合与验证步骤)。另一个独立的流程会将初稿与原始资料进行比对,并将每一项论断与其来源对应起来。将此步骤与主要代理的写作分开,能显著提高事实的准确性,因为进行核查的人并非那些提出论断的人。
  • 该图使用了两种箭头。实线箭头表示任务向下传递,虚线箭头则表示汇总后的结果向上传递。这种不对称设计是刻意为之:子代理返回的是提炼后的结果而非完整的处理历史,这样可以避免主导代理的上下文信息过载。

    从问题到答案的工作流程

    抛开各个组件不谈,以下是从用户输入的问题到最终答案产生的事件顺序。

    其中有几步值得注意:

    • 第2步(先思考再规划)的重要性超出想象。系统会在这一阶段确定处理该查询所需的投入力度:简单的事实核查可能只需要一个代理和几次工具调用,而范围较广的问题则可能需要十个或更多职责明确的子代理。
  • 第7步(循环处理)将智能体系统与固定流程区分开来。由于主导智能体会查看结果并决定是直接回答还是继续搜索,因此不存在预设的脚本。而这一决策环节也是问题最常出现的部位:过于不愿循环的智能体会给出简略的答案,而过于热衷于循环的智能体则会浪费时间和资源去寻找根本不存在的资料来源。
  • 第8步和第9步,即单独的引用处理阶段的存在,是因为那些被要求撰写答案同时还要自行评估信息来源准确性的智能体,往往会产生缺乏依据的自信论断。通过独立的二次核查可以发现这些问题。
  • 多种智能体配置方式

    协调者与执行者是常见的架构,但并非唯一选择。根据任务的实际拆分方式,四种通用拓扑结构中会有一种比其他更适用。

    当难以决定选择哪种架构时,开发团队通常会遵循一条经验法则:对于要投入生产的系统,优先采用带有监督节点的层级结构;而对于那些流程无法提前确定的探索性或研究性工作,则保持网络或网格布局。 网格设计在图表上看起来很美观,但也是最难调试的。

    其有效原因:代币经济模型

    明确说明多智能体系统为何能在某些任务上优于单智能体系统是很有帮助的,因为答案并非“智能体越多,能力就越强”。

    在Anthropic的内部评估中,以Claude Opus 4作为主导智能体、Claude Sonnet 4作为子智能体的组合,在一项内部研究基准测试中的表现比单独使用Claude Opus 4的智能体高出90.2%。分析其原因后发现,处理能力是主要因素。在一项复杂搜索基准测试中,令牌使用量就占据了性能差异的约80%,而工具调用次数和模型选择则解释了剩余的大部分差异。

    简而言之,在需要处理大量信息的广度优先任务中,优势主要来自处理能力。将任务分配到多个独立的上下文窗口中,能让系统拥有远超过单个窗口的推理空间,而且每个子智能体都会将其读取的内容压缩成简短的报告。

    这种处理能力并非免费。实际数据表明,基于智能体的工作流所消耗的令牌量大约是普通对话交互的四倍,而多智能体工作流则高达十五倍左右。这一倍数决定了该架构是否值得使用,这也引出了下一个要点。

    何时多智能体系统并非合适选择

    大多数关于智能体架构的论述都会跳过这一部分,而恰恰是它能够节省时间和令牌预算。

    任务必须拆分为完全独立的子任务。如果各子任务之间存在高度依赖性,将它们分配给不同智能体处理只会增加协调成本,且无法实现真正的并行处理。那些可以清晰拆分的研究问题适合用多智能体系统,而试图用一个整体函数来完成的任务则通常不适合。

    编程是最明显的反例。 Anthropic 自身的说明也很直白:大多数编程任务的可并行子任务数量少于研究工作,而且目前的智能体还无法可靠地实现实时协作与任务传递。其他基准测试也得出了相同结论。一项学术评估发现,多智能体编程系统的token消耗量是同类单智能体的4倍到200多倍;另一项行业分析则显示,在严格依赖顺序处理的任务中,多智能体系统的表现比单智能体差39%到70%。

    错误会蔓延。 单个智能体中的错误原本只是单一错误,但在协调系统中,它可能通过任务传递不断扩散。有分析指出,在集中式协调下错误会放大约4倍,而当智能体独立运作且缺乏协调时,情况会更糟。

    收益必须足以覆盖成本。由于倍率接近15倍,多智能体设计适用于高价值、高复杂度的工作,如深度研究、多领域分析以及大规模代码重构。对于那些通过合理引导且配备良好工具的单智能体就能一次完成的任务,使用多智能体设计则是过度设计。

    有一个简单的测试方法:如果无法明确界定每个智能体应负责哪些工作而其他智能体不应负责,那么解决方案很可能是强化单个智能体,而非增加更多智能体。

    构建多智能体系统的经验教训

    Anthropic对其研究系统的回顾堪称最坦诚的公开分析,揭示了当演示版本转变为实际生产环境的多智能体系统时会出现哪些问题。其中最具参考价值的经验教训总结如下:

    • 提示语是关键所在。由于提示语会引导每个智能体,因此协调者分配任务时的细微用词差异,会极大影响子智能体是重复工作还是出现空白。
    • 过于宽松的授权会导致重复劳动。像“研究半导体短缺问题”这样的简短指令看似清晰,实则不然。在早期的系统中,由于没有明确标注某项任务的结束点,多个子智能体会探索相同的方向。一个好的指令应明确目标、期望的输出格式以及每个智能体职责的范围。
  • 根据问题调整处理力度。简单的信息查询只需一个智能体及少量工具调用即可完成。比较两件事物可能需要两到四个子智能体,而真正开放式的调查则可能需要十个甚至更多。在协调器的指令中嵌入此类规则,可避免资源浪费或不足。
  • 工具描述与工具本身同样重要。在众多描述模糊的工具中选择的智能体,出错概率往往高于预期;而清晰明确的描述能显著减少不必要的工具调用。
  • 并行调用才是提升效率的关键。早期最大的瓶颈之一就是依次运行各个子智能体。通过并行启动子智能体及其内部的工具调用,大幅缩短了研究时间。
  • 评估结果而非固定步骤。 即使输入完全相同,这些系统也很少会两次走相同的路径,因此依据固定流程来评分是行不通的。评估时应关注结果是否正确以及处理过程是否合理。
  • 必须进行完整的执行过程追踪。 当智能体在运行过程中悄然失败时,只有通过详细的追踪才能判断是其选择了不佳的搜索词、来源有问题,还是遇到了工具故障。仅凭猜测进行调试在处理少量智能体时都无法奏效。
  • 该模式的简化概述

    以下是对协调器与工作节点的简化、与具体框架无关的概要描述。为便于看清逻辑结构,此处省略了重试、流式处理和持久化存储等功能,该内容可作为伪代码,用于移植到 LangGraph、Claude Agent SDK 或单纯的 API 循环中。

    def run_research(query: str) -> str:
        # 1. Lead agent plans
        plan = lead_agent.think_and_plan(query)
        memory.save("plan", plan)  # survives context truncation
    
    findings = []
        subtasks = plan.subtasks  # explicit objective + boundaries per subtask
        # 2. Spawn subagents in parallel, not sequentially
        results = run_in_parallel([
            subagent.execute(task=subtask, tools=subtask.allowed_tools)
            for subtask in subtasks
        ])
        findings.extend(results)
        # 3. Lead agent decides: enough evidence, or loop again?
        while not lead_agent.has_sufficient_evidence(findings):
            new_subtasks = lead_agent.refine_plan(findings)
            more_results = run_in_parallel([
                subagent.execute(task=t, tools=t.allowed_tools)
                for t in new_subtasks
            ])
            findings.extend(more_results)
        # 4. Synthesize, then verify citations in a separate pass
        draft = lead_agent.synthesize(findings)
        cited_answer = citation_agent.attach_citations(draft, findings)
        return cited_answer
    

    有两个细节最值得关注,而它们往往不会出现在示例中。首先是run_in_parallel:逐个调用子智能体会大大降低加速效果。其次是用于重新规划的显式while循环,因为当第一次处理后问题多于答案时,固定轮次的子智能体无法做出调整。

    发布前的检查

    在发布子智能体或多智能体工作流之前,请检查以下几点:

    • 每个子智能体都有明确的目标、输出格式和任务边界,而不仅仅是简短的一行指令。
    • 在子智能体真正独立的情况下,让它们并行运行。
    • 计划应保存到存储中,而不仅仅存在于对话中,以防上下文被截断。
  • 研究或优化循环有明确的终止条件,不会一直持续到智能体感到满意为止。
  • 引用或验证是单独的步骤,不会并入写作过程中。
  • 令牌预算会提前估算:单个智能体单次对话大约需要4倍,而多智能体协同运行则需要大约15倍。
  • 评估会关注最终结果与合理的处理流程,而非单一的预期路径。
  • 生产环境中的追踪会记录智能体的决策及其使用的工具,而非原始对话文本,从而便于诊断故障。
  • 部署时允许仍在运行的智能体继续工作,因为并非所有正在运行的智能体都会使用新的提示版本。
  • 有人质疑在启用多个智能体之前,这项工作是否真的能划分为独立的各个部分。
  • 相关阅读

  • 实用笔记:AI智能体不会遵循转化漏斗 — 详细讲解《实用笔记:AI智能体不会遵循转化漏斗》:为采用该模式的团队提供的合同、检查清单以及可直接插入的代码模板。
  • 使用AutoGen进行多智能体AI开发:概念、组件与学习路径 — 对微软AutoGen框架的通俗解读:包括智能体、群组聊天、人工干预机制、相关工具、十步学习路径、应用场景以及该技术的发展方向。
  • 多智能体系统内部架构:面向加密应用开发者的实用笔记 —— B2B加密领域中多智能体架构的构建方式:编排风格、共享状态、工具限制、约束条件、幂等性以及如何防止人工智能参与签名操作。
  • CrewAI入门指南:Crews、Flows以及多智能体工作流的定位 —— 一份关于CrewAI的中立指南:智能体与任务、Crews与Flows的区别、需要学习的技能、常见的商业应用场景、企业需求以及影响多智能体系统发展的趋势。
  • CommNet详解:用于强化多智能体协作的学习型通信机制 — 介绍CommNet是什么,说明如何通过均值聚合消息让智能体共享隐藏状态,以及如何搭建、训练和调试基于CommNet的多智能体强化学习项目。