Skip to main content
多智能体编排允许一个智能体作为协调智能体(coordinator),在同一个会话(session)中将任务委派给一个或多个子线程(child thread)。 协调智能体接收用户输入并组织工作,子线程使用指定的智能体配置执行子任务并返回结果。 本页的操作主线是:配置可委派的智能体,创建会话,发送任务,观察模型创建的子线程,并读取各线程的状态和事件。

什么时候使用多智能体编排

当任务可以拆成边界清晰的子任务,或者不同子任务需要不同的智能体配置时,可以使用多智能体编排。 常见场景包括:
  • 并行处理互不依赖的资料或子任务,最后由协调智能体汇总结果。
  • 将代码审查、资料检索等工作交给配置了相应工具或技能的智能体。
  • 为同一类任务配置多个智能体副本,分别处理不同输入。
  • 需要独立查看或审计不同子任务的执行轨迹。
如果任务不需要拆分,直接使用普通智能体和会话即可。 多智能体编排会增加智能体配置、线程管理和事件观察的复杂度,不应为了使用多个智能体而拆分简单任务。

协调智能体与子线程

创建会话时,平台会创建一个协调线程(coordinator thread)。 它是会话的默认执行入口,使用会话级接口提交的用户输入由它处理。 协调智能体决定委派后,平台会在同一个会话中创建子线程。 子线程执行协调智能体委派的子任务,并将结果返回给协调智能体。
智能体、会话和线程的职责不同: 协调线程和子线程属于同一个会话,但每条线程都有自己的状态、历史事件和实时事件流。 共享执行环境不等于共享完整的模型上下文。 协调智能体可以创建子线程,子线程不能继续创建下一级线程。

配置可委派的智能体

在创建或更新协调智能体时,通过 multiagent.agents 声明它可以委派的智能体。 type 用来区分来源类型:
  • type: "agent":引用另一个已经存在的智能体。id 填写该智能体的 ID;version 可选,省略时平台会在写入时固定它的最新版本。
  • type: "self":引用协调智能体自己,让子线程复用协调智能体当前固定的版本和配置,不需要填写 id
agents 至少包含 1 个条目,最多包含 20 个条目。 重复引用同一个智能体、显示名重复、引用已归档的智能体,或引用本身配置了 multiagent 的智能体,都会在写入时报错。 之后更新被引用的智能体,不会改变已经保存的委派配置。 如果要让协调智能体使用被引用智能体的新版本,需要更新协调智能体,生成新的不可变版本。

创建协调智能体

下面演示创建一个协调智能体,并在创建时固定它可以委派的智能体名单。 这个请求不会创建子线程,也不会创建名单中的智能体:agent_researcher 需要替换为当前项目中实际存在的智能体 ID。 智能体名单中的 self 条目允许它再创建一个复用自身当前版本和配置的子线程。
创建成功后,响应中的 id 是协调智能体的 ID,后续创建会话时需要传入。 响应中的 multiagent.agents 展示平台已经固定的智能体版本;self 条目在写入时解析为协调智能体自身,因此名单中还会包含一条指向协调智能体自身 ID 和版本的记录。 以下响应只展示本页后续需要理解的字段,具体响应字段以正式 API 契约为准:
保存协调智能体的 id,后续创建会话时使用:

创建并运行会话

创建会话

使用上一步创建的协调智能体和一个执行环境创建会话。 ENVIRONMENT_ID 应替换为实际执行环境的 ID。
创建成功后,响应中的 id 是后续发送任务和查询线程时使用的会话 ID:

发送任务

通过会话的事件接口发送 user.message。 消息内容使用 content 数组,每个内容块声明自己的 type
客户端只向会话提交用户消息。 请求成功后,平台会唤醒协调线程。 协调智能体的模型会根据任务和已配置的委派列表决定是否委派、选择哪个智能体,以及创建多少个子线程。当模型调用 spawn_subagent 时,平台会在同一个会话中创建子线程并启动执行。

同步和异步委派

用户控制委派的方式是配置和指令,而不是填写工具参数。 spawn_subagent 是模型在运行时调用的工具,不是客户端直接调用的 REST API。 如果需要客户端精确控制子任务输入和执行顺序,应改为客户端自行编排多个会话调用,而不是使用多智能体委派。 一次委派的工具输入示例如下:
其中:
  • agent_type 是必填参数,没有默认值,填写委派列表中智能体的名称(显示名),模型调用时必须显式指定;
  • description 是用于标识任务的短标签;
  • prompt 是子线程执行任务所需的完整说明;
  • run_in_background: false 表示同步委派,也是默认行为;
  • run_in_background: true 表示异步委派。

同步委派

同步委派会等待子线程返回报告、进入空闲状态或终止,然后协调智能体继续执行。 当后续步骤必须依赖子线程的结果时,适合使用同步委派。

异步委派

异步委派会在子线程创建并开始执行后立即返回。 子线程完成一轮后,会将报告发送回协调智能体,协调智能体可以继续执行其他工作,或等待消息。 异步委派的工具结果是一段文本,包含子线程 ID 和后续处理说明:
以上是模型侧工具结果的示意,具体工具结果以正式运行行为为准。 子线程完成后会保持 idle,不会自动删除;协调智能体可以调用 delete_subagent 终止它,终止后线程状态变为 terminated。 如果后续仍需要该子线程处理相关任务,协调智能体可以通过 send_message 复用它继续发送消息;客户端暂不支持直接向子线程发送消息。

智能体之间发送消息

KHA 中的消息都经过协调线程中转。 协调线程可以向指定子线程发送消息,也可以向所有子线程广播;子线程只能把结果或问题发回协调线程。 子线程之间不能直接通信,也不能跨会话发送消息。

发送消息:send_message

协调智能体可以向指定子线程发送消息,也可以向所有子线程广播:
广播时,将 agent_id 设置为 all

等待消息:wait_for_message

协调智能体或支持消息协作的异步子线程可以使用 wait_for_message 等待消息:
收到子线程报告后,工具结果文本会包含消息数量、来源线程和正文:
以上是模型侧消息结果的示意。 客户端可以从 agent.thread_message_received 事件的 payload 中读取来源线程(from_session_thread_id)和来源智能体显示名(from_agent_name)。 如果需要查看子线程的完整执行过程,应读取线程历史事件,而不是依赖 wait_for_message 的返回内容。

共享资源与上下文隔离

智能体、会话和线程分别管理不同范围的配置: 子线程使用被选中智能体的固定版本及其配置。 会话绑定的文件、凭据库和记忆库等资源通过会话配置管理,具体绑定方式参阅 启动会话 会话级智能体配置覆盖 agent_overrides 只影响当前会话,不修改智能体资源或委派列表中的其他智能体。 会话级覆盖配置只作用于协调线程,不会传递给子线程;子线程始终使用委派配置中固定的智能体版本。

观察线程和事件

发送任务后,可以先通过会话级事件流观察协调线程的整体进展。 要查看子线程的详细活动,需要先列出会话中的线程,再使用返回的 id 查询对应线程。

列出会话中的线程

线程列表按协调线程在前、子线程按创建顺序返回:
列表响应中的 id 是后续查询线程的来源。 协调线程没有 parent_thread_id,子线程通过该字段指向父线程。 如果响应包含 next_page_token,继续请求下一页,不要假定当前页面包含所有线程。

查看线程详情

$THREAD_ID 设置为线程列表中目标线程的 id
响应中的 status 可以帮助你判断线程是否仍在运行:

读取线程历史事件

可以从历史事件中查看线程的状态变化和消息协作:
线程创建事件 session.thread_created 只写入协调线程的历史,需要通过会话级事件流(协调线程)观察,不会出现在子线程自己的历史事件中。 以上响应只展示与多智能体编排相关的事件字段。 完整事件类型、字段和分页规则见 事件流

订阅线程实时事件

线程实时事件可能包含状态变化:
以上事件帧仅用于说明观察方式,实际事件字段和顺序以正式运行行为为准。 帧中的 id: 行是恢复游标(数值),断线后可用它从断点继续订阅,详见事件流。 事件中的 session_thread_id 用于判断事件属于哪条线程。 线程游标只对对应线程的事件流有效,不能用于其他线程或会话。

归档子线程

子线程完成并处于 idle 状态后,可以归档它:
成功时接口返回 204 No Content。 归档不会删除线程的历史事件。

一次委派的事件链

一次异步委派通常可以按以下顺序观察:
实际事件顺序会受到同步或异步委派、任务执行过程和错误处理的影响。 本流程用于说明观察重点,不代表每次运行都会产生完全相同的事件序列。

最佳实践

为子线程设置清晰的任务边界

prompt 中明确输入、输出、成功条件和需要保留的证据。 例如:

只配置实际需要的智能体

委派列表中只加入协调智能体确实需要委派的智能体。 智能体数量过多会增加模型的选择空间和配置维护成本。

约定报告格式

可以要求子线程按固定格式返回:
这样可以减少协调智能体汇总结果时的格式差异和无关内容。

使用线程级事件流审计

不要只查看协调智能体的最终结果。 需要调试或审计时,列出会话中的线程,并独立读取目标子线程的历史事件和实时事件。

下一步

智能体

配置智能体、工具和多智能体委派能力。

会话

创建会话并发送任务输入。

事件流

读取历史事件、订阅 SSE 并处理断线续读。

金融投研智能体

查看官方投研多智能体团队的完整设计。