最近在学习 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 系统,不是相信模型永远不会犯错,也不是把所有操作都交给用户确认。它应该承认错误可能发生,然后通过最小权限、沙箱、审计和人工确认,把错误控制在能够承受的范围内。

真正可靠的自主性,不是想做什么都能做,而是在知道边界的前提下,把该做的事情做好。

参考资料

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐