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

