某些工具操作可能比较敏感,需要在执行前获得人工批准。Deep Agents 通过 LangGraph 的中断功能支持人机协作工作流。您可以使用 interrupt_on 参数来配置哪些工具需要审批。当设置了 interrupt_on 时,HumanInTheLoopMiddleware 会被添加到默认中间件栈中。如果在工具返回结果之前运行被取消或中断,同一栈中的 PatchToolCallsMiddleware 会自动修复消息历史。

基本配置

interrupt_on 参数接受一个字典,将工具名称映射到中断配置。每个工具可以配置为:
  • True:启用中断并使用默认行为(允许批准、编辑、拒绝、回复)
  • False:禁用该工具的中断
  • InterruptOnConfig:自定义配置。设置 allowed_decisions 以控制审查选项。

决策类型

allowed_decisions 列表控制人工审查工具调用时可以采取的操作: 当人工拒绝提议的操作时使用 reject。仅当人工扮演工具角色时使用 respond,例如回答 ask_user 提示。不要使用 respond 来拒绝具有副作用的工具,因为模型可能会将其消息视为成功的工具结果。
编辑工具参数时,请保守地进行更改。对原始参数进行重大修改可能会导致模型重新评估其方法,并可能多次执行工具或采取意外操作。
您可以为每个工具自定义可用的决策:

处理中断

当触发中断时,代理会暂停执行并返回控制权。检查结果中的中断并相应处理。如果用户拒绝某个操作,请包含一个明确的 message,告知代理该工具未执行以及下一步该怎么做。

多个工具调用

当代理调用需要批准的多个工具时,所有中断都会合并到一个中断中。您必须按顺序为每个工具提供决策。

拒绝消息

当审查者返回 reject 决策时,Deep Agents 会跳过工具调用并将拒绝反馈发送回代理。如果您省略 message,默认反馈会告知模型该工具未执行,除非用户要求,否则不要重试相同的工具调用。 对于敏感或具有副作用的工具,请在决策中传递特定领域的 message。明确说明代理是应该放弃该操作、提出后续问题还是尝试更安全的替代方案。

编辑工具参数

当 "edit" 在允许的决策中时,您可以在执行前修改工具参数:

子代理中断

使用子代理时,您可以在工具调用时和工具调用内部使用中断。

工具调用时的中断

每个子代理可以拥有自己的 interrupt_on 配置,以覆盖主代理的设置:
当子代理触发中断时,处理方式相同——检查结果中的 interrupts 并使用 Command 恢复。

工具调用内部的中断

子代理工具可以直接调用 interrupt() 来暂停执行并等待批准:
运行时,会产生以下输出: