HITL(人在回路) 前端与交互

别名: 人在回路 · 人在环里 · 人工审批

Human-in-the-Loop 的缩写:在 Agent 主循环里插入人工决策点,破坏性/不可逆动作执行前暂停、经注入的审批回调拿到人的决定再继续。「暂停 → 问 → 恢复」就是本章审批双向流的形态;没注入回调时默认拒绝(fail closed)。见[第 18 章](/chapters/18-hitl-v05/)。

它是什么

HITL(Human-in-the-Loop,人在回路)指在 Agent 主循环里插入人工决策点:破坏性/不可逆动作执行前暂停、经注入的审批回调拿到人的决定再继续。「暂停 → 问 → 恢复」就是审批双向流的形态。它针对的是 Agent 的失败模式——over-eager(过拟合用户意图)、诚实失误、prompt injection——在破坏性动作执行之前,让一个不在推理链上的人确认一下。

代码形态

在 loop 里,「暂停」就是一行 await getApproval(request):Promise 不 resolve,循环就停在这。getApproval注入的异步回调——谁提供它、回调内部是终端提问、HTTP 挂起表还是测试脚本,loop 一概不知;core 通过注入拿到「人的决定」,不 import 界面。没注入回调 = 默认拒绝(fail closed):{ approved: false, reason: 'no approver configured (fail closed)' }

为什么不能「每个动作都问」

审批疲劳(approval fatigue):用户会批准 93% 的权限提示,审批频率越高、单次审批质量越低,真正危险的请求反而更容易被放行。所以正确的设计不是「全问」或「全放」,而是按风险分级:只有真正有破坏潜力的动作才叫人。OpenAI Agents SDK 的 needs_approval + 中断(interruption)+ RunState 恢复、Claude Code auto mode 的分层裁决,都是同一思想的厂商实践。

坑与边界

死等审批是最直接的风险:前端/人类永远不回答,loop 永远停着、资源挂着——真产品里至少要有审批超时(超时 = 默认拒绝,并像正常拒绝一样记录进审计)。拒绝必须是数据而不是静默:tool_resultdenied 标记 + 人类理由,模型下一轮能读到并恢复。参见审批门

相关词条

出现在这些章节