5.2 审批流设计:何时打断人


5.2 审批流设计:何时打断人

本节摘要:审批是 harness 里唯一一处"机器向人举手"。打断不是免费的:打断太频,用户患上"审批疲劳",开始无脑点同意——安全形同虚设;打断太稀,风险操作蒙混过关。本节用风险 × 可逆性矩阵给四象限各定策略(低险可逆→静默放行加日志;低险不可逆→批量审批;高险可逆→单次审批;高险不可逆→逐条审批 + 二次确认),给审批请求的四要素(要做什么、改了什么、为什么、影响面——缺一项都会诱发无脑同意),讲"会话级授权"如何消解重复打断并把人的批准沉淀为 allowlist 条目,最后指出审批流的终局不是"设计完美的初始配置",而是信任累积的飞轮:每一次批准都在为下一次免打扰授权积累依据。

学习目标

阅读完本节,你应当能够:

  1. 用风险 × 可逆性矩阵为一个工具集制定四象限策略。
  2. 设计审批请求的四要素展示。
  3. 说明会话级授权与 allowlist 沉淀的机制。
  4. 识别"审批疲劳"的信号并给出调整动作。

一、打断的经济学

审批打断的两边都是真实成本:

打断一次的成本:上下文切换(人在干别的)+ 理解请求(看懂命令/diff)≈ 数十秒心智(示意) 少打一次的代价:一次风险操作未被人工复核 → 期望损失 = 风险 × 后果

设计审批流就是持续求解"打断总成本 ≈ 风险总代价"的平衡。由此推出两个可操作指标:期望打断次数(每任务几次?终端编码任务的健康区间是个位数,示意值)与无脑同意率(用户平均花在每次审批上的秒数——低于 3 秒说明审批已经沦为按回车,安全意义归零)。前者是产品体验指标,后者是安全有效性指标,两个都要观测(第 9 章的日志正好覆盖)。

💡 一个反直觉的观察:审批疲劳不是用户的问题,是设计的问题。每多一个"本可不问"的审批,用户对剩下所有审批的认真程度都会下降——审批预算是共享池,滥用一处,透支全部

二、风险 × 可逆性矩阵

可逆(有 git、有备份、可撤销) 不可逆(删数据、发出去、花掉钱)
低风险(局部、常规) 静默放行 + 日志(例:编辑已纳管文件) 批量审批(例:npm install 装依赖)
高风险(大范围、涉密、外发) 单次审批(例:改 CI 配置、切分支) 逐条审批 + 二次确认(例:删目录、发消息给外部、git push --force)

四象限的读法:可逆性决定审批的"紧迫度",风险决定审批的"粒度"。可逆且低危的操作,审批纯属打扰;不可逆且高危的操作,批量的"全部同意"按钮本身就是漏洞——只能逐条。

审批的交互形态还随产品形态变化(呼应第 2 章的三种样本):

形态 审批长什么样 设计要点
终端(Claude Code / Codex 形态) 命令行内 y/n + 选项 展示原样命令;快捷键降摩擦
聊天渠道(OpenClaw 形态) 消息里的确认卡片 / 按钮 用户可能在手机上,摘要要极短
平台 / IDE 面板 审批队列、批量勾选、策略继承 面向团队:策略由管理员预置

形态决定细节,但四象限与四要素在三种形态里全部适用——权限设计的产品无关部分,正是本书要抽离的通用原理

两个实用推论:其一,把工作区变可逆,就是在批量消灭审批——git 纳管一切可纳管的东西之后,"编辑文件"全部落入左上象限静默放行,审批预算留给真正的不可逆操作。其二,不可逆操作寻找可逆替代是 harness 的常用改造:用 clean_build(作用域受限、留清单)替代 rm -rf build,操作就从右下象限搬进了左下——第 4.3 节"拒绝要给出路"的出路,多半就是这种替代工具。

三、审批 UX:四要素

一个审批请求要让人在 5~10 秒内做出负责任的决定,必须展示四要素:

┌─ 审批请求 #3 ────────────────────────────────┐ │ 做什么:bash: pip install -r requirements.txt │ ← 原样命令/参数 │ 为什么:agent 正在搭建测试环境(任务:修复 #42)│ ← 任务语境 │ 改了什么:将安装 12 个包(新增,无覆盖) │ ← 影响 diff/预览 │ 影响面:仅本机 Python 环境;不触网络外发 │ ← 爆炸半径说明 │ [允许一次] [本会话允许] [拒绝] │ └──────────────────────────────────────────────┘

反模式清单:只给命令不给理由(用户不知道拒绝会不会毁掉任务);给一整段脚本让用户自己找风险点;"允许全部"按钮出现在不可逆操作上;深夜弹窗没有"稍后处理"选项(逼出来的同意不是同意)。审批 UI 的每一分模糊,最后都会变成一次无脑同意。

四、会话级授权与信任飞轮

四要素面板里的"本会话允许"是消解重复打断的关键机制:用户批准 pip install 一次,本会话内的同类安装不再打断。更进一步,把批准沉淀为配置:

运行期:批准 → 会话内免问(session_grants) 收尾时:harness 建议——"本会话你 3 次批准了 pytest 相关命令,是否写入 allowlist?" 用户确认 → allowlist 增加一条 argv: ["pytest", "-q"] 下一会话:该操作静默放行 + 日志

这条链路的每一环都留痕——审批日志因此是第 9 章观测体系里最有"运营味"的一路数据:它记录的不是模型行为,而是人机之间的信任如何随时间演化

这就是信任飞轮:审批日志(第 9 章观测的一部分)记录每次"问人"的结果,定期把它们转写为 allowlist 条目,重复打扰递减,审批预算越来越集中在真正的新操作上。反过来,deny 的累积同理——多次拒绝同类操作,就该在配置里立一条显式 deny,别让用户反复当同一个人肉闸门。

⚠️ 飞轮的边界:沉淀动作必须由人确认,不能自动把"批准过一次"升级为"永远允许"——尤其不可逆操作不参与沉淀(矩阵右列永远逐条)。飞轮转的是"低危高频"的重复授权,不是把人逐渐架空。

本节要点回顾

  1. 两个指标:期望打断次数(体验)与无脑同意率(安全有效性);审批设计是两者间的持续平衡。
  2. 四象限矩阵:可逆性定紧迫度、风险定粒度;把工作区变可逆、给不可逆找可逆替代,是消灭无效审批的两大工程手段。
  3. 审批四要素:做什么、为什么、改了什么、影响面;审批 UI 的每一分模糊都变成无脑同意。
  4. 信任飞轮:会话级授权 → 审批日志沉淀 → 人确认后入 allowlist;不可逆操作永不沉淀。

规则(5.1)与审批(5.2)覆盖了"已知形状"与"人愿意裁决"的部分。但危险操作会伪装:变形命令、语义伪装、组合风险——静态规则认不出,全部推给人又会压垮审批预算。下一节:多闸门护栏,让语义判断站到规则与人之间。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U