useStream React Hook 提供了与 LangGraph 流式功能的无缝集成。它处理流式传输、状态管理和分支逻辑的所有复杂性,让你专注于构建出色的生成式 UI 体验。
主要特性:
- 消息流式传输 — 处理消息块流以形成完整消息
- 自动状态管理 — 管理消息、中断、加载状态和错误
- 对话分支 — 从聊天历史的任意位置创建备用对话路径
- UI 无关设计 — 使用你自己的组件和样式
安装
在你的 React 应用中安装 LangGraph SDK 以使用useStream Hook:
基本用法
useStream Hook 可连接到任何 LangGraph 图,无论是运行在你自己的端点,还是通过 LangSmith 部署 托管的图。
`useStream` 参数
`useStream` 参数
要连接的代理 ID。使用 LangSmith 部署时,此 ID 必须与部署仪表板中显示的代理 ID 一致。对于自定义 API 部署或本地开发,可以是服务器用于标识代理的任意字符串。
Agent Server 的 URL。本地开发默认为
http://localhost:2024。用于身份验证的 API 密钥。连接到 LangSmith 上部署的代理时需要。
连接到已有线程而非新建线程。适用于恢复对话。
新线程创建时调用的回调。用于持久化线程 ID 以备后用。
组件挂载时自动恢复正在进行的运行。设为
true 使用 session storage,或提供自定义存储函数。新运行创建时调用的回调。适用于持久化运行元数据以便恢复。
流式传输期间发生错误时调用的回调。
流式传输成功完成并返回最终状态时调用的回调。
处理每个图步骤后的状态更新事件。
处理包含运行和线程信息的元数据事件。
图状态中包含消息数组的键。
批量处理状态更新以提升渲染性能。禁用后可立即更新。
首次流式加载时显示的初始状态值。适用于立即展示缓存的线程数据。
`useStream` 返回值
`useStream` 返回值
当前线程中的所有消息,包括人类消息和 AI 消息。
当前图状态值。类型根据代理或图类型参数推断。
是否正在进行流式传输。用于显示加载指示器。
流式传输期间发生的错误。无错误时为
null。需要用户输入的当前中断,例如人机协作的审批请求。
所有消息中的工具调用,包含结果和状态(
pending、completed 或 error)。向代理提交新输入。从中断恢复时可将输入传为
null 并附带命令。选项包括用于分支的 checkpoint、乐观更新的 optimisticValues 以及乐观线程创建的 threadId。立即停止当前流式传输。
通过运行 ID 恢复已有流式传输。配合
onCreated 实现手动流式恢复。切换到对话历史中的不同分支。
获取特定 AI 消息的所有工具调用。
获取消息的元数据,包括流式信息(如用于识别来源节点的
langgraph_node)和用于分支的 firstSeenState。线程的树形表示,适用于非消息图的高级分支控制。
线程管理
通过内置线程管理跟踪对话。你可以访问当前线程 ID,并在新线程创建时收到通知:threadId,以便用户在页面刷新后可以恢复对话。
页面刷新后恢复
useStream Hook 可在组件挂载时通过设置 reconnectOnMount: true 自动恢复正在进行的运行。这对于在页面刷新后继续流式传输非常有用,确保下线期间生成的消息和事件不会丢失。
window.sessionStorage 中,可以通过传入自定义存储函数来替换:
joinStream 恢复:
查看会话持久化示例
在
session-persistence 示例中查看使用 reconnectOnMount 和线程持久化实现流式恢复的完整实现。乐观更新
你可以在执行网络请求之前乐观地更新客户端状态,立即向用户提供反馈:乐观线程创建
在submit 中使用 threadId 选项,可以在线程创建前预先知道线程 ID,实现乐观 UI 模式:
缓存线程展示
使用initialValues 选项在从服务器加载历史记录期间立即显示缓存的线程数据:
分支
通过编辑历史消息或重新生成 AI 回复来创建备用对话路径。使用getMessagesMetadata() 访问用于分支的检查点信息:
experimental_branchTree 属性获取线程的树形表示,适用于非消息图。
查看分支示例
在
branching-chat 示例中查看包含编辑、重新生成和分支切换的完整对话分支实现。类型安全流式传输
useStream Hook 在与通过 @[createAgent] 创建的代理或通过 StateGraph 创建的图一起使用时,支持完整的类型推断。将 typeof agent 或 typeof graph 作为类型参数传入,即可自动推断工具调用类型。
与 createAgent 配合使用
使用 @[createAgent] 时,工具调用类型会自动从注册到代理的工具中推断:
与 StateGraph 配合使用
对于自定义 StateGraph 应用,状态类型从图的注解中推断:
使用 Annotation 类型
如果你在使用 LangGraph.js,可以复用图的注解类型。确保只导入类型,以避免引入整个 LangGraph.js 运行时:高级类型配置
你可以为中断、自定义事件和可配置选项指定额外的类型参数:渲染工具调用
使用getToolCalls 从 AI 消息中提取并渲染工具调用。工具调用包含调用详情、结果(如已完成)和状态。
查看工具调用示例
在
tool-calling-agent 示例中查看包含天气、计算器和笔记工具的完整工具调用渲染实现。自定义流式事件
在工具或节点中使用writer 从代理流式传输自定义数据。通过 onCustomEvent 回调在 UI 中处理这些事件。
查看自定义流式传输示例
在
custom-streaming 示例中查看包含进度条、状态徽章和文件操作卡片的自定义事件完整实现。事件处理
useStream Hook 提供了回调选项,让你可以访问不同类型的流式事件。你无需显式配置流模式——只需传入你想处理的事件类型的回调即可:
可用回调
| 回调 | 描述 | 流模式 |
|---|---|---|
onUpdateEvent | 每个图步骤后收到状态更新时调用 | updates |
onCustomEvent | 收到图发出的自定义事件时调用 | custom |
onMetadataEvent | 携带运行和线程元数据时调用 | metadata |
onError | 发生错误时调用 | - |
onFinish | 流式传输完成时调用 | - |
多代理流式传输
在使用多代理系统或包含多个节点的图时,可通过消息元数据识别每条消息的来源节点。当多个 LLM 并行运行且你希望以不同视觉样式展示各自输出时,这尤为有用。查看并行研究示例
在
parallel-research 示例中查看包含三个并行研究者和不同视觉样式的多代理流式传输完整实现。人机协作
处理代理需要人工审批工具执行的中断。在如何处理中断指南中了解更多。查看人机协作示例
在
human-in-the-loop 示例中查看包含批准、拒绝和编辑操作的审批工作流完整实现。推理模型
使用具有扩展推理能力的模型(如 OpenAI 的推理模型或 Anthropic 的扩展思考)时,思考过程会嵌入在消息内容中。你需要将其提取并单独展示。查看推理示例
在
reasoning-agent 示例中查看使用 OpenAI 和 Anthropic 模型展示推理 token 的完整实现。自定义状态类型
对于自定义 LangGraph 应用,可将工具调用类型嵌入状态的 messages 属性中。自定义传输层
对于自定义 API 端点或非标准部署,可使用带有FetchStreamTransport 的 transport 选项连接到任意流式 API。
相关资源
- 流式传输概述 — 使用 LangChain 代理的服务端流式传输
- useStream API 参考 — 完整 API 文档
- Agent Chat UI — LangGraph 代理的预构建聊天界面
- 人机协作 — 配置人工审查中断
- 多代理系统 — 构建包含多个 LLM 的代理
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时解答。

