Skip to main content
当协调器智能体生成专业子智能体(研究员、分析师、撰写者)时,您需要将协调器的消息与每个子智能体的流式输出分开渲染。在 useStream 中设置 filterSubagentMessages: true 可以干净地分离这两个流,然后使用 getSubagentsByMessage 将每个子智能体的进度卡片附加到触发它的协调器消息上。

为什么要过滤子智能体消息

不过滤时,每个子智能体产生的每个 Token 都会交错出现在协调器的消息流中,使其难以阅读。设置 filterSubagentMessages: true 后:
  • stream.messages 仅包含协调器的消息
  • 每个子智能体的内容可通过 stream.subagentsstream.getSubagentsByMessage 访问
  • UI 保持整洁:协调器的推理与专家的工作分开
这种分离让您可以在一个地方渲染协调器的消息,并将每个子智能体的进度卡片精确地附加到生成它的协调器消息下方。

设置 useStream

始终设置 filterSubagentMessages: true。这会从主消息流中移除子智能体的 Token,以便您可以独立渲染协调器的消息和子智能体的输出。 导入您的智能体并将 typeof myAgent 作为类型参数传递给 useStream,以获得对状态值的类型安全访问:

启用子图流式输出提交

提交消息时,启用子图流式输出并设置适当的递归限制。深度智能体工作流通常涉及多层嵌套子图,因此较高的递归限制可防止过早终止:
深度智能体设置了 10,000 的默认递归限制,对大多数多专家设置来说已足够。如需要可通过 config.recursion_limit 覆盖。

SubagentStreamInterface

每个子智能体暴露一个 SubagentStreamInterface,包含关于子智能体任务、状态和计时的元数据:

将子智能体链接到消息

getSubagentsByMessage 方法返回由特定 AI 消息生成的子智能体。这让您可以直接在触发它们的协调器消息下方渲染子智能体卡片:
这返回一个 SubagentStreamInterface 对象数组。如果消息没有生成任何子智能体,则返回空数组。

构建 SubagentCard

每个子智能体卡片显示专家名称、任务描述、流式输出内容或最终结果,以及计时信息:

状态图标和徽章

一致的视觉指示器帮助用户快速解析子智能体状态:

进度跟踪

显示进度条和计数器,让用户知道有多少子智能体已完成:

渲染带子智能体卡片的消息

关键布局模式是渲染每个协调器消息,如果该消息生成了子智能体,则紧接其下方渲染其卡片:

综合指示器

所有子智能体完成后,协调器需要时间将其结果综合成最终响应。在此阶段显示清晰的指示器:
对于复杂的多专家工作流,综合阶段可能需要几秒钟。清晰的”正在综合结果…”指示器可防止用户认为智能体已停滞。

调试未过滤的输出

开发过程中,您可以临时设置 filterSubagentMessages: false 以查看主消息流中所有子智能体的原始交错输出。这对验证子智能体 Token 是否正确流动很有用,但不应在生产 UI 中使用。

使用场景

当您的智能体工作流涉及以下情况时,深度智能体子智能体卡片是正确的选择:
  • 深度研究——协调器派遣研究员调查问题的不同方面,然后综合他们的发现
  • 多专家分析——领域专家(法律、财务、技术)各自贡献其视角
  • 复杂任务分解——规划器将大任务拆分为子任务并分配给专业工作者
  • 代码审查流水线——不同的智能体分别处理安全审查、风格检查、性能分析和文档审查

访问完整的子智能体映射

除了按消息查找外,您还可以通过 stream.subagents 一次性访问所有子智能体:
这对于构建全局进度指示器或仪表板很有用,可以汇总所有子智能体活动,无论是哪条协调器消息生成了它们。

最佳实践

  • 始终设置 filterSubagentMessages: true。未过滤的流会产生协调器和子智能体 Token 的不可读交错。
  • 显示任务描述toolCall.args.description 字段告诉用户每个子智能体被要求做什么。始终醒目地显示。
  • 使用可折叠卡片。在有 5 个以上子智能体的工作流中,自动折叠已完成的卡片,以便用户专注于活跃的工作。
  • 显示计时数据。展示每个子智能体花费的时间有助于用户理解性能特征并识别瓶颈。
  • 设置适当的递归限制。嵌套子图的深度智能体工作流需要比默认 25 更高的限制。从 100 开始。
  • 按子智能体处理错误。一个子智能体失败不应使整个 UI 崩溃。在该子智能体的卡片中显示错误,同时其他智能体继续运行。