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 都要记审计日志:谁、什么时间、基于什么数据、做了啥决定。出事能溯源。
▸ 向前桥接 单智能体够强了。但任务太大,下一章讲"多智能体怎么分工"。