Human-in-the-loop
1. 定义与边界
Human-in-the-loop(人类在环,HITL)是指在 Agent 执行过程中引入人类进行授权、审批、纠错、补充信息、评估或接管。它不是“最后让人看一眼”,而是 Agent 控制系统的一部分。
HITL 的核心目标:
- 限制高风险自主行动。
- 在不确定或冲突场景中引入人类判断。
- 收集高质量反馈用于评测和改进。
- 提供审计和责任边界。
2. 为什么重要
Agent 的能力越强,越需要 HITL:
- 模型会误解目标或忽略约束。
- 工具可能产生不可回滚副作用。
- 外部内容可能包含 prompt injection。
- 部分业务判断需要责任人确认。
- 线上失败需要人类快速接管。
LangGraph、OpenAI Agents SDK、Microsoft Copilot Studio 等现代 Agent 工具都强调中断、审批、guardrails 或人工参与能力。
3. 核心机制
HITL 的工程本质是一个可中断、可恢复的状态机。Agent 不应在等待审批时继续尝试绕过同一动作。
4. HITL 类型
| 类型 | 触发时机 | 示例 |
|---|---|---|
| Pre-approval | 动作执行前 | 发送邮件、退款、删除数据 |
| Clarification | 信息不足时 | 询问用户缺失字段 |
| Review/edit | 输出发布前 | 人修改回复草稿 |
| Exception handling | 失败或冲突时 | 工具返回政策冲突 |
| Takeover | Agent 无法继续时 | 转人工处理 |
| Feedback labeling | 任务结束后 | 标注成功/失败原因 |
5. 工程实现
审批请求应包含足够上下文:
{
"approval_id": "appr_456",
"run_id": "run_123",
"requested_action": "send_customer_email",
"risk_level": "medium",
"reason": "将向外部客户发送正式回复",
"arguments_preview": {
"to": "customer@example.com",
"subject": "关于订单 A123 的处理结果"
},
"evidence": [
{"tool": "get_order", "summary": "订单已签收"},
{"tool": "read_policy", "summary": "需先提交物流争议"}
],
"options": ["approve", "reject", "edit", "escalate"],
"expires_at": "2026-05-09T18:00:00+08:00"
}
恢复逻辑:
def handle_approval_response(run_id, approval):
run = store.load(run_id)
if approval.action == "reject":
return store.escalate(run_id, approval.reason)
if approval.action == "edit":
run.pending_action.arguments = approval.edited_arguments
policy.recheck(run.pending_action)
result = invoke_tool(run.pending_action)
return resume_agent(run, observation=result)
审批策略配置:
hitl_policy:
default: auto
rules:
- when: tool.permission == "read" and data.sensitivity <= "internal"
action: auto
- when: tool.permission == "write" and tool.reversible == true
action: confirm
- when: tool.name in ["issue_payment", "delete_record", "send_external_email"]
action: approval
approver_role: business_owner
- when: model.confidence == "low" or policy.conflict == true
action: ask_or_escalate
timeout:
approval_minutes: 30
on_timeout: escalate
6. 生产实践
| 实践 | 说明 |
|---|---|
| 风险分级 | 不同工具和参数触发不同审批策略 |
| 审批上下文 | 展示目标、证据、参数、影响、风险 |
| 可编辑审批 | 人不只批准/拒绝,还能修改参数 |
| 超时策略 | 审批超时后升级或终止 |
| 审计 | 记录审批人、时间、理由、修改内容 |
| 反馈闭环 | 人类修改和拒绝原因进入 eval dataset |
审批界面必须展示的信息
| 信息 | 为什么必须展示 |
|---|---|
| 用户目标 | 审批人判断动作是否服务于原目标 |
| 具体工具和参数 | 防止“确认”按钮掩盖真实副作用 |
| 证据摘要 | 说明 Agent 为什么请求该动作 |
| 风险等级和影响范围 | 帮助审批人判断是否需要升级 |
| 可选操作 | approve、reject、edit、escalate 语义明确 |
| 审计信息 | 记录审批人、时间、修改、理由 |
7. 常见反模式
| 反模式 | 表现 | 后果 | 修正 |
|---|---|---|---|
| 空确认框 | 只显示“是否确认” | 审批人无法判断影响 | 展示目标、证据、参数、风险 |
| 批准后不复检 | 人点批准后直接调用工具 | 权限变更或参数被篡改 | approve/edit 后重新 policy check |
| 拒绝后绕路 | Agent 改用相似工具继续执行 | 治理失效 | 拒绝写入状态,禁止同类动作 |
| 全部动作审批 | 读操作也频繁打断 | 系统不可用,人类疲劳 | 按风险分级审批 |
| 审批与 trace 脱节 | 无 run id、无 step id | 事故无法复盘 | 审批记录绑定 run/span |
| HITL 只放最后 | 中间高风险动作已执行 | 复核变成事后背书 | 在行动前中断 |
8. 评测方法
| 指标 | 说明 |
|---|---|
| Approval Precision | 触发审批的动作是否真的有风险 |
| Approval Recall | 高风险动作是否全部触发审批 |
| Human Override Rate | 人类修改或拒绝比例 |
| Escalation Quality | 升级时是否提供完整上下文 |
| Time to Approval | 审批延迟 |
| Post-Approval Incident Rate | 审批后仍发生问题的比例 |
评测数据可以来自审批日志:
{
"run_id": "run_123",
"approval_id": "appr_456",
"trigger": "send_external_email",
"agent_args": {"to": "customer@example.com", "template": "refund_dispute"},
"human_action": "edit",
"edited_fields": ["body"],
"reason": "措辞过于确定,需改成待物流确认",
"label_for_eval": "agent_overstated_policy"
}
9. 安全与治理
HITL 是安全控制,但不能替代系统权限:
- 人类批准也不能绕过资源权限。
- 审批界面要防止 prompt injection 内容伪装成系统提示。
- 审批参数要脱敏显示,敏感数据最小化。
- 高风险审批应有双人复核或额度限制。
- 审批日志应不可篡改并可审计。
10. 权威资料
- OpenAI Agents SDK, Human-in-the-loop guide: https://openai.github.io/openai-agents-python/human_in_the_loop/ (核对日期:2026-05-09)
- OpenAI Agents SDK, Guardrails: https://openai.github.io/openai-agents-python/guardrails/ (核对日期:2026-05-09)
- LangGraph human-in-the-loop / interrupts: https://docs.langchain.com/oss/python/langgraph/interrupts (核对日期:2026-05-09)
- Microsoft Copilot Studio docs: https://learn.microsoft.com/en-us/microsoft-copilot-studio/ (核对日期:2026-05-09)
- NIST AI Risk Management Framework: https://www.nist.gov/itl/ai-risk-management-framework (核对日期:2026-05-09)
- OWASP Top 10 for LLM Applications: https://owasp.org/www-project-top-10-for-large-language-model-applications/ (核对日期:2026-05-09)