Human-in-the-Loop 机制
HITL 依赖 checkpoint 持久化 + 节点内 interrupt():图在指定点暂停,暴露当前 state,待人修改或确认后 Command(resume=...) 继续。
1. 典型流程
mermaid
sequenceDiagram
participant G as Graph
participant U as 用户
G->>G: 节点执行到 interrupt
G->>U: 返回 __interrupt__ 载荷
U->>U: 审核 / 编辑 state
U->>G: invoke(Command(resume))
G->>G: 从 checkpoint 继续2. interrupt 语义
- 在节点内调用
interrupt(value)→ 引擎抛控制流,本超步 checkpoint 已写。 - 返回给调用方的 payload 可展示在 UI(待批准工具参数等)。
- resume 后节点会重新执行(从函数开头),因此 interrupt 宜放在副作用前,或用 idempotent 设计。官方称「replay from start of node」。
3. 与 checkpointer
无 checkpointer 则无法跨进程/跨请求 resume;生产必须配 saver + thread_id。
updateState 可在暂停时人工改 channel 再 resume。
4. 模式
| 模式 | 说明 |
|---|---|
| 批准工具调用 | interrupt 展示 args,拒绝则 resume 取消 |
| 编辑计划 | 改 state.plan 再继续 |
| 多轮澄清 | 多次 interrupt/resume 同一 thread |
5. 注意
- 节点重跑:避免 interrupt 前重复扣费/写库,用幂等或检查 resume 输入。
- 超时与取消:应用层管理 thread 生命周期。
- 安全:resume 数据需校验。
6. 总结
HITL = checkpoint + interrupt + Command;理解「节点重执行」是正确使用的前提。