在上一篇什么是多智能体系统?中掌握了“协调多个 AI”这一概念之后,接下来的问题就是实际该如何构建。本文以 2026 年事实上的标准——主管模式(指挥中枢型)为题材,面向初学者讲解5 步实践流程。

在进入复杂的框架话题之前,先说最重要的原则——“先用单一智能体构建,碰到瓶颈后再以最小规模增加”。一开始就组建大团队,多半是过度设计。后半部分会给出按照 Claude Agent SDK 与 OpenAI Agents SDK 官方文档写成、可以直接读懂的最小代码,以及角色的拆分方法和实际常见的失败。用 MCP 接入工具时,思路也一样。

多智能体构建方法 · 5 步

先小步构建,先测量,再增加

— 从最小配置起步的主管模式

1分解任务
2定义工作者(最多 3-5 个)
3设计主管
4确定交接与上下文共享
5测量并设上限运行

* 代码依据 Claude Agent SDK 与 OpenAI Agents SDK 的官方文档编写(2026年10月4日确认)。SDK 更新很快,运行前请在各自的官方文档中核对参数名。文中的数字都注明了出处。

1. 动手之前:你真的需要多智能体吗

第一道关卡不是技术,而是判断。多智能体很强大,但并非对所有工作都有效。如果以下任何一条都不符合,那么先用单一智能体来构建才是正解。

应当转向多智能体的 3 个信号

  • 专业性分离:知识无法塞进一个提示词里(横跨调研、法务、代码等领域)
  • 并行性:同时推进多项作业明显更快
  • 判断分离:把“执行者”与“验证者”分开能提升质量

反过来,正如上一篇提到的,在一条直线的流程上用多智能体会吃亏。Google Research 的研究(2026年1月发布,比较了 180 种配置)中,在像规划这样必须严格按顺序推理的任务(PlanCraft)上,所测试的多智能体变体全部比单一智能体差 39%~70%。费用也会增加。Anthropic 在介绍自家研究智能体的文章中写道:智能体消耗的 token 约为聊天的 4 倍,多智能体系统约为 15 倍。请以“数量多不等于更聪明”为出发点。

2. 基本形态=主管模式

不知道选哪种模式时,从主管模式(指挥中枢型)开始最稳妥。主流 SDK 都把它作为官方的基本模式写进了文档。在 Claude Agent SDK 中,主智能体通过 Agent 工具调用子智能体;在 OpenAI Agents SDK 中,对应的是“Agents as tools”(由经理角色把专业智能体当作工具来调用)。

最终答案只有一个负责人

主管始终掌握对话的主导权,汇总工作者的结果后作答。OpenAI 的文档也建议:想让一个智能体负责最终答案时采用这种形态。

错误不易扩散

在同一项 Google Research 研究中,彼此不交流、并行工作的配置把错误放大了 17.2 倍,而有协调者的配置只放大 4.4 倍。

便于审计

委托了谁、委托了什么、返回了什么,都留在主管的记录里。每个工作者的工具可以单独限定,事故的影响范围也能预估。

机制很简单。主管(指挥中枢)接收整体任务,将其分解为子任务,委派给专业工作者,再汇总结果。主管无需知道工作者具体怎么干,只需判断“调用哪个工作者、以何种输出格式”。专业知识由工作者那一方掌握。

需要注意,OpenAI Agents SDK 里说的交接(handoff),比 STEP 4 泛指的“交接”含义更窄:分诊角色把对话本身移交给专业角色,之后由专业角色直接回答用户。这里不再保留主管,因此应当把它当作与主管模式不同的另一种模式(如何选择见第 6 节)。

3. 用 5 步构建

用五个步骤搭建一套最小配置的主管模式。铁律是:最初从2-3 个工作者起步,边测量边按需增加。

STEP 1. 分解任务

把“最终目标”和“所需的专业角色”写在纸上。例如:制作市场调研报告,就是“①收集信息→②分析→③撰写→④事实核查”。分解要事先明确——这里含糊,整体就会崩盘。

STEP 2. 定义工作者(最多 3-5 个)

给每个工作者赋予一个角色、所需的工具、一种输出格式。一开始别贪多,最多 3-5 个。每个工作者相互独立,只持有自己的工具(搜索、代码执行等)。

STEP 3. 设计主管

在主管的提示词中,明确列出“允许调用的工作者名称”(硬上限)。诀窍在于:比起单个工作者,要在主管的设计上花最多时间。这里决定了整体质量。

STEP 4. 确定交接与上下文共享

定义工作者之间传递什么、以何种格式传递。把全部上下文传给所有人会让 token 膨胀,因此只挑选必要的信息来传递。智能体间协同的标准协议就是 A2A。

STEP 5. 测量并设上限运行

在增加智能体之前,对所有交接进行测量(可观测性是必须的)。给迭代次数、token、成本设定上限。同时把评估(evals)与护栏也一并准备好。

4. 最小代码示例①:Claude Agent SDK(Python)

先用 Anthropic 的 Claude Agent SDK 搭一个主管 1 个+工作者 2 个(调研员、核查员)的结构。准备工作只有 pip install claude-agent-sdk 和设置环境变量 ANTHROPIC_API_KEY(官方快速入门;SDK 不会自动读取 .env 文件)。写法依照官方的 Subagents 页面。SDK 的整体用法见Claude Agent SDK 指南。

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition, ResultMessage

options = ClaudeAgentOptions(
    model="claude-opus-5-5",  # 主管(主智能体)
    system_prompt=(
        "你负责统筹一份调研报告。调研交给 researcher,事实核查交给 reviewer,"
        "最终文字由你来写。委托时务必写明目的、返回格式和范围。"
    ),
    allowed_tools=["Agent", "WebSearch", "WebFetch"],  # 无需确认即可使用的工具
    agents={
        "researcher": AgentDefinition(
            description="收集一手资料的调研员。需要事实或数字时使用。",
            prompt="针对给定的问题查找一手资料,以附出处 URL 的要点列表返回。不要用推测补空。",
            tools=["WebSearch", "WebFetch"],  # 这个角色只能用这些工具
            model="sonnet",
            maxTurns=15,
        ),
        "reviewer": AgentDefinition(
            description="草稿的事实核查员。定稿之前必须使用。",
            prompt="把草稿中的每条主张与出处对照,列出没有依据的句子。",
            tools=["WebFetch"],
            model="sonnet",
            maxTurns=10,
        ),
    },
    max_turns=30,         # 整体往返次数上限
    max_budget_usd=5.0,   # 费用上限(SDK 的估算)
    env={"CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH": "1"},  # 不让工作者再创建子智能体
)


async def main():
    try:
        async for message in query(
            prompt="收集三项关于生成式 AI 在工作中使用情况的官方统计,写成一份简短报告",
            options=options,
        ):
            if isinstance(message, ResultMessage):
                print(message.subtype, message.total_cost_usd)
                print(message.result)
    except Exception as error:
        print(f"中途停止:{error}")  # 达到上限时也会到这里


asyncio.run(main())

要点有 5 个。

  • 工作者用 AgentDefinition 列在 agents 里。主管读取各工作者的 description 来决定何时调用谁,所以 description 要具体写明“这个角色做什么、什么时候用”。
  • 列出 tools 后,该角色就只拥有这些工具。核查员拿不到写入类工具就是这个原因。而 allowed_tools 是“无需确认即可使用的工具”清单,并不限制工具(官方 Python 参考)。
  • 上限设三重。每个角色的 maxTurns、整体的 max_turns、费用的 max_budget_usd。达到整体上限时,结果的子类型会变成 error_max_turns 或 error_max_budget_usd 并停止(智能体循环说明)。
  • 阻止嵌套。子智能体还可以再创建子智能体。把环境变量 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH 设为 1,工作者就会自己完成工作。同时运行的数量可以用 CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS(默认 20)限制。
  • AgentDefinition 的字段名是驼峰式。把 maxTurns 写成 max_turns,在创建时就会报 TypeError(官方注释)。主管指定了当前的 claude-opus-5-5,工作者指定了别名 "sonnet"。用别名的话,版本升级后也不必改代码。

官方文档指出,Opus 5 比以前的模型更愿意把工作交给子智能体,并建议除了在提示词里提要求,还要设置深度、并发数和费用的上限。指示只能改变“怎么委托”,真正能可靠地让运行停下来的只有上限。

5. 最小代码示例②:OpenAI Agents SDK(Python)

用 OpenAI 的 Agents SDK 写同样的结构,就是用 as_tool() 把专业智能体变成工具,交给主管的 tools(官方 Agents as tools)。准备工作是 pip install openai-agents 和环境变量 OPENAI_API_KEY(官方快速入门)。省略 model 时使用 SDK 的默认模型;默认值会随 SDK 版本变化,请在 Models 页面确认。

import asyncio
from agents import Agent, Runner, WebSearchTool

researcher = Agent(
    name="Researcher",
    instructions="针对给定的问题查找一手资料,以附出处 URL 的要点列表返回。不要用推测补空。",
    tools=[WebSearchTool()],
)
reviewer = Agent(
    name="Reviewer",
    instructions="把收到的草稿中的每条主张与出处对照,列出没有依据的句子。",
)

manager = Agent(
    name="Manager",
    instructions=(
        "你负责统筹一份调研报告。调研交给 research,事实核查交给 review,"
        "最终文字由你来写。"
    ),
    tools=[
        researcher.as_tool(
            tool_name="research",
            tool_description="收集附出处的一手资料",
            max_turns=10,  # 这个角色的往返上限
        ),
        reviewer.as_tool(
            tool_name="review",
            tool_description="核查草稿中的事实",
        ),
    ],
)


async def main():
    result = await Runner.run(
        manager,
        input="收集三项关于生成式 AI 在工作中使用情况的官方统计,写成一份简短报告",
        max_turns=10,  # 超过则抛出 MaxTurnsExceeded
    )
    print(result.final_output)


asyncio.run(main())

两个 SDK 的共同注意点和不同之处如下。

  • 工作者不知道父级的对话。通过 as_tool() 调用的一方不会自动继承父级运行的对话状态(官方文档)。Claude Agent SDK 也一样,子智能体从父级拿到的只有 Agent 工具的指示文本。文件路径、错误信息、已经决定的事项,都要写进委托内容里。
  • 上限是 Runner.run(..., max_turns=)。超过就会抛出 MaxTurnsExceeded。传入 error_handlers={"max_turns": ...},可以用预设的回答代替异常(Running agents)。
  • 用交接来写的话,是 Agent(..., handoffs=[billing_agent, refund_agent])。接手的一方会接管对话,默认能看到之前的全部对话记录。如果有不想交出去的信息,用 input_filter 过滤。

6. 角色怎么分:好的拆分与坏的拆分

比代码更难的是怎么分。Anthropic 写道,每个子智能体都需要拿到目标、输出格式、要用的工具和信息来源、任务边界这四样东西(同一篇文章)。下面把满足这些条件的拆分和不满足的拆分并列出来。

拆分方式 判断 理由
按专业和工具拆分(调研、写作、事实核查) 好 每个角色只拿到需要的工具和权限。核查员可以设成只读。
按彼此独立的对象拆分(三家公司的产品各由一个角色调查) 好 互不等待、并行运行,最后由主管比较。
把一条直线的工序切成碎片(摘要→排版→翻译各用一个角色) 避免 只是在等前一步的结果,并不能并行,而且每次交接都会丢失上下文。单一智能体就够了。
不划定范围就把同一个问题分给多个角色 避免 Anthropic 的早期版本在调查半导体短缺时,一个子智能体在研究 2021 年的汽车芯片危机,另外两个则重复调查 2025 年的供应链。
把执行者和核查者合并成一个角色 避免 变成自己检查自己的输出,单独设核查的意义就没了。

用几个智能体,同一篇文章也给出了参考。Anthropic 在其研究智能体的主管提示词中写入了规模准则:简单的事实查找用 1 个智能体、调用工具 3~10 次;直接比较用 2~4 个子智能体、各调用 10~15 次;复杂的研究可能超过 10 个子智能体。这是调研类工作的数字,在你自己的工作中请从小的一端开始,测量之后再增加。

主管模式和交接如何选择,OpenAI 文档的标准很清楚。想让一个智能体负责最终答案、或要合并多个专业角色的结果,就用主管模式(Agents as tools)。如果分流本身就是工作,被选中的专业角色直接回答用户即可(例如客服咨询的分流),就用交接。两者也可以组合使用。

7. 常见失败与对策

容易栽跟头的地方基本是固定的。下面整理了 Anthropic 说在自家研究智能体上真实发生过的失败,以及两个 SDK 官方文档提醒注意的地方。

失败例 对策
为简单的问题派出大量工作者(Anthropic 的早期版本曾为简单查询派出 50 个子智能体) 把规模准则写进主管的提示词,并设置并发数和费用上限。
没完没了地寻找根本不存在的信息源(同样是早期版本的失败) 用每个角色的 maxTurns 和整体的 max_turns 截断。
工作者之间重复做同一件事 委托时写明目的、返回格式和范围(包括不做什么)。
工作者不了解前提,答非所问 父级的对话不会传过去。把需要的事实写进委托内容。
主管不委派,自己动手 把 description 写具体,或者在提示词里点名调用(Claude Agent SDK 官方故障排查)。
token 膨胀(多智能体约为聊天的 15 倍) 不要传全部上下文,只传需要的部分。工作者使用便宜的模型。
顺序型任务精度下降(有研究测得差 39%~70%) 如果是一条直线的工作,就回到单一智能体。
不知道在哪里失败的 记录每次调用。在 Claude Agent SDK 中,可以通过 name 为 Agent 的 tool_use 块和 parent_tool_use_id 分辨每条消息来自哪个角色。

共通的教训是“比起框架,提示词、工具设计与评估框架(eval harness)更能决定成败”。OpenAI 的文档同样列举了打磨提示词、监控并迭代、让智能体专精一项任务、投入评估等做法。比起华丽的架构,小步构建、测量、只在划算时才增加的纪律,最终才是最快的。

总结

多智能体系统的构建,只要从最小配置的主管模式起步就不可怕。我们来回顾要点。

本文要点

  • 🚦 先从单一开始。 在必须按顺序推理的任务上,有研究发现多智能体全部变差 39%~70%。
  • 🧠 基本形态是主管模式。 Claude Agent SDK 用子智能体,OpenAI Agents SDK 用 Agents as tools。
  • 🔢 5 步:分解→定义工作者→设计主管→交接→测量。
  • 🧩 拆分方式:按专业、工具或彼此独立的对象来分。不要把一条直线的工序切碎。
  • ⚠️ 上限设三重(每个角色、整体、费用)。委托工作者时写明目的、格式和范围。

“小步构建,先测量,再增加”。只要守住这条纪律,多智能体就会成为能托付复杂工作的强力搭档。概念梳理见什么是多智能体系统?,单体的构建方法见如何构建 AI 智能体。

FAQ

Q. 应该先从哪种模式开始构建?

A. 主管模式(指挥中枢型)是唯一选择,没有疑问。主流框架都支持它,失败模式已知,参考实现也最丰富。等熟练之后再去探索其他模式。

Q. 工作者从几个开始比较好?

A. 最初 2-3 个,最多也控制在 3-5 个以内。数量越多越不稳定,token 也会膨胀。常规做法是边测量,只在证明确有需要时才增加。

Q. 框架(SDK)是必须的吗?

A. 不是必须的。OpenAI 的文档也介绍了“用代码决定顺序”的做法,例如用结构化输出给任务分类再决定下一个角色,或在循环中交替运行执行角色和评估角色,并指出这样在速度、成本和效果上更可预测。顺序固定的工作适合这种方式。如果不想自己编写会话保存、工具权限和上限,用 SDK 是捷径。

Q. 怎样防止成本爆炸?

A. ①给整体和每个角色的往返次数设上限 ②设置费用上限(Claude Agent SDK 的 max_budget_usd)③不传全部上下文,只传需要的部分 ④工作者使用便宜的模型,这 4 点很有效。据 Anthropic 统计,多智能体系统消耗的 token 约为聊天的 15 倍。请从一开始就设好上限。