此功能需要 LangGraph Agent Server。使用
langgraph dev 在本地运行您的代理,或 将其部署到 LangSmith 以使用此模式。为什么需要消息队列?
在典型的聊天界面中,用户必须等待智能体完成响应后才能发送下一条消息。这在以下几种场景中会造成不便:- 批量提问:用户希望一次性提出五个相关问题,而不是等待每个答案
- 连续追问:在智能体仍在处理时提交澄清或额外上下文
- 自动化测试序列:以编程方式发送一系列提示以验证智能体行为
- 数据录入工作流:逐个输入结构化数据以供处理
工作原理
在底层,LangGraph 使用multitaskStrategy: "enqueue" 来管理并发提交。当智能体已在处理时提交消息,该消息会被添加到服务器端队列。当前运行完成后,会自动选取下一个排队的消息。
useStream 钩子暴露了一个 queue 属性,提供对等待消息的实时可见性:
每个
QueueEntry 对象包含:
设置 useStream
定义一个与您的智能体状态模式匹配的 TypeScript 接口,并将其作为类型参数传递给 useStream,以便对状态值进行类型安全访问。在下面的示例中,将 typeof myAgent 替换为您的接口名称:
显示队列
构建一个QueueList 组件,显示每条等待消息及其取消按钮。这使用户能够看到正在等待的内容,并可以移除不再需要的项目。
取消排队消息
您有两个级别的取消操作:取消单个条目
通过其 ID 从队列中移除特定消息。智能体将跳过它并处理下一个条目。清空整个队列
一次性移除所有等待消息。当用户改变上下文或想要重新开始时非常有用。取消队列条目仅影响尚未开始处理的消息。如果智能体已经在处理某条消息,从队列中取消它不会产生影响。请使用
stream.stop() 来中断当前运行。使用 onCreated 链式提交后续消息
onCreated 回调在创建新运行时触发,为您提供了一个以编程方式提交后续消息的钩子。这对于构建多步骤工作流非常有用,其中下一个问题取决于前一个提交是否被接受。
开始新对话
当用户想要开始新的对话时,使用switchThread(null) 来创建新线程。这将清除当前消息历史和队列。
完整示例
将所有内容整合在一起,这是一个包含队列管理的完整聊天组件:最佳实践
- 限制队列大小:虽然客户端没有硬性的队列大小限制,但请注意非常大的队列可能会降低用户体验。当队列超过合理阈值(例如 10 个项目)时,考虑显示警告。
- 显示队列位置:为每个排队项目编号,以便用户了解处理顺序。
- 保持输入焦点:提交后保持输入字段聚焦,以便用户可以立即输入下一条消息。
- 动画过渡:当项目开始处理时,平滑地将其从队列面板移动到消息列表中。
- 优雅处理错误:如果排队消息失败,在不阻塞后续队列条目的情况下显示错误。
- 对快速提交进行防抖:对于自动化或编程式提交,在消息之间添加小延迟,以避免服务器过载。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

