approve)、在运行前进行修改(edit)、附带反馈拒绝(reject),或者对于“询问用户”类工具,直接进行响应(respond)。
中断决策类型
该中间件定义了四种内置的人工响应中断的方式:
每个工具可用的决策类型取决于你在
interrupt_on 中配置的策略。
当多个工具调用同时被暂停时,每个操作都需要一个单独的决策。
决策必须按照中断请求中操作出现的顺序提供。
当人工拒绝所请求的操作时使用 respond。仅当人工作为工具本身(例如回答 ask_user 提示)时才使用 respond。不要使用 respond 来拒绝具有副作用的工具,因为其消息会被视为成功的工具结果。
配置中断
要使用 HITL,请在创建智能体时将中间件添加到智能体的middleware 列表中。
你通过一个将工具操作映射到每个操作允许的决策类型的配置来对其进行设置。当工具调用匹配映射中的操作时,中间件将中断执行。
你必须配置一个检查点(checkpointer)来在中断之间持久化图的状态。在生产环境中,使用像
AsyncPostgresSaver 或 MongoDBSaver 这样的持久化检查点保存器。对于测试或原型开发,使用 InMemorySaver。调用智能体时,传递一个包含线程 ID 的 config,以将执行与对话线程关联。
详见 LangGraph 中断文档。配置选项
配置选项
条件中断
默认情况下,interrupt_on 中列出的每个工具调用都会暂停以供审查。要仅暂停部分调用,请在工具的 InterruptOnConfig 中添加一个 when 谓词。该谓词接收一个 ToolCallRequest 并返回 True 表示中断或 False 表示自动批准,因此你可以根据工具的参数进行门控。
条件中断目前仅在 Python 中可用。
响应中断
当你调用智能体时,它会运行直到完成或触发中断。当中断被触发时,工具调用与你在interrupt_on 中配置的策略匹配。使用 version="v2" 时,结果是一个 GraphOutput,其 interrupts 属性包含需要审查的操作。然后,你可以将这些操作呈现给审查者,并在提供决策后恢复执行。
决策类型
- ✅ 批准
- ✏️ 编辑
- ❌ 拒绝
- 💬 响应
使用
approve 来原样批准工具调用并执行,不做任何更改。多个决策
当有多个操作正在审查时,请按照它们在中断中出现的顺序为每个操作提供一个决策:结合人在环中进行流式处理
你可以使用stream_events() 在智能体运行和处理中断时流式传输实时更新。使用 stream.messages 流式传输 LLM 令牌,使用 stream.values 检查智能体状态快照以获取中断。
执行生命周期
该中间件定义了一个after_model 钩子,它在模型生成响应之后但在任何工具调用执行之前运行:
- 智能体调用模型以生成响应。
- 中间件检查响应中的工具调用。
- 如果任何调用需要人工输入,中间件会构建一个包含
action_requests和review_configs的HITLRequest,并调用 interrupt。 - 智能体等待人工决策。
- 根据
HITLResponse决策,中间件执行已批准或已编辑的调用,为被拒绝的调用合成 ToolMessage,将人工的回复直接作为 ToolMessage 返回(针对respond决策),并恢复执行。
自定义 HITL 逻辑
对于更专业的工作流,你可以直接使用 interrupt 原语和中间件抽象来构建自定义的 HITL 逻辑。 请查阅上面的执行生命周期,以了解如何将中断集成到智能体的操作中。Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

