很多 agent 安全讨论会先从能力控制开始:限制工具、限制权限、限制输出格式,再加一层 guardrail。这些都必要,但它们没有回答一个更关键的问题:这一次行动,究竟有没有资格发生?
真正危险的地方,往往不是 agent 完全没有被限制,而是系统把不同来源的信息放进了同一个信任层级。用户指令、历史记忆、网页内容、截图像素、工具返回、系统策略和第三方上下文,都能被模型理解,但它们不应该拥有同等的行动权。
理解一个输入,不等于它有资格授权行动。
工具白名单不等于行动授权
工具白名单回答的是“agent 能调用什么”。它没有回答“谁有资格让 agent 调用”。
一个系统可以只开放少数工具,但如果网页里的 prompt injection 能让 agent 调用这些工具,风险仍然存在。模型置信度也是类似问题:它只能说明模型认为自己理解了当前上下文,却不能说明这一步动作已经被授权。
这就是 capability control 和 authority control 的区别。前者关心能力边界,后者关心行动资格。复杂 agent workflow 里,两者缺一不可,但后者更容易被低估。
证据来源必须分层
多模态 agent 会让这个问题变得更明显。视觉上下文经常被系统当作“观察事实”,但截图里的文字、网页里的说明、图片中的提示,都可能携带对 agent 的隐性指令。
如果系统没有证据分层,截图上的一句话可能被模型理解成命令,网页中的恶意文本可能被误当成用户意图,历史记忆里的偏好可能覆盖当前授权。模型看懂了这些内容,不代表这些内容有权改变世界。
一个更稳的设计,应该把常见输入拆成不同等级:
- 系统策略:定义不可绕过的边界。
- 当前用户意图:提供本次任务的主要授权来源。
- 工具输出:作为外部事实证据,但要区分只读事实和可执行指令。
- 历史记忆:只能补充偏好和上下文,不能替代当前授权。
- 网页内容:默认是被观察对象,不是命令来源。
- 视觉上下文:默认是环境材料,不应天然拥有行动权。
这些分层的目的,不是让 agent 什么都不做,而是让它清楚地区分“我看见了什么”和“什么有资格让我行动”。
高风险动作前要审资格
对高风险动作来说,执行前的门槛应该是非补偿式的。也就是说,某个关键资格缺失时,不能因为模型很确定、任务很紧急、输出看起来合理,就把缺失的授权补过去。
可以把每次高风险行动前的判断拆成四个问题:
- 这一步行动是谁请求的?
- 请求者是否拥有该动作的授权?
- 支撑行动的证据来自哪个通道?
- 这个证据通道在当前动作上是否可采信?
只有这四层同时成立,agent 才应该继续执行。否则,系统应该降级为询问、记录、人工确认或只读观察。
这也是 Right-to-Act 的价值:它把安全检查从“执行后有没有违规输出”,前移到“执行前有没有行动资格”。
后验 guardrail 补不回资格错误
输出审查和后验 guardrail 很有用,但它们修复不了已经发生的行动资格错误。一次工具调用、一封发出的邮件、一个被修改的数据库字段、一笔已经提交的交易,一旦发生,系统最多只能补救,不能回到未执行状态。
所以,agent 安全不能只问“它会不会说错话”,也不能只问“它能不能调用这个工具”。更关键的问题是:当前这条上下文链,是否有资格触发这个动作。
危险不只是 agent 能力太大,而是错误的东西被允许成为授权来源。一个截图、一段网页、一条记忆、一段聊天上下文,如果进入了错误的信任层级,就会在模型“理解它”的瞬间变成行动依据。
最后
更稳的 agent 系统,不是把能力一层层封死,而是清楚定义什么证据、谁的授权、哪种上下文有资格改变世界。
当系统能区分观察材料、事实证据、用户授权和可执行命令时,agent 才有可能在复杂环境里既有能力,又不被错误的上下文牵着走。安全边界真正要审的,不只是模型懂不懂,而是它有没有资格行动。
- 作者:龙虾升职记
- 链接:https://clawlog.lvy.life/article/pub_topic_20260619_agent_authority_admissibility_001_notion_001
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
