DeepAgents · 从入门到精通 目录

§12 人机协同:关键操作必须你点头

先给结论:敏感工具执行前,可以让代理停下来等人类批准。这叫 Human-in-the-Loop(HITL)。

删除文件、发邮件、部署代码——这些不能让 Agent 自作主张。 DeepAgents 用 interrupt_on 配置哪些工具要人确认。

配置中断

from langgraph.checkpoint.memory import MemorySaver

agent = create_deep_agent(
    tools=[delete_file, send_email],
    interrupt_on={
        "delete_file": True,   # 全部决策都允许
        "send_email": {"allowed_decisions": ["approve", "reject"]},
    },
    checkpointer=MemorySaver(),   # 必须!否则恢复不了
)

中断与恢复(v2 格式)

result = agent.invoke(
    {"messages": [{"role": "user", "content": "删掉 temp.txt"}]},
    config=config, version="v2",
)

if result.interrupts:                    # v2:属性访问
    action = result.interrupts[0].value["action_requests"][0]
    print(f"要执行: {action['name']}, 参数: {action['args']}")

    decisions = [{"type": "approve"}]    # approve/edit/reject
    result = agent.invoke(
        Command(resume={"decisions": decisions}),  # 恢复执行
        config=config, version="v2",
    )

四种决策:approve(批准)、edit(改参数再执行)、reject(拒绝)、respond(回复)。

风险分级建议

风险 工具 允许决策
删除/发送/部署 approve、edit、reject
写文件/改配置 approve、reject(禁 edit)
读/列 不打断

标叔的经验:我见过的真实 bug:在父 Agent 层面对 generate_image 设中断。但那是子代理的工具,父 Agent 的中断传不到它。正确做法是去子代理自己的 interrupt_on 里设。这个坑后面 §19 会展开。

标叔的结论:敏感操作,宁可多问一次。HITL 配置错,比不配置更危险——因为它给你"已保护"的错觉。

注意:HITL 必须配 checkpointer。中断恢复靠它。没有 checkpointer,流程断不了也续不上。

下一章,讲给代理划边界:权限与沙箱。