图节点如何映射到 UI 卡片
一个 LangGraph 图定义了一系列节点,每个节点负责一个特定的任务。例如,一个研究管道可能包含:- 分类:对用户的查询进行分类
- 研究:收集相关信息
- 分析:根据研究得出结论
- 综合:生成最终的精炼回复
useStream 会在运行时通过 stream.subgraphs 发现每一个节点,并为每个观察到的步骤暴露一个 SubgraphDiscoverySnapshot:
node.nodeName 作为标签。将每个快照传递给 useMessages(stream, node) 来渲染节点范围内的流式内容,而无需将 UI 与图状态的键名耦合。
这种映射关系构成了你的图与 UI 之间的契约。后端作者可以有意地添加、重命名或重新排序节点,而前端作者则决定如何将每个状态键可视化:一个状态徽章、Markdown 面板、表格、图表、追踪视图或审批卡片。
设置 useStream
像平常一样接入 useStream。你将用到的关键属性是 messages(用于对话)和 subgraphs(用于在当前运行中发现的图节点)。将每个发现的子图快照传递给一个选择器,以读取限定在该节点范围内的消息。
The code examples use
useStream<typeof myAgent> for type-safe stream state. See Type inference for Python or JavaScript backends.将流式令牌路由到节点
当图进行流式传输时,每个发现的子图快照都标识了它所属的节点。将该快照传递给一个选择器钩子或可组合函数,以读取限定在该节点范围内的消息:确定节点状态
每个发现的节点都携带着它当前的状态。直接使用node.status;发现快照会报告 "pending"(等待中)、"running"(运行中)、"complete"(已完成)或 "error"(出错):
构建管道进度条
顶部的水平进度条为用户提供了整个管道的鸟瞰视图。每个步骤都是一个带标签的段落,随着节点的完成而填充:构建可折叠的节点卡片组件
每个节点都有自己的卡片,展示状态徽章、内容(流式或最终)以及一个用于长输出的可折叠主体:流式内容与已完成内容
节点卡片读取限定范围内的消息,用于流式内容和最终内容。这避免了假设图节点名称与其写入的状态键名相匹配(例如,在示例图中do_research 写入到 research 键):
模式是:在节点卡片中显示最近一条限定范围内的 AI 消息,并且仅在你有意需要某个图状态字段时才使用
stream.values。
因为限定范围的消息与生成它们的节点是绑定的,所以 UI 可以支持并行的图路径,而无需从消息顺序进行猜测。每张卡片都根据属于其节点的流事件进行更新,而已完成的值则通过 stream.values 保持可用。
整合在一起
以下是完整的卡片列表,它结合了路由、状态检测和卡片渲染:使用场景
图执行卡片非常适用于任何需要关注可见性的多步骤管道:- 研究管道:分类 → 收集来源 → 分析 → 综合生成报告
- 内容生成:大纲 → 草稿 → 事实核查 → 编辑 → 发布
- 数据处理:接入 → 验证 → 转换 → 聚合 → 导出
- 代码生成:理解需求 → 规划架构 → 编写代码 → 审查 → 测试
- 决策工作流:收集背景信息 → 评估选项 → 为备选方案打分 → 给出推荐
处理动态管道
并非所有图都有一组固定的节点。有些管道会根据输入添加或跳过节点。发现映射只包含当前线程观察到的节点:如果你的图有条件分支(例如,对于简单的事实性查询跳过”研究”节点),被跳过的节点将不会出现在
stream.subgraphs 中。你的管道进度条可以只渲染已发现的节点,或者将那些没有对应快照的预期节点显示为灰色。最佳实践
- 从流中发现节点。从
stream.subgraphs渲染卡片,而不是硬编码预期的节点;条件性或跳过的步骤在运行之前不会出现。 - 将状态键视为 UI 契约。确定哪些图输出对于前端渲染来说足够稳定,并在图定义的旁边记录这些键。
- 为节点卡片使用限定范围的消息。它们在节点流式传输期间和完成后都能工作,而无需将 UI 卡片与状态键名耦合。
- 自动折叠已完成的节点。在长管道中,自动折叠已完成的卡片,以便用户可以专注于当前活动的步骤。
- 显示预估时间。如果你有每个节点所需时长的历史数据,显示一个时间预估来设定用户期望。
- 添加全局进度指示器。在管道视图的顶部,用一个总体的进度条(例如,“第 2 步,共 4 步”)来补充单个节点卡片。
- 按节点处理错误。如果某个节点失败,在其卡片中显示错误,而不要折叠整个管道。其他节点可能仍能成功完成。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

