初始上下文

产品/团队
Gumloop / AI Agent 平台
功能
Human-in-the-Loop — Agent 执行过程中暂停请求人工审批或提问的三层控制系统
版本起源
v10.0.0 "Burlington" (2026-06-16)
描述
HITL 是在 Agent 全自动执行中嵌入的人工决策节点。Agent 在调用敏感工具前暂停并展示操作意图(工具名、参数、目的),用户通过 In-App 通知、Slack DM 或聊天线程三种渠道批准或拒绝。系统提供三层控制粒度:App 级审批模式(Always allow / Ask each time / Ask for writes/deletes / Custom)、Per-Tool 独立控制(✓ / ✋ / 🚫)、参数条件级 App Rules(CEL 表达式)。此外 Agent 可通过 Ask Human 能力主动暂停展示结构化选项。被拒绝后 Agent 调整方法而非重试同一操作
解决的问题
解决全自动 Agent 在生产环境中执行敏感操作(删数据、发邮件、创建 PR)时缺乏人工监督的信任问题——让企业能够像控制员工权限一样细粒度控制 Agent 的操作边界,从"全自动黑盒"升级为"可审批、可拒绝、可纠偏"的人机协同模式
战略动机
此前 Gumloop Agent 是全自动的——给了工具就自己跑。生产环境中 Agent 删错数据、发错邮件是致命的。HITL 是 Agent 从 demo 到 production 的信任基础设施——企业可以像控制员工权限一样控制 Agent 的操作边界。版本号从 9.x 跳 10.0,HITL 是核心原因
目标用户与痛点
(1) IT 管理员——需细粒度控制 Agent 在敏感系统上的写操作权限 (2) 业务团队 Lead——希望在 Agent 执行高影响操作前有最终审批权 (3) Agent Builder——需要 Agent 在遇到歧义时主动提问而非猜测
平台范围
Web 端 + Slack。审批请求同时支持 In-App 通知卡片、Slack DM、聊天线程内。仅 Owner/Editor 可配置审批设置
关键成功指标
HITL 启用率、审批通过率、拒绝后 Agent 成功调整比例、Ask Human 触发频率、Slack 渠道连接率

1. 概览

背景

v10.0.0 之前,Gumloop 已经建好了 Agent 的所有核心能力——工具调用(MCP 生态 60+ 集成)、子代理编排(Subagents)、知识系统(Skills)、自我进化(Reflections)、对外分发(Hosted Pages、Email Inboxes)。但缺少一个关键的控制层:企业凭什么信任 Agent 自主执行?

这个缺失不是理论问题。生产环境中 Agent 的实际风险场景:

场景风险后果
Agent 发邮件给客户内容不当或收件人错误客户关系受损、合规问题
Agent 删除数据库记录删错表或条件过宽数据丢失、业务中断
Agent 创建 GitHub PR代码质量不达标CI 污染、安全漏洞
Agent 遇到歧义时猜测假设错误导致后续全错结果不可靠、需人工返工

HITL 通过三层递进控制回答信任问题。核心设计哲学:「读操作自由,写操作审批,高风险操作条件审批」。

Gumloop 由此形成完整的 Agent 控制矩阵:

┌──────────────────────────────────────────────────────────────────────┐
│                    Gumloop Agent 控制矩阵                              │
├──────────────────┬───────────────────┬───────────────────────────────┤
│  事前约束层        │  事中审批层 (HITL)  │  事后审计层                  │
│  (pre-execution)  │  (mid-execution)   │  (post-execution)            │
├──────────────────┼───────────────────┼───────────────────────────────┤
│  App Policies     │  Approval Settings │  Audit Logs                  │
│  Tool Restrictions│  Per-Tool Control  │  Activity History            │
│  Rate Limits      │  App Rules (CEL)   │  Evaluations                 │
│                   │  Ask Human         │  Reflections 分析            │
│  "规定能做什么"     │  "审批该不该做"     │  "检查做了什么"              │
└──────────────────┴───────────────────┴───────────────────────────────┘

目标

  1. 建立生产级信任:让企业可以在关键操作上要求人工审批,Agent 无法绕过
  2. 渐进式控制粒度:从简单的「全部审批」到参数条件级的「仅当 X 条件时审批」——按风险偏好选择
  3. 审批体验无摩擦:多渠道 + 键盘快捷键 + 结构化选项——审批不应成为瓶颈
  4. Agent 主动求助:不仅在「该不该做」时暂停,也能在「不知道该怎么做」时提问

2. 核心机制 [文档已验证]

三层控制体系

┌─────────────────────────────────────────────────────────────────────┐
│                  HITL 三层递进控制架构                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   Layer 1 — App 级审批模式                                           │
│   ┌───────────────────────────────────────────────────────────────┐ │
│   │  Always allow  │  Ask each time  │  Ask for writes/deletes  │ │
│   │  (默认全部放行)  │  (每次都要审批)    │  (读自由/写审批) ⭐推荐    │ │
│   │                │                  │                          │ │
│   │   Custom ──────────────────────────────────────────▶ L2      │ │
│   └───────────────────────────────────────────────────────────────┘ │
│                              │                                       │
│                              ▼                                       │
│   Layer 2 — Per-Tool 独立控制(Custom 模式)                          │
│   ┌───────────────────────────────────────────────────────────────┐ │
│   │  工具按风险分组:                                                │ │
│   │  Read-only Tools           Write/Delete Tools                 │ │
│   │  ✓ Always allow            ✋ Ask each time                   │ │
│   │  ✋ Ask each time           🚫 Never allow                    │ │
│   │  🚫 Never allow            ✓ Always allow                    │ │
│   └───────────────────────────────────────────────────────────────┘ │
│                              │                                       │
│                              ▼                                       │
│   Layer 3 — App Rules 参数条件审批(CEL 表达式)                       │
│   ┌───────────────────────────────────────────────────────────────┐ │
│   │  "收件人 ∉ 公司域 → 审批"                                       │ │
│   │  → CEL: recipient.email_domain != "mycompany.com"              │ │
│   │  "删除 >100 条 → 审批"                                         │ │
│   │  → CEL: operation == "delete" && affected_rows > 100           │ │
│   └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘

审批模式详解

Always allow — 默认。Agent 可使用该 App 的所有工具,无需审批。适合内部低风险工具

Ask each time — 每个工具调用都需要人工批准。最安全但审批成本最高

Ask for writes/deletes ⭐ 推荐默认 — 只读操作自动通过,写入/删除操作需要审批。平衡自主性和安全性——读不需要审批(低风险),写需要审批(有后果)。适合 90% 的生产场景

Custom — 进入 Layer 2,对每个工具独立设置

Per-Tool 控制

状态图标含义
Always allow无需审批,自动执行
Ask each time每次调用都需要审批
Never allow🚫完全禁止使用该工具

工具自动按风险分组:Read-only Tools / Write-Delete Tools。每组可统一设置也可单独调整。

App Rules(参数条件审批) [关键差异化]

将审批从「工具级别」细化到「参数条件级别」。Rule = CEL 表达式 + 审批要求。

实例:recipient.email_domain != "mycompany.com"(收件人不在公司域需要审批)、action == "refund" && amount > 10000(>$10K 退款需要审批)

创建方式:手动编写 CEL 表达式,或 Agent 通过 NL→CEL 翻译辅助创建。

Ask Human — Agent 主动提问

与工具审批不同,Ask Human 解决「Agent 不知道该怎么做」的问题。Agent 暂停并展示结构化问题(含预设选项),用户选择后从暂停处继续。

审批通知渠道

渠道体验适用场景
In-App 通知卡片应用内弹窗,展示完整上下文正在使用 Gumloop
Slack DM消息直接送达,可在 Slack 中 Approve/Reject异步场景、移动端
聊天线程内审批提示出现在对话中实时对话

拒绝后行为 [关键设计]

Agent 被拒后不重试同一操作,而是:(1) 确认拒绝 (2) 寻找替代路径 (3) 无法继续时向用户说明。这防止了 Agent 死循环。

3. 功能需求

模块 A — App 级审批配置

ID触发场景系统行为优先级
A1管理员为 App 选择审批模式提供四种模式。切换即时生效P0
A2选择 Ask for writes/deletes系统识别 Read/Write-Delete 分组,读自动放行、写进入审批P0
A3选择 Custom 模式展开 Per-Tool 控制面板P0

模块 B — Per-Tool 独立控制

ID触发场景系统行为优先级
B1管理员查看工具列表按风险分组展示,每个工具显示当前审批状态图标P0
B2管理员切换工具状态即时切换 ✓/✋/🚫P0
B3批量设置整组工具一键将某风险组全部工具设为同一状态P1

模块 C — App Rules

ID触发场景系统行为优先级
C1管理员手动创建 CEL 规则提供 CEL 编辑器和参数预览,保存后立即生效P1
C2Agent 通过对话创建规则NL→CEL 翻译,生成的规则进入待审核状态P2
C3工具调用触发 CEL 条件评估表达式,匹配则暂停并发送审批请求P0

模块 D — 审批请求与响应

ID触发场景系统行为优先级
D1Agent 调用需审批的工具暂停执行,生成审批卡片(工具名+意图+参数),推送至所有已配置渠道P0
D2用户点击 ApproveAgent 从暂停处继续。⌘+Enter 快速批准P0
D3用户点击 RejectAgent 确认拒绝,调整方法。不重试同一操作P0
D4审批请求超时保持在暂停状态直到响应,不自动超时通过P1

模块 E — Ask Human

ID触发场景系统行为优先级
E1Agent 遇到歧义暂停并生成结构化问题卡片(问题+预设选项+自定义输入)P0
E2用户选择/输入Agent 接收值,从暂停处继续P0

模块 F — 通知渠道与审计

ID触发场景系统行为优先级
F1用户连接 Slack审批请求自动同时发送至 Slack DMP0
F2所有审批事件记录到 Audit Logs:谁、什么时间、哪个工具、什么参数、结果P1
F3权限校验仅 Owner/Editor 可配置 HITL 设置P0

4. 用户场景

场景 1 — IT 管理员:GitHub Agent「读自由/写审批」

作为 IT 管理员,我希望为 GitHub Agent 设置「Ask for writes/deletes」——读 Issue 自由,创建仓库/删除 Issue 时我在 Slack 收到审批卡片,手机上 Approve/Reject。

用户画像:张伟,34 岁,SaaS 公司 IT 管理员。Agent 需要读 GitHub Issue/PR 做分析,但也需要创建 PR。

验收标准:

  • 审批模式设为 Ask for writes/deletes
  • Agent 读 Issue 列表 → 自动通过。Agent 创建 Repository → 暂停,Slack DM 收到审批卡片
  • 手机上点 Approve → Agent 继续。点 Reject → Agent 调整方法(标记 resolved 而非删除)
  • Audit Log 记录所有审批事件

场景 2 — 产品经理:Agent 遇到歧义时主动提问

作为产品经理,我希望 Agent 在不确定覆盖范围时主动暂停提问,给我结构化选项让我选择。

用户画像:李敏,31 岁,产品经理。让 Agent 生成竞品分析报告,Agent 不确定覆盖范围——直接竞品 3 个还是也包括间接竞品 5 个。

验收标准:

  • Agent 识别到覆盖范围有歧义,调用 Ask Human
  • 弹出卡片:「覆盖范围?A) 直接竞品 3 个 B) 直接+间接 5 个 C) 全部 8 个」
  • 李敏选 B → Agent 从暂停处继续,按 5 个竞品执行。上下文完整保持

场景 3 — 财务团队 Lead:设置条件审批规则

作为财务 Lead,我希望设置规则「报销金额 >$5,000 时需要审批」,小额自动处理,大额有我确认。

用户画像:陈丽,36 岁,财务团队 Lead。Agent 处理报销——小额自动通过,大额需确认。

验收标准:

  • 创建 App Rule:action == "approve_expense" && amount > 5000
  • $500 报销 → 自动通过。$12,000 报销 → 暂停,陈丽收到审批卡片

5. 竞争分析

竞品功能/行为优势劣势
Temporal HITL工作流级信号审批持久化引擎,适合长流程信号粒度——审批整个信号而非具体工具。无 Agent 主动提问
Cursor ApproveIDE 内文件修改 Accept/RejectDiff 视图直接审批仅限文件修改——不是通用工具审批框架。无 Slack 渠道
OpenAI Codex CLI ApprovalsCLI 命令执行前 y/n prompt极简无层级、无条件规则、无多渠道。不支持异步审批
Claude Code Permissions工具调用权限(allow/deny/ask)细粒度,可针对每个工具路径限于 CLI/IDE。无 Slack。无条件规则
Zapier ApprovalsWorkflow 中拖拽审批节点简单易用审批硬编码在流程中。Agent 不能主动请求审批

关键洞察

  1. 「Ask for writes/deletes」是战略性默认:让 HITL 从「全部审批」(太烦)和「全部自动」(太危险)的二元对立中找到第三条路。这是 Gumloop 的产品哲学声明——Agent 应该自由地「看」但谨慎地「动」
  2. Slack 异步审批覆盖移动场景:绝大多数 HITL 方案只能在操作发生的同一界面内审批。Slack DM 让用户在手机上处理审批——对长时间运行的 Agent 任务至关重要
  3. Ask Human 解决不同问题:工具审批是「把关」,Ask Human 是「求助」。两者覆盖 Agent 执行中两类完全不同的人类介入需求
  4. HITL + App Policies 构成双层安全模型:Policies 设硬护栏(Agent 无法绕过),HITL 设软检查点(Agent 可以执行但需批准)——互补不替代

6. 遥测

漏斗阶段事件名称触发条件指标/KPI优先级
采用hitl_app_mode_set为 App 设置审批模式各模式分布占比P0
采用hitl_app_rule_created创建 CEL 规则规则数/AppP1
使用hitl_approval_requested发送审批请求请求数/日P0
使用hitl_approval_approved批准请求通过率P0
使用hitl_approval_rejected拒绝请求拒绝率P0
使用hitl_ask_human_triggeredAgent 调用 Ask Human触发次数/日P1
质量hitl_rejection_adapt_success被拒后成功找到替代方案调整成功率P0
质量hitl_approval_response_time审批请求到响应的时间P50/P95 延迟P1
留存hitl_slack_connected连接 Slack 渠道Slack 连接率P1

7. 未来演进方向

阶段时间线里程碑状态
Phase 1 — 核心 HITLv10.0.0三层控制 + Per-Tool + App Rules + Ask Human + 多渠道已发布
Phase 2 — 智能审批v10.x审批风险评分、批量审批、基于历史模式的审批建议规划中
Phase 3 — 组织级审批v11.x团队审批策略模板、审批委托/升级、审批 SLA探索中
Phase 4 — 预测式干预远期规划阶段预测高风险操作并预审批、自适应审批关闭探索中

关键演进判断

  1. CEL 的用户门槛:CEL 对工程师友好但对非技术管理员太高。NL→CEL 翻译如果准确则解决此问题;不准确则信任崩塌——该审批的没审批
  2. 智能审批可能适得其反:「你通常批准此类操作」会导致不假思索点 Approve——需要比常规产品更谨慎地设计
  3. 审批委托是自然延伸:当前 HITL 是单人的。团队中审批人可能在开会/休假,委托是「单人审批→团队审批能力」的升级
📚 源文档参考

gumloop-docs_human-in-the-loop.md — Human in the Loop 官方帮助文档完整存档(docs.gumloop.com/core-concepts/human_in_the_loop.md)