Part 2 · 核心能力

07 人机协同:在关键节点按暂停

07.1 什么是 HITL

HITL 是 Human-in-the-Loop,人机协同。

一句话:让 Agent 在关键决策点停下来,等人拍板,再继续。

金融风控、医疗诊断、合同审批——这些地方,AI 说了不算,得人签字。

07.2 核心就一个:interrupt

from langgraph.types import interrupt

def approve_node(state):
    # 关键:在这里暂停,把待审信息交出去
    decision = interrupt({"plan": state["plan"], "msg": "请审批"})
    # 恢复后,decision 就是人传回来的结果
    if decision["type"] == "accept":
        return {"ok": True}   # 普通返回,更新状态即可
    return {"ok": False}

interrupt() 一调用,图立刻冻结。状态存进 Checkpointer。人审批完,用同一个 thread_id 带着结果回来,代码从这一行往下接着跑。

07.3 恢复也简单

from langgraph.types import Command

graph.invoke(
    Command(resume={"type": "accept"}),
    {"configurable": {"thread_id": "user-001"}},
)

注意:interrupt 必须配 Checkpointer 没挂 checkpointer,interrupt() 用不了。图编译时会直接报错提醒你。

07.4 一句话讲清"为什么能冻结"

Checkpointer 在每次到节点或触发 interrupt 时,把整个 State 序列化存库。

恢复时,它不重跑函数,而是重放历史状态,把 resume 的值直接注入 interrupt() 的返回值。

所以一个 Python 函数能像按了暂停键,几小时甚至几天后再醒。

标叔的经验:审批要留痕 生产环境,每一次 interrupt→resume 都要记审计日志:谁、什么时间、基于什么数据、做了啥决定。出事能溯源。

▸ 向前桥接 单智能体够强了。但任务太大,下一章讲"多智能体怎么分工"。