我给一个 AI 助手配过权限。第一版用了最省事的方案:会话一开始,就把它可能用到的所有工具——邮箱、日历、文件目录——一次性授权。理由是反正这些操作都是它独立完成,给全了才能干活。

结果第二周就出了事:它把垃圾邮件里一个夹带的日程邀请自动加进我的日历,还替我回复了“准时参加”。问题不在它笨——它忠实地执行了任务。问题在权限系统把“读邮件”的意图和“写日历”的能力捆绑在了一起。
这件事让我意识到一个反直觉的事实:给 AI 配权限,真正的难点不是“给多少”,而是“什么时候给”。
权限的“开关思维”,在 AI 时代失效了
传统软件里的权限,是“人”的属性。管理员有 root,访客只能读。权限在登录时确定,会话结束前不变。这套模型有两个隐含假设:操作者的意图是稳定的,操作的范围是预先可知的。
AI Agent 完全不符合这两条。它的一场对话是一条长路径:前 10 分钟在总结邮件(只读),第 40 分钟可能就要起草回信(可写),第 90 分钟甚至可能触发转账(不可逆)。用静态权限,你只能把整条路径上出现过的最大权限从头开到尾——相当于一上船就签了全权委托书,船靠岸都收不回来。
OWASP 在《LLM Top 10》里把这个问题列为独立风险,名字叫 Excessive Agency(过度授权)。它没被归为“提示注入”或“配置错误”,因为它就是一次正常授权,只是授权方式出了问题。缓解建议第一条就是:Agent 只拥有完成任务所需的最小权限,高风险操作必须人工批准。OWASP LLM Top 10
“Every program and every privileged user of the system should operate using the least amount of privilege necessary to complete the job.”
—— Saltzer 和 Schroeder,1975 原文
半个世纪前的计算机安全原则,在 AI 身上反而成了最难执行的一条。
我一开始以为核心是“可信度分数”,后来发现不是
这个问题困扰了我很久。我最初的理解是:渐进式权限 = 给用户算可信度分,分高权限大,分低权限小。那段时间我几乎把精力全花在调这个分数上——身份等级加几分,历史违规减几分,还定了个 80 分的门槛。
直到我读了 Lee 和 See 在 2004 年发表的《Trust in Automation》。那篇论文讲人对自动化系统的信任,核心概念是信任校准:信任必须与系统在具体场景下的真实可靠性匹配,过度信任和信任不足都会让协作失效。Lee & See, 2004
读到这里我忽然想通:对 AI 权限来说,需要被持续校准的不是“用户这个人可不可信”,而是“当前这个动作的风险有多高”。可信度只是偏置量——它决定阈值偏松还是偏紧,权限曲线的主轴是对话上下文。
举个极端例子:一个高信任度的老用户,某天被钓鱼邮件骗了,命令 AI 删除所有文件。如果权限完全由信任分数决定,系统会乖乖执行。反过来,新用户请求“帮我看看这个文件”,完全无害,却被低分卡住。信任分数既挡不住老用户的马失前蹄,也解决不了新用户被误伤。想通这一点,我把重心从“算用户的分”挪到了“算操作的风险”上。
落地时真正在调的,是四个旋钮
把渐进式权限拆开看,由四个机制共同驱动。
- 能力门控(capability gating)
- 把所有工具按副作用大小排序:只读 → 局部写 → 全局写 → 执行外部动作。Agent 从最低档起步,只有当任务确实需要更高档位时才临时升级,用完即回落。
- 意图锁定(intent lock)
- 升级任何权限前,Agent 必须先复述它理解的任务,等用户明确确认。这条确认记录随后就是判断行为偏差的基准线——所有偏离这条线的行为都属于可疑。
- 风险触发(risk trigger)
- 对不可逆操作(删除、转账、对外发送消息),无论对话到哪个阶段、用户多可信,一律强制进入人工审批。这是绕不过去的保险丝。
- 信任偏置(trust bias)
- 用户的身份级别、会话历史、异常行为检测,作为权重微调上面三个机制。企业 SSO 用户更容易通过意图锁定;行为模式突变的会话会被自动降权。
这四个旋钮的目标,是在同一个用户、同一场对话里让权限随时间流动。如果你画一条权限曲线,它应该像心电图一样起伏,而不是一条直线。
把策略写进 Agent 的推理循环,而不是挂在外面
渐进式权限在工程上长什么样?核心是一段逐条评估的策略描述:
policy:
# 阶段一:意图尚未确认,只给只读
if stage == exploratory:
tools: [read_only, search]
approval: none
# 阶段二:意图已锁定,用户身份 >= L2
elif stage == committed and trust.level >= L2:
tools: [read, write_scoped, send_internal]
approval: single_confirm
# 阶段三:不可逆操作,无论何时都拦下
elif action.irreversible:
tools: [blocked]
approval: dual_confirm
# 全局规则:行为偏离已确认的意图,立即降权
if deviation_detected(context, declared_intent):
revoke: [write_scoped, send_internal]
escalate_to_human: true
注意最后一条——它不按阶段触发,而按“偏差”触发。这是与传统权限最本质的区别:传统权限只回答“能不能”,渐进式还要回答“现在这个时刻该不该”。Agent 每执行一步,都把当前动作与用户确认过的意图对比,一旦偏离立刻降权并上报。
这也是为什么这套机制必须长在 Agent 的推理循环里,而不是做成外置拦截器。外部拦截器只能看到“调用了哪个工具”,看不到“这次调用在语境中的意图是什么”。决策必须发生在模型生成动作的瞬间,授权才跟得上任务。
Anthropic 的 Agent 安全指南也是同一套打法:最小权限、隔离环境、动作限流、高风险操作人工审批。Anthropic 工程博客这说明渐进式授权已经是沉淀到一线工程实践的模式。
一张表说清它跟传统权限的差别
| 维度 | 静态权限(角色/ACL) | 渐进式权限 |
|---|---|---|
| 授权时机 | 会话开始时一次性确定 | 随对话阶段与单次操作动态调整 |
| 授权粒度 | 角色或资源,较粗 | 单次操作,较细 |
| 风险应对 | 按最低风险场景统一设限 | 按操作不可逆程度分级审批 |
| 收回机制 | 几乎不收回 | 检测到意图偏离立即降权 |
| 审计重点 | 谁做了什么 | 为什么在那一刻被允许 |
“为什么在那一刻被允许”是这套方案的灵魂。传统审计查的是人的身份,渐进式审计查的是决策过程——而决策过程恰恰是 AI 安全里最难追责、也最需要透明的地方。
三个最常见的误解
这就是给 AI 分级,比如 L1 只读、L2 可写、L3 可执行?
不完全是。分级是实现手段,目标是让权限在同一场对话里随上下文波动。Agent 不会固定待在某一个级别,而是每时每刻在不同级别间移动。分的不是“等级”,而是“时机”。
用户可信度在工程上到底怎么算?
实践中通常分三层:身份层(匿名/邮箱/手机号/企业 SSO)、历史行为层(任务类型分布、历史违规)、实时层(当前会话的请求是否与用户风格一致)。这三层汇总后不直接决定权限,而是调整前面四个旋钮的阈值。有一件事是明确的:不可逆操作的双重审批,任何信任分数都绕不过去。
提示注入一出,这套东西不就全废了?
提示注入确实能骗过模型的意图判断。Greshake 等人在 2023 年就演示过如何用一段藏在网页里的文本,让集成应用执行恶意操作。Greshake et al., 2023但渐进式权限的意义在于缩小爆炸半径:恶意指令最多在模型被劫持后的有限窗口内造成一次伤害,而不是在会话一开始就拥有全部权限。它的目标不是“防注入”,而是“注入发生时损失可控”。
它拦得住什么,拦不住什么
到这里,我应该把边界画清楚。渐进式权限不是银弹,它有三个过不去的坎。
第一个是冷启动。新用户没有行为历史,信任偏置只能取默认值,系统为了安全只能倾向于低估。结果就是新手做什么都要确认,确认多了用户就换产品了。
第二个是策略刚性。阶段切得越细,策略越精准,也越容易误伤合法的长任务。一个持续读写几十个文件的调研任务,会被“每次权限升级都要确认”卡得寸步难行。我见过不少团队最后把策略调得越来越松,退化成了一纸空文。
第三个是最根本的:如果权限决策由 AI 自己做出,那么劫持了 AI 的提示注入,就等于劫持了权限系统。渐进式控制限制的是单次爆炸的规模,不能阻止攻击者在高权限阶段持续作恶。要根治,必须把关键决策从模型的“直觉”里剥离出来,交给形式化的策略引擎——但那样又会失去这份灵活性。
所以我的判断是:渐进式权限是 Agent 时代的必要不充分条件。它让“多给权限”这件事变得不那么危险,但“安全”还需要人在环路、外部策略引擎和攻击检测一起兜底。未来两三年,它会从论文走进每个企业级 Agent 产品的默认配置——到那时,它大概已经有了新名字,比如“上下文感知授权”,或者别的什么。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/802.html