Skip to main content
“Multiagent orchestration”(多智能体编排)允许一个智能体与其他智能体协调以完成复杂的工作。各智能体可以在各自隔离的上下文中并行运行,这有助于提高输出质量,同时也能缩短完成时间。 不确定多智能体设置是否适合您的问题?请参阅何时使用多智能体系统(以及何时不使用)。
托管智能体 API 请求需要 managed-agents-2026-04-01 Beta 请求头,但记忆存储端点除外,它们使用 agent-memory-2026-07-22。SDK 会自动设置正确的 Beta 请求头。请参阅Beta 请求头

工作原理

所有智能体共享同一个沙箱、文件系统和密钥库凭据,但每个智能体都在自己的会话线程(session thread)中运行,这是一个上下文隔离的事件流,拥有自己的对话历史。协调器在主线程(primary thread)中报告活动(主线程与会话级事件流相同);当协调器委派工作时,会在运行时生成额外的线程。 线程是持久化的:协调器可以向之前调用过的智能体发送后续消息,该智能体会保留其之前所有轮次的内容。 每个智能体使用自己的配置:模型、系统提示、工具、MCP 服务器和技能。会话级智能体配置覆盖是例外情况;这些覆盖适用于协调器及其 self 副本。工具、MCP 服务器和上下文不会共享。

适合委派的任务

多智能体协调最适合需要跨多个领域开展工作的复杂任务,或者由多个范围明确的子任务共同构成总体目标的场景。 效果良好的模式:
  • 并行化: 同时分发独立的子任务(搜索多个来源、分析不同的文件),然后由协调器综合结果。
  • 专业化: 将任务路由到具有特定领域系统提示和工具的智能体,例如安全智能体或文档智能体,而不是让单个智能体承载所有能力。
  • 升级处理: 针对部分复杂子任务,咨询能力更强的智能体或模型。

配置协调器

定义智能体时,设置 multiagent 以声明协调器可以委派任务的智能体名单:
multiagent.agents 可以接受以下任意形式:
  • {"type": "agent", "id": agent.id} 通过 ID 引用先前创建的 agent。如果未指定 version,则该引用会固定到协调器创建时该智能体的最新版本。
  • {"type": "agent", "id": agent.id, "version": agent.version} 固定到特定的智能体版本。
  • {"type": "self"} 允许协调器生成自身的副本。如果会话是使用智能体配置覆盖创建的,这些覆盖也会应用于这些副本;通过 ID 引用的名单条目不受影响。
  • {"type": "advisor", "model": "<model id>"} 为会话的主线程提供一个可在轮次中途咨询的顾问。每个名单最多包含一个顾问条目。请参阅为会话提供顾问
协调器的配置(包括其 multiagent.agents 名单)会在协调器创建或更新时生成快照。被引用的智能体会固定在当时解析出的版本上,不会自动获取其定义的后续更新。如需委派给被引用智能体的更新版本,请更新协调器,使其名单引用该版本。 协调器只能委派给一层智能体;如果引用的智能体本身具有 multiagent.agents 名单,创建或更新请求将因验证错误而失败。multiagent.agents 中最多可列出 20 个不同的智能体,但协调器可以调用每个智能体的多个副本。 当智能体固定了推理地理位置(智能体定义中的 model.inference_geo)时,协调器的固定值和每个名单成员的固定值必须全部设置为相同的值,或者全部不设置。不匹配的名单会被拒绝并返回 400 验证错误,无论是在保存智能体时,还是在会话创建覆盖更改任何固定值时。

为会话提供顾问

multiagent.agents 中的顾问条目为会话的主线程提供一个顾问(advisor):一个可在轮次中途咨询以获取策略指导的模型,例如规划方法、摆脱困境或在完成前审查工作。该条目恰好包含两个字段,typemodel
cURL
一个名单最多可包含一个顾问条目,可与任何其他名单形式并存。该条目占用保留的名单名称 anthropic.advisor:如果名单同时列出了顾问条目和字面名称为 anthropic.advisor 的成员,则会被拒绝并返回 400 验证错误。在响应中,无论提交时顾问条目位于什么位置,它都会在名单中最后回显。 顾问模型必须满足最低能力要求,且智能体自身的模型能力不得高于其顾问;能力相当的模型可以配对。无效的配对会在保存智能体时被拒绝并返回 400 验证错误。有效的配对遵循顾问工具的模型兼容性表。 顾问也可作为 消息 API 上的服务器工具使用。托管智能体界面在配置和交付方式上有所不同:名单条目没有 max_usesmax_tokenscaching 字段,建议通过线程事件而非 advisor_tool_result 块传递。

咨询的工作方式

每次咨询都作为一个由平台生成的、名为 anthropic.advisor 的线程运行,该线程在咨询完成时自行终止,建议会作为 agent.thread_message_received 事件传递到主线程。一次咨询会发出标准的线程事件,通过保留名称 anthropic.advisor 进行标识(线程生命周期事件将其作为 agent_name 携带,建议传递事件将其作为 from_agent_name 携带),通常按以下顺序:
  1. session.thread_created
  2. session.thread_status_running
  3. agent.thread_message_received(建议内容)
  4. session.thread_status_idlestop_reason: end_turn
  5. session.thread_status_terminated
咨询不会发出 agent.tool_use 事件,会话的事件流上也不会出现 agent.thread_message_sent 事件,因为咨询输入是由平台组合的,而非由智能体发送。如果您列出顾问线程自身的事件,建议内容也会在那里以 agent.thread_message_sent 事件的形式出现。建议传递(事件 3)不保证在顾问线程的 idle 和 terminated 事件之前到达,因此不要将这些事件视为建议已传递的信号。 您的客户端能否读取建议内容取决于顾问模型的策略,这与消息 API 顾问工具上的结果变体划分相对应。在那里返回明文结果的顾问模型,在此处会将建议作为可读文本内容传递;在那里返回脱敏结果的顾问模型,在此处会在所有客户端界面上将 [{"type": "redacted"}] 占位符作为消息内容传递,而智能体本身仍会在服务器端读取完整的建议。在前面的示例中,claude-opus-5 是一个脱敏结果顾问,因此您的客户端会看到占位符,而智能体会读取完整的建议;如果您希望在事件流上可读取建议内容,请改为选择 claude-opus-4-8 作为顾问。顾问的思考过程永远不会显示。客户端不能自行发送 redacted 块;包含此类块的事件会被拒绝并返回 400 验证错误。 失败或被中断的咨询永远不会导致智能体的轮次失败:智能体会在收到咨询失败的通用通知后继续执行。咨询期间的会话级 user.interrupt 会终止顾问线程且不传递任何建议;带有顾问线程 session_thread_iduser.interrupt 仅放弃该次咨询。

顾问线程

顾问不是名单智能体:它对协调器的 list_agents 工具不可见,无法通过 send_to_agent 向其发送消息,且只有会话的主线程可以咨询它。名单智能体不能咨询顾问。 顾问线程不受并发线程限制的约束。它们会出现在会话的线程列表中,其 agent 设置为与配置完全一致的顾问形式({"type": "advisor", "model": ...}),parent_thread_id 设置为主线程。 顾问端的提示缓存是自动的;无需任何配置。咨询按顾问模型的费率计费,其令牌会出现在顾问线程的用量和会话的用量总计中。

移除顾问

要移除顾问,请使用不再包含顾问条目的名单更新智能体。如果顾问是名单中唯一的条目,请通过设置 "multiagent": null 完全清空名单。

创建会话

创建一个引用协调器的会话。协调器会根据需要委派给其名单中的智能体。

将智能体连接到 MCP 服务器

MCP 服务器的作用域是智能体级别的(每个智能体定义声明自己的服务器和工具),而密钥库凭据的作用域是会话级别的(会话创建时传递的 vault_ids 适用于每个线程)。这对您的集成有两个影响:
  • 要对 MCP 服务器进行身份验证,请为所有智能体使用的每个 MCP 服务器包含一个密钥库凭据。
  • 要限制某个智能体的访问权限,请在其智能体定义中仅声明它所需的服务器。
会话创建时的智能体配置覆盖可以替换协调器及其 self 副本的 MCP 服务器。
在此示例中,只有研究员智能体声明了 GitHub MCP 服务器,因此协调器没有访问权限。会话的 vault_ids 将 GitHub 凭据提供给研究员的线程。
如果在声明服务器后,某个智能体的 MCP 调用身份验证失败,请确认凭据的 mcp_server_url 与智能体的 mcp_servers[].url 指向同一服务器。两个 URL 在匹配前都会进行规范化处理(协议和主机名转为小写,去除默认端口和尾部斜杠),因此主机名大小写、默认端口或尾部斜杠的差异不会阻止匹配;但不同的路径、子域名或非默认端口会导致不匹配。

线程

会话级事件流/v1/sessions/{session_id}/events/stream)被视为主线程,包含所有线程中所有活动的精简视图。您不会看到子智能体的完整活动,但可以看到它们工作的开始和结束,以及工具权限请求等阻塞事件。 会话线程是您深入查看特定智能体活动的地方。 会话 status 是所有智能体活动的聚合;如果至少有一个线程处于 running 状态,则整个会话状态也为 running 会话预算是会话所有线程共享的单一上限。当达到上限时,各线程会独立暂停,每个线程的费用按该线程自身所使用的模型定价。
最多支持 25 个并发线程。协调器可以调用名单中单个智能体的多个副本,从而创建与一个 agent 关联的多个线程。顾问咨询线程不受此限制约束。
按如下方式列出与会话关联的所有线程:
完整列表包含主线程。主线程的 parent_thread_id 为 null。

主线程事件

这些事件在 /v1/sessions/{session_id}/events/stream 的主线程上呈现多智能体活动。消息方向事件的命名是相对于其所在的线程流而言的:agent.thread_message_received 表示有消息从另一个线程到达此线程,agent.thread_message_sent 表示此线程发送了一条消息。例如,协调器委派的任务会在子线程自己的流上以 agent.thread_message_received 事件的形式到达。 顾问咨询会以保留名称 anthropic.advisor 发出这些相同的线程事件(在线程生命周期事件中作为 agent_name,在建议传递事件中作为 from_agent_name);有关事件顺序,请参阅为会话提供顾问

会话线程事件

关键事件会被代理到主线程。但是,您可能仍希望调查特定智能体的推理过程和工具调用。为此,请流式传输或列出关联会话线程的事件。 每个会话线程在 /v1/sessions/{session_id}/threads/{thread_id}/stream 都有自己的事件流,并且接受与会话级流相同的 event_deltas[] 参数,因此您可以在模型生成文本时预览子智能体的文本。一个连接只预览它正在读取的线程:子线程的预览永远不会出现在会话级流上,因此要实时观察子智能体,请打开其自己的线程流。有关启用、累积和协调预览的信息,请参阅预览会话线程事件

工具权限和自定义工具

如果子智能体需要从您的客户端获取某些内容,例如运行 always_ask 工具的权限,或自定义工具的结果,该事件会被交叉发布到主线程,并带有标识发起会话线程的 session_thread_id
发布 user.tool_confirmation(带有 tool_use_id)或 user.custom_tool_result(带有 custom_tool_use_id);服务器会自动将响应路由到正确的线程。 以下示例扩展了工具确认处理程序以路由回复。相同的模式也适用于 user.custom_tool_result