图节点如何映射到 UI 卡片
LangGraph 图定义了一系列节点,每个节点负责特定任务。例如,一个研究流水线可能包含:- 分类:对用户查询进行分类
- 研究:收集相关信息
- 分析:从研究中得出结论
- 综合:生成最终、完善的响应
设置 useStream
像往常一样连接useStream。你将使用的关键属性是 messages(用于流式内容路由)、values(用于已完成的节点输出)和 getMessagesMetadata(用于识别哪个节点产生了每个令牌)。
定义一个与你的代理状态模式匹配的 TypeScript 接口,并将其作为类型参数传递给 useStream,以实现对状态值的类型安全访问,包括每个流水线节点的自定义状态键。在下面的示例中,将 typeof myAgent 替换为你的接口名称:
将流式令牌路由到节点
当代理流式传输时,每条消息都附有元数据,标识是哪个图节点产生了它。使用getMessagesMetadata 提取 langgraph_node 值,并将令牌路由到正确的卡片:
streamMetadata.langgraph_node 字段由 LangGraph 自动设置。你不需要在后端进行任何特殊配置。只需像往常一样流式传输消息,元数据就会包含在内。确定节点状态
每个节点可以处于四种状态之一:未开始、流式传输中、已完成或空闲。你从两个来源推导状态:流式内容映射(用于活动节点)和stream.values(用于已完成的节点):
构建流水线进度条
顶部的水平进度条让用户鸟瞰整个流水线。每个步骤都是一个带标签的段,随着节点完成而填充:构建可折叠的 NodeCard 组件
每个节点都有自己的卡片,显示状态徽章、内容(流式或最终)以及用于长输出的可折叠主体:流式内容与已完成内容
每个节点有两个内容来源,选择正确的来源对于流畅的用户体验至关重要:
模式是:显示流式内容以进行实时更新,一旦节点完成,则回退到已提交的状态值。
整合所有内容
以下是结合了路由、状态检测和卡片渲染的完整卡片列表:用例
图执行卡片适用于任何需要可见性的多步骤流水线:- 研究流水线:分类 → 收集来源 → 分析 → 综合报告
- 内容生成:大纲 → 草稿 → 事实核查 → 编辑 → 发布
- 数据处理:摄取 → 验证 → 转换 → 聚合 → 导出
- 代码生成:理解需求 → 规划架构 → 编写代码 → 审查 → 测试
- 决策工作流:收集上下文 → 评估选项 → 为备选方案评分 → 推荐
处理动态流水线
并非所有图都有固定的节点集。一些流水线会根据输入添加或跳过节点。通过检查哪些状态键实际具有值来处理此问题:如果你的图有条件分支(例如,对于简单的事实查询跳过“研究”),被跳过的节点将永远不会出现在流式内容或状态值中。你的流水线进度条应通过调暗或隐藏跳过的步骤来反映这一点。
最佳实践
- 声明式定义节点。将你的
PIPELINE_NODES数组作为单一事实来源,映射节点名称、状态键和显示标签。 - 活动节点优先使用流式内容。它为用户提供即时反馈。仅在节点完成后才回退到已提交的状态值。
- 自动折叠已完成的节点。在长流水线中,自动折叠已完成的卡片,以便用户可以专注于当前活动的步骤。
- 显示估计时间。如果你有关于每个节点耗时的历史数据,请显示时间估计以设定用户期望。
- 添加全局进度指示器。在流水线视图顶部,用整体进度条(例如,“第 2 步,共 4 步”)补充每个节点的卡片。
- 按节点处理错误。如果节点失败,请在其卡片中显示错误,而不要折叠整个流水线。其他节点可能仍会成功完成。
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时答案。

