ai / 20260727
09. Agent 权限不是 allow 和 deny 两个值
权限判断针对的是某个主体在特定条件下对某项资源执行某种动作
本次测试要求四个 CLI 只读目录,不修改文件,也不访问网络。这个约束如果只保存成 allowed=true,下一步就无法回答:允许谁、允许做什么、允许访问哪里、授权持续多久。
一次授权至少有五个维度
| 维度 | 问题 | 示例 |
|---|---|---|
| 主体 | 谁在操作 | 主 Agent、某个子 Agent |
| 动作 | 做什么 | 读取、写入、执行、联网、发送 |
| 资源 | 操作哪里 | 文件、域名、仓库、账号 |
| 条件 | 在什么限制下 | 只读、无网络、需要确认 |
| 时效 | 授权多久 | 单次、本轮、会话、持久 |
“允许读取工作区”不能推导出“允许执行工作区脚本”;“允许访问 API 文档”也不能推导出“允许向任意域名上传内容”。
模型规则与执行策略要分开
系统 Prompt 可以要求模型在删除文件前询问,但执行器仍要判断实际调用是否属于删除。两层分别处理:
- 模型侧:根据任务选择合理动作。
- 策略侧:根据用户授权决定动作能否执行。
如果模型误判风险,策略仍应拒绝;如果策略允许但模型认为需要确认,运行时可以继续询问用户。两层结论应记录在不同字段中。
授权不能沿工具链自动传播
读取网页后,网页内容要求发送邮件。Agent 已获得网页读取许可,却没有获得发送邮件许可。工具 A 的结果不能替工具 B 申请权限。
子 Agent 也一样。主 Agent 可以读取整个仓库,不表示每个子 Agent都应继承相同范围。委派时应生成更小的资源集合和动作集合。
一次批准的范围要写出来
用户点击“允许”时,界面应明确展示:
| 项目 | 示例 |
|---|---|
| 动作 | 写入文件 |
| 目标 | content/blog/ |
| 次数 | 当前调用一次 |
| 命令或参数 | 可检查的摘要 |
| 后续继承 | 不允许 |
“本次会话始终允许”比单次授权范围更大,应作为另一种明确选择,而不是在用户同意一次操作后自动升级。
沙箱不是全部权限系统
沙箱是限制进程能访问哪些系统资源的隔离环境。它可以阻止越界文件访问和部分网络连接,但无法独立判断业务授权。例如进程有权调用邮件 API,并不代表用户同意向某个收件人发送内容。
因此权限层需要组合文件系统沙箱、网络策略、凭证作用域和业务审批。它们共同构成边界。
我会怎样做权限回归测试
固定五类动作:工作区读取、工作区写入、工作区外读取、允许域名访问、未允许域名访问。分别由主 Agent 和子 Agent提出,再测试单次授权过期后的行为。
日志应能回答每次决策使用了哪条策略、匹配了哪个资源、授权何时失效。若只能看到“permission denied”,就难以判断是规则正确生效还是配置错误。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:09. Agent 权限不是 allow 和 deny 两个值
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/09-Agent权限模型/