Agent 的能力越强,越要限制它能做什么
最近在学习 Agent 安全时,我发现自己的关注点发生了变化。
刚开始接触 Agent,我更在意它“会不会做”:能不能选择正确工具,能不能理解复杂指令,能不能独立完成一条较长的任务链。
但当 Agent 真正连接文件、数据库、邮件和审批系统后,我开始觉得,另一个问题可能更重要:即使它会做,我们是否应该允许它直接做?
一个只能回答问题的模型,判断错误时最多生成一段不准确的文字。一个拥有写入、删除和发送权限的 Agent,判断错误时却可能改变真实世界的状态。
所以,Agent 的能力越强,权限设计反而越不能随意。
Prompt 里的“不要做”,不是真正的权限控制
最容易想到的限制方式,是在系统提示词中写上:
不要删除重要文件;未经用户同意,不要发送邮件;不得访问与任务无关的数据。
这些要求当然有用,它们能帮助模型理解行为规范。但 Prompt 本质上仍然是提供给模型的文字指令,属于软约束。
面对模糊任务、间接提示注入或模型自身判断错误时,它不能替代后端鉴权。就像我们不会因为在接口文档里写了“请勿越权访问”,就省略真正的权限校验一样。
我现在更愿意把 Prompt 看作交通规则,而权限系统才是护栏。规则告诉 Agent 应该怎么走,护栏则保证它走偏以后,不会直接冲出道路。
不只看出错概率,还要看“爆炸半径”
“爆炸半径”是我在学习 Agent 隔离设计时很有感触的一个概念。它关注的不是错误会不会发生,而是错误发生后,最多能够影响多大范围。
同样一次错误操作,Agent 如果只能修改一个临时文件,影响通常可控;如果它拥有整个目录的读写权限,甚至能够访问生产数据库,后果就完全不同。
因此,评估一个 Agent 的风险,不能只问模型准确率有多高,还要问:
-
它能看到哪些数据?
-
它能调用哪些工具?
-
一次最多能修改多少资源?
-
操作能否撤销?
-
出错后是否能够及时停止?
模型能力提升,可以降低某些错误发生的概率,却不能把概率变成零。工程系统真正能做的,是把不可避免的错误限制在可承受范围内。
我更倾向于把 Agent 操作分成三档
不同操作带来的后果不同,不应该使用同一种权限策略。
| 风险等级 | 常见操作 | 建议策略 |
|---|---|---|
| 低风险 | 查询公开资料、读取非敏感数据 | 可自动执行,但保留日志和调用次数限制 |
| 中风险 | 创建草稿、修改临时文件、更新可回滚状态 | 限定资源范围,执行后展示结果并支持撤销 |
| 高风险 | 删除数据、发送消息、付款、提交审批 | 执行前确认,使用短期凭证,并记录完整审计信息 |
这里的重点并不是所有操作都弹窗确认。如果每一步都需要用户点击“允许”,人很快就会产生确认疲劳,最后反而习惯性地全部通过。
更合理的做法,是让低风险操作在边界内自动运行,把人的注意力留给真正不可逆或影响较大的步骤。
四层边界,比一句“请谨慎操作”可靠
结合近期看到的实践,我认为 Agent 权限至少需要四层保护。
1. 只暴露当前任务需要的工具
Agent 不需要使用的工具,就不应该出现在它的可选列表中。一个只负责资料总结的 Agent,没有必要同时拥有发送邮件、删除文件和修改数据库的能力。
工具越多,不只是选择难度增加,潜在攻击面也会扩大。
2. 工具内部继续执行最小权限
即使 Agent 可以调用“文件工具”,也不代表它应该读写所有路径。读取、写入和删除需要分开授权,目录范围、文件类型和单次操作数量也应该受到限制。
权限边界必须落实到工具执行层,而不是由模型自己决定“这次应该克制”。
3. 在沙箱内给予有限自主性
沙箱并不是单纯限制 Agent,反而可以让它在明确边界内更自由地工作。例如允许它修改指定工作目录,但禁止访问其他文件;允许访问特定服务,但默认关闭任意网络连接。
边界清楚以后,系统不必为每个低风险动作反复询问用户。
4. 把高风险决策留给人
Human-in-the-loop 不应该出现在所有步骤,而应该放在权限提升、不可逆操作和敏感数据访问之前。
更重要的是,确认页面不能只显示一句“是否允许”。用户应该看到 Agent 准备执行什么操作、影响哪些资源、使用什么参数,以及能否撤销。只有信息足够具体,确认才真正有意义。
权限不应该在 Agent 启动时一次性给完
我以前容易把权限理解成一个静态配置:Agent 创建时有哪些工具,之后就一直拥有哪些工具。
现在我更认同按任务和阶段动态授权。例如在信息收集阶段只提供读取权限;进入草稿生成阶段后,开放指定目录的写入权限;真正发布或提交时,再临时申请更高权限,并在操作结束后立即收回。
这类似于给 Agent 一把只能打开当前房间、并且会自动失效的钥匙,而不是把整栋楼的万能钥匙交给它。
动态权限确实会增加一些工程复杂度,但它换来的是更小的影响范围,以及更清晰的责任边界。
限制不是削弱 Agent,而是让自主性可以被信任
学习 Agent 权限设计以后,我最大的感受是:安全和能力并不一定站在对立面。
如果一个 Agent 拥有无限权限,我们反而不敢让它独立运行;当工具、资源和高风险操作都有清晰边界时,它才能在边界内部获得更多自主空间。
成熟的 Agent 系统,不是相信模型永远不会犯错,也不是把所有操作都交给用户确认。它应该承认错误可能发生,然后通过最小权限、沙箱、审计和人工确认,把错误控制在能够承受的范围内。
真正可靠的自主性,不是想做什么都能做,而是在知道边界的前提下,把该做的事情做好。
参考资料
更多推荐


所有评论(0)