useMessages(stream, subagent) 等组合组件,以渲染专家的限定流。
这是 LangChain 前端 SDK 超越平面聊天记录的地方:子智能体是一流实体,拥有自己的状态、消息、工具调用元数据和结果。你的 UI 可以显示委派、进度、错误和最终综合,而无需要求用户从每个工作线程中交错读取 Token。
基于选择器的子智能体流的原因
根流专注于协调器对话:stream.messages仅包含协调器的消息stream.subagents包含具有身份、命名空间和状态的发现快照- 每个子智能体的消息、工具调用和值通过选择器辅助程序读取
- UI 保持简洁:协调器的推理与专家的工作分开
设置 useStream
不需要额外的流选项。将流指向你的深度智能体,从 stream.messages 渲染协调器消息,并使用 stream.subagents 挂载活动专家的卡片。在聊天布局中,按生成它们的工具调用 ID 索引子智能体,以便每个卡片出现在协调器委托工作的轮次下。将流指向你的深度智能体,从 stream.messages 渲染协调器消息,并使用 stream.subagents 挂载活动专家的卡片。在聊天布局中,按生成它们的工具调用 ID 索引子智能体,以便每个卡片出现在协调器委托工作的轮次下。
代码示例使用
useStream<typeof myAgent> 进行类型安全的流状态管理。请参考 Python 或 JavaScript 后端的类型推断说明。提交消息
通过根流提交消息。深度智能体工作流通常涉及多层嵌套的子图,如果你的智能体可以深度委派,请设置适当的递归限制:深度智能体将默认递归限制设置为 10,000,这对于大多数多专家设置来说是足够的。如果需要,可以通过
config.recursion_limit 覆盖此设置。SubagentDiscoverySnapshot
每个 @[SubagentDiscoverySnapshot] 是线程中运行的子智能体的一个轻量级发现记录。它告诉你的 UI 一个子智能体是否存在、它在子智能体树中的位置以及它处于什么生命周期状态。 快照不包含子智能体的流式消息或工具调用。相反,将快照传递给选择器钩子,如useMessages(stream, subagent) 或 useToolCalls(stream, subagent)。这些钩子使用快照命名空间,仅在相应的卡片或面板挂载时订阅子智能体的流式基本元素。
构建SubagentCard
每个子智能体卡片显示专家的名称、状态、流式内容和工具调用。使用选择器钩子订阅子智能体命名空间:进度跟踪
显示进度条和计数器,以便用户知道有多少子智能体已完成:使用子智能体卡片渲染消息
关键布局模式是从根流渲染协调器消息,并将子智能体卡片附加到生成它们的 AI 消息上:stream.subagents 为总结所有活动工作的工作区侧边栏提供持久性。这为用户提供了本地上下文和整个运行的鸟瞰视图。
最佳实践
- 仅在需要时挂载选择器。限定消息和工具调用在卡片调用
useMessages(stream, subagent)或useToolCalls(stream, subagent)时流式传输。 - 显示专家名称。
subagent.name告诉用户哪个工作线程是活动的。 - 使用可折叠卡片。在具有 5+ 子智能体的工作流中,自动折叠已完成的卡片,以便用户可以专注于活动工作。
- 仅在需要时覆盖递归。深度智能体设置了较高的默认递归限制;仅当自定义工作流异常深度时才传递
config.recursion_limit。 - 按子智能体处理错误。一个子智能体失败不应崩溃整个 UI。在子智能体卡片中显示错误,同时其他卡片继续运行。
相关 LangChain 指南
这些 LangChain 前端模式与子智能体卡片的工作方式与它们与单智能体流的工作方式相同。深度智能体基于相同的useStream API 构建,因此这些指南直接适用:
Tool calling
将每个子智能体的工具调用渲染为具有待处理、完成和失败状态的丰富、类型安全的 UI 卡片。
Markdown messages
将协调器和子智能体消息作为格式化的 Markdown 显示,并具有适当的流式支持。
Human-in-the-Loop
使用相同的中断 API 暂停委派的子智能体以供用户批准或输入。
Reasoning tokens
使用可折叠的推理块在子智能体卡片中显示模型思考。
官方原文:src/oss/deepagents/frontend/subagent-streaming.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。