跳到主要内容

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失败或冲突时工具返回政策冲突
TakeoverAgent 无法继续时转人工处理
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. 权威资料