中断机制的工作原理
LangGraph 智能体支持中断——智能体将控制权交还给客户端的显式暂停点。当智能体触发中断时:- 智能体停止执行并发出中断负载
useStream钩子通过stream.interrupt暴露中断信息- 您的 UI 渲染包含批准/拒绝/编辑选项的审核卡片
- 用户做出决定
- 您的代码调用
stream.submit()并附带继续执行的指令 - 智能体从中断处继续执行
为人机协同配置 useStream
定义与智能体状态模式匹配的 TypeScript 接口,并将其作为类型参数传递给useStream,以便以类型安全的方式访问状态值。在以下示例中,将 typeof myAgent 替换为您的接口名称:
中断负载
当智能体暂停时,stream.interrupt 包含一个具有以下结构的 HITLRequest:
决策类型
人机协同模式支持三种决策类型:批准
用户确认操作应按原样进行:拒绝
用户拒绝该操作,并可选择提供原因:当操作被拒绝时,智能体会收到拒绝原因,并可以决定如何继续。它可能会重新措辞、询问澄清问题,或完全放弃该操作。
编辑
用户在批准前修改操作的参数:构建 ApprovalCard
这是一个处理所有三种决策类型的完整审核卡片组件:恢复流程
用户做出决策后,完整流程如下:- 调用
stream.submit(null, { command: { resume: hitlResponse } }) useStream钩子将恢复命令发送到 LangGraph 后端- 智能体接收
HITLResponse并继续执行 - 如果批准,工具将使用原始(或编辑后的)参数运行
- 如果拒绝,智能体接收原因并决定下一步操作
- 当智能体恢复流式传输时,
interrupt属性重置为null
常见用例
处理多个待处理操作
当智能体希望同时执行多个操作时,中断可能包含多个actionRequests。为每个操作渲染卡片,并在恢复前收集所有决策:
最佳实践
实现人机协同工作流时,请牢记以下准则:- 显示清晰的上下文。始终显示智能体想要执行什么以及为什么。包含操作描述和完整参数。
- 使批准成为最便捷的路径。如果操作看起来正确,批准应该只需一次点击。将多步骤流程保留给拒绝/编辑操作。
- 验证编辑后的参数。当用户编辑操作参数时,在发送前验证 JSON 结构。对格式错误的输入显示内联错误。
- 保持中断状态持久化。如果用户刷新页面,中断应仍然可见。
useStream通过线程的检查点处理此问题。 - 记录所有决策。为了审计追踪,记录每个批准/拒绝/编辑决策,包括时间戳和做出决策的用户。
- 合理设置超时。长时间运行的智能体不应无限期地阻塞等待人工审核。考虑显示智能体已等待的时间。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

