用途
LangGraph human-in-the-loop 用于在 LangGraph 工作流中暂停执行,等待人工介入、审批或反馈,然后再继续运行。适用于审批工作流、手动审核关卡、用户反馈集成、交互式智能体监督等场景。
主要能力
该技能覆盖以下能力点:
- interrupt-before:在指定节点前暂停工作流,用于审批关卡。关键词:interrupt、pause、stop、before、gate。
- resume-workflow:在人工审批后恢复工作流,更新状态并继续执行。关键词:resume、continue、approve、proceed、update_state。
- approval-patterns:实现审批工作流,处理批准/拒绝决策。关键词:approval、approve、reject、decision、gate。
- feedback-integration:收集人工反馈,将审阅意见集成到工作流状态中。关键词:feedback、comment、review、notes、human input。
- interactive-supervision:监督智能体执行,添加人工监督并覆盖智能体决策。关键词:supervise、monitor、interactive、control、override。
- state-inspection:检查工作流状态,查看中断时的当前状态并调试暂停的工作流。关键词:get_state、inspect、view、current state、debug。
使用方式
基础中断
通过编译时传入 interrupt_before=["review"] 在审核节点前暂停;使用 thread_id 配置进行调用,工作流会在此处暂停。
动态 interrupt() 函数(2026 最佳实践)
在节点逻辑内使用 from langgraph.types import interrupt, Command,根据条件(如 state["risk_level"] == "high")调用 interrupt({...}) 进行动态中断,并根据响应决定是否批准。
审批后恢复
通过 app.get_state(config) 读取状态,人工修改 approved、feedback 后调用 app.update_state(config, state.values),再以 app.invoke(None, config=config) 恢复执行。
Command(resume=) 模式(2026 最佳实践)
初始调用后检查结果中的 __interrupt__,获取中断信息,得到用户响应后通过 graph.invoke(Command(resume=user_response), config) 恢复。
审批关卡节点
定义 approval_gate 节点,根据 human_reviewed 与 approved 设置 next 为 publish 或 revise,并在编译时通过 interrupt_before=["approval_gate"] 暂停。
反馈循环模式
使用 uuid 生成 thread_id,循环调用直到无中断;根据用户输入(yes/no/feedback)决定返回、拒绝或携带反馈重试。
输入验证循环
在 get_valid_age 等函数中循环调用 interrupt(prompt),校验输入有效性(如 0 到 150 之间的整数),无效时更新提示并继续。
API 集成
使用 FastAPI 定义 POST /workflows/{workflow_id}/approve 端点,通过 get_state 读取状态、update_state 写入人工决策,再调用 invoke(None, config) 恢复工作流,返回完成状态与结果。
多审批点
在编译时传入 interrupt_before=["first_review", "final_review"],依次暂停、审批、恢复,最终完成工作流。
关键决策建议
- 中断点:关键节点之前
- 超时:人工审核 24-48 小时
- 通知:暂停时通过 Email/Slack 提醒
- 回退:超时后自动拒绝
关键规则
DO:
- 将副作用放在 interrupt 调用之后
- 使中断前的副作用幂等(使用 upsert 而非 create)
- 保持各次执行中 interrupt 调用顺序一致
- 向 interrupt() 传递简单的、可 JSON 序列化的值
DON'T:
- 将 interrupt 包裹在裸 try/except 中(会捕获 interrupt 异常)
- 有条件地跳过 interrupt 调用(破坏确定性)
- 向 interrupt() 传递函数或类实例
- 在中断前创建非幂等记录(恢复时产生重复)
常见错误
- 未设置超时(工作流永远挂起)
- 未发送通知(人工不知道需要审核)
- 丢失检查点(无法恢复)
- 没有拒绝路径(只有批准可用)
- 将 interrupt() 包裹在 try/except 中(破坏机制)
- 非确定性的 interrupt 调用顺序(破坏恢复)
相关技能
- langgraph-checkpoints:在人工审核暂停期间持久化状态
- langgraph-routing:基于批准/拒绝决策进行路由
- langgraph-tools:在危险工具执行前添加审批关卡
- langgraph-supervisor:在 supervisor 路由中实现人工审批
- langgraph-streaming:在等待人工输入时流式传输状态
- api-design-framework:设计审核 API 端点
评估
测试用例见 references/evaluations.md。
限制
资料未提供该技能的安装方式、许可协议、价格、平台支持范围等具体信息。