Skip to content

E11 · Human-in-the-Loop 节点设计

企业 Agent 只要开始“替用户做事”,就必须面对一个问题:

哪些步骤可以自动执行,哪些步骤必须停下来问人?

Human-in-the-Loop 通常被理解成“弹一个确认框”。但在企业 Agent 里,它不是 UI 细节,而是执行图里的控制节点。

它同时承担三件事:

  • 暂停:让 Agent 在高风险动作前停住;
  • 确认:让用户明确知道即将发生什么;
  • 恢复:用户确认后,Agent 能接着原计划继续执行。

什么时候必须进入 HITL

IMS Copilot 可以先按风险划分:

动作类型是否需要 HITL示例
只读查询通常不需要查年假余额
操作引导不需要告诉用户去哪里申请
生成草稿视情况需要生成请假申请草稿
写入业务系统必须需要提交请假、撤回申请
影响他人的动作必须需要审批、驳回、分配任务

判断标准很简单:如果动作会改变企业系统状态,或者影响其他人的流程,就应该进入 HITL。

确认节点要展示什么

一个好的确认节点,不是问:

是否确认?

这太空了。

它应该展示完整的操作摘要:

信息作用
动作用户确认要做什么
对象影响哪条记录、哪个流程、哪个人
关键字段日期、金额、类型、原因等
后果提交后进入谁审批、是否可撤回
数据来源哪些信息由系统查询得到,哪些由用户输入

例如请假提交前,IMS Copilot 应该展示:

将为你提交 2026 年 5 月 20 日到 5 月 22 日的年假申请,共 3 天。系统已确认你当前年假余额足够。提交后会进入直属主管审批。确认提交吗?

这句话不是文案优化,而是风险控制。

HITL 是状态,不是一轮对话

确认节点必须能持久化。

用户可能不是马上回复,也可能刷新页面、切换设备,甚至半小时后才点确认。

所以系统需要保存一个 pending action:

ts
type PendingHumanAction = {
  id: string
  sessionId: string
  userId: string
  actionType: 'submit_leave' | 'approve_request' | 'cancel_workflow'
  summary: string
  payload: Record<string, string>
  riskLevel: 'confirm_required'
  expiresAt: string
  status: 'waiting' | 'confirmed' | 'cancelled' | 'expired'
}

用户确认后,Agent 不是重新理解一次自然语言,而是恢复这个 pending action。

执行图里的暂停点

可以把 HITL 放在执行图里:

这张图里,HITL 的位置非常关键:它在“草稿生成后、真实写入前”。

太早确认,用户不知道确认什么。

太晚确认,系统可能已经写入了。

这一篇的结论

Human-in-the-Loop 不是“让用户参与一下”。

它是企业 Agent 的安全阀:

  • 高风险动作前暂停;
  • 展示足够清楚的操作摘要;
  • 保存可恢复状态;
  • 用户确认后继续原计划;
  • 全程写入审计链路。

IMS Copilot 只有把 HITL 设计成执行节点,而不是 UI 弹窗,才能安全地从操作引导走向流程自动化。