先决条件
useStream() React 钩子提供了一种将 LangGraph 无缝集成到您的 React 应用程序中的方法。它处理所有流式传输、状态管理和分支逻辑的复杂性,让您专注于构建出色的聊天体验。 主要功能:- 消息流式传输:处理消息块流以形成完整的消息
- 消息、中断、加载状态和错误的自动状态管理
- 会话分支:从聊天历史的任何点创建备用会话路径
- UI 无关设计:自带组件和样式
useStream()。 useStream() 为创建定制聊天体验奠定了坚实的基础。对于预构建的聊天组件和界面,我们还建议查看 CopilotKit 和 assistant-ui。安装
示例
自定义您的 UI
useStream() 钩子在幕后处理所有复杂的状态管理,为您提供了构建 UI 的简单接口。以下是您开箱即用的功能
- 线程状态管理
- 加载和错误状态
- 中断
- 消息处理和更新
- 分支支持
加载状态
isLoading 属性告诉您流何时处于活动状态,使您能够
- 显示加载指示器
- 在处理期间禁用输入字段
- 显示取消按钮
页面刷新后恢复流
useStream() 钩子可以通过设置 reconnectOnMount: true 在挂载时自动恢复正在进行的运行。这对于在页面刷新后继续流式传输很有用,可确保在停机期间生成的任何消息和事件都不会丢失。
window.sessionStorage 中,可以通过在 reconnectOnMount 中传递自定义存储来替换。存储用于持久化线程中正在进行的运行 ID(在 lg:stream:${threadId} 键下)。
joinStream 函数来恢复流,从而手动管理恢复过程。请务必在创建运行时传递 streamResumable: true;否则可能会丢失一些事件。
线程管理
通过内置线程管理跟踪对话。您可以访问当前线程 ID 并在创建新线程时收到通知threadId 存储在 URL 的查询参数中,以允许用户在页面刷新后恢复对话。
消息处理
useStream() 钩子将跟踪从服务器收到的消息块并将它们连接起来以形成完整的消息。完整的消息块可以通过 messages 属性检索。 默认情况下,messagesKey 设置为 messages,它会将新的消息块附加到 values["messages"]。如果您将消息存储在不同的键中,则可以更改 messagesKey 的值。useStream() 钩子将使用 streamMode: "messages-tuple" 从图节点内的任何 LangChain 聊天模型调用接收消息流(即单个 LLM 令牌)。在流式传输指南中了解有关消息流式传输的更多信息。
中断
useStream() 钩子公开了 interrupt 属性,该属性将填充线程的最后一次中断。您可以使用中断来
- 在执行节点之前渲染确认 UI
- 等待人工输入,允许代理向用户询问澄清问题
分支
对于每条消息,您可以使用getMessagesMetadata() 获取该消息首次出现的第一个检查点。然后,您可以从第一个可见检查点之前的检查点创建新运行,以在线程中创建新分支。 分支可以通过以下方式创建:- 编辑之前的用户消息。
- 请求重新生成之前的助手消息。
experimental_branchTree 属性获取线程的树表示,这可用于渲染非基于消息的图表的分支控制。
乐观更新
您可以在向代理执行网络请求之前乐观地更新客户端状态,从而可以向用户提供即时反馈,例如在代理看到请求之前立即显示用户消息。缓存线程显示
使用initialValues 选项在从服务器加载历史记录时立即显示缓存的线程数据。这通过在导航到现有线程时立即显示缓存数据来改善用户体验。
乐观线程创建
在submit 函数中使用 threadId 选项以启用乐观 UI 模式,在该模式下您需要在线程实际创建之前知道线程 ID。
TypeScript
useStream() 钩子对使用 TypeScript 编写的应用程序很友好,您可以为状态指定类型以获得更好的类型安全和 IDE 支持。
ConfigurableType:config.configurable属性的类型(默认值:Record<string, unknown>)InterruptType:中断值的类型 - 即interrupt(...)函数的内容(默认值:unknown)CustomEventType:自定义事件的类型(默认值:unknown)UpdateType:提交函数的类型(默认值:Partial<State>)
import type { ... } 指令)。
事件处理
useStream() 钩子提供了几个回调选项,可帮助您响应不同的事件
onError:发生错误时调用。onFinish:流完成时调用。onUpdateEvent:收到更新事件时调用。onCustomEvent:收到自定义事件时调用。请参阅流式传输指南以了解如何流式传输自定义事件。onMetadataEvent:收到元数据事件时调用,其中包含运行 ID 和线程 ID。
了解更多
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。