跳到主要内容

工具授权与执行沙箱

工具授权决定 Agent 可以调用哪些工具、在什么范围内、是否需要确认;执行沙箱把实际运行的代码和命令限制在隔离环境中。两者都由程序强制执行,不依赖模型遵守提示。本文讲风险分级、确认与二次校验、凭据与敏感数据处理,以及沙箱的隔离边界。

1. 面试核心​

先记住这几条,再读正文
  • 不加限制的工具调用可能导致越权访问、误删数据、数据外泄和资源滥用,而且错误动作的代价远大于错误回答。卡 · 风险分级
  • 按副作用分级:只读、可逆写入、不可逆或对外操作。低风险自动允许,中风险按策略,高风险执行前由用户确认,执行时再按当前用户权限校验一次。卡 · 确认与二次校验
  • 权限跟随用户:Agent 以发起请求的用户身份访问数据,不能用一个高权限服务账号访问一切。
  • 密钥和敏感数据不进入模型上下文:工具在程序侧注入凭据,敏感结果用引用或脱敏值在步骤间传递,日志脱敏。卡 · 凭据与敏感数据
  • 沙箱限制文件、网络、进程和资源;要用实际的越界操作验证限制生效,而不是只靠配置声明。卡 · 执行沙箱

2. 风险分级​

级别例子默认策略
只读搜索、读文件、查询订单自动允许,仍按用户数据权限过滤
可逆写入在工作区修改文件、创建草稿按会话授权,或记录后允许;保留回滚手段
不可逆或对外删除数据、付款、发邮件、发布、推送代码每次执行前确认,展示完整参数
禁止修改权限配置、读取凭据文件拒绝,不提供工具

策略按“工具 + 参数”判断,而不只看工具名:run_command("ls") 和 run_command("rm -rf /") 风险不同。编码 Agent 常用命令白名单、路径限制和模式匹配来区分。

3. 确认与二次校验​

一次高风险动作的处理流程:

  1. 生成计划:模型提出动作和参数。
  2. 预校验:程序检查参数合法、目标在允许范围内、当前用户有权限。
  3. 确认:向用户展示具体动作、参数和影响(如“删除 3 个文件:a、b、c”),等待批准、修改或拒绝。
  4. 执行期校验:真正执行时再次检查权限和状态,因为从确认到执行之间状态可能已经变化(权限被收回、目标已被修改)。这就是“执行期零信任二次校验”:不信任先前的判断,也不信任模型提供的参数。
  5. 记录:审批人、时间、实际执行的参数和结果,供审计。

确认疲劳是实际问题:每一步都弹确认,用户会不看内容直接批准。只对真正高风险的动作要求确认,其余用沙箱和回滚兜底。

4. 凭据与敏感数据​

  • 凭据不进上下文:API 密钥、数据库密码由工具实现从密钥管理服务读取并注入请求,模型只看到工具名和业务参数。即使提示被泄露或注入成功,也拿不到凭据。
  • 短期、最小范围的令牌:按用户和任务签发,设置过期时间。
  • 敏感结果的传递:一个工具的结果包含身份证号、令牌等敏感数据,需要传给下一个工具时,程序把真实值存在服务端,给模型一个引用 ID 或脱敏值,下一个工具执行时用引用取回真实值。模型和用户界面都看不到原值。
  • 日志脱敏:轨迹日志对密钥、手机号、证件号等按规则脱敏,访问日志也需要权限。
  • 数据权限:检索和查询按当前用户权限过滤,见 RAG 知识更新。

5. 执行沙箱​

运行模型生成的代码或命令时,用沙箱限制其影响范围:

维度限制
文件系统只能读写工作目录;凭据文件、系统目录不可见
网络默认禁止或白名单域名,阻止访问内网元数据地址
进程非 root 用户运行,限制可执行的程序和系统调用
资源CPU、内存、磁盘、运行时间上限
生命周期每个任务独立的临时环境,用完销毁

实现方式从轻到重:操作系统级沙箱(macOS Seatbelt、Linux 的 seccomp、namespaces、Landlock 等)、容器、gVisor 等用户态内核、微虚拟机(如 Firecracker)。隔离越强,启动越慢、成本越高。运行不可信代码的多租户服务通常需要虚拟机级隔离,本地开发工具常用操作系统级沙箱加确认。

验证:在沙箱中实际尝试读取工作区外的文件、访问被禁止的域名、超出资源限制,确认这些操作被拒绝。

工具是否可信:自研且经过评审的工具可以在沙箱中自动执行;第三方工具需要审核来源和代码、固定版本,在更严格的沙箱和网络策略下运行,定义变化时重新审核。

6 · 面试题卡片​

6.1 Agent 对工具调用不作限制,会有哪些风险?工具调用的安全控制怎么实现?​

出现公司:小红书、快手、字节跳动、拼多多、阿里云、安软

考察重点

  • 越权、误操作、外泄、资源滥用等风险。
  • 程序强制的分级授权与用户身份权限。

相关内容:风险分级、确认与二次校验。

参考回答

风险有:模型被注入或判断错误时执行删除、付款、对外发送等不可逆动作;用高权限账号访问到当前用户无权看的数据;把敏感数据发送到外部;循环调用消耗配额和费用。

安全控制由程序实现:只提供任务需要的工具;按副作用分级,只读自动允许,写入按策略,不可逆和对外动作执行前用户确认;按“工具 + 参数”判断,例如命令白名单和路径限制;以发起请求的用户身份访问数据;执行时再次校验权限;设置调用次数和费用上限;代码和命令在沙箱中运行;全部调用记录审计日志。

6.2 工具副作用分级授权和执行期二次校验如何落地?删除、覆盖等危险操作要人工审批吗?​

出现公司:药明康德、凌脉、阿里淘宝闪购

考察重点

  • 计划与执行分离的两阶段流程。
  • 确认时与执行时之间状态变化的处理,确认疲劳。

相关内容:确认与二次校验。

参考回答

把动作分成两个阶段:第一阶段模型提出动作和参数,程序预校验参数、范围和权限,按风险等级决定是否需要确认,需要时向用户展示具体动作和影响;第二阶段真正执行时不信任之前的判断和模型参数,重新校验当前用户权限和目标状态,因为两阶段之间权限或数据可能已经变化,校验失败则不执行。

删除、覆盖、付款、对外发送等不可逆操作需要审批,并记录审批人、时间和实际参数。可逆的工作区修改不必每次确认,用版本管理或快照兜底,避免频繁确认导致用户不看内容就批准。

6.3 如何控制 Agent 执行中不暴露密钥?敏感数据如何在步骤之间传递而不暴露?​

出现公司:百度、凌脉、拼多多、Deloitte

考察重点

  • 凭据在程序侧注入,不进入上下文。
  • 引用传递、脱敏与数据权限。

相关内容:凭据与敏感数据。

参考回答

密钥不放进提示和上下文:工具实现从密钥管理服务读取凭据并注入请求,模型只提供业务参数,因此提示泄露或注入成功也拿不到密钥。令牌按用户和任务签发,范围最小并设置过期时间。

步骤之间传递敏感数据时,程序把真实值保存在服务端,给模型和界面一个引用 ID 或脱敏值;下一个工具执行时由程序用引用取回真实值。日志按规则对密钥、证件号、手机号等脱敏,日志访问也要授权。内部文档检索按当前用户权限过滤,输出前检查是否包含敏感格式。

6.4 什么是 Agent 沙箱?如何判断工具是否可信,并允许它在沙箱中直接执行?​

出现公司:快手、字节跳动

考察重点

  • 文件、网络、进程、资源四类隔离与实现方式。
  • 隔离强度与成本,工具信任分级和验证。

相关内容:执行沙箱。

参考回答

Agent 沙箱是运行模型生成的代码和命令的隔离环境:文件系统只暴露工作目录,网络默认禁止或使用域名白名单并屏蔽内网元数据地址,进程以非 root 运行并限制系统调用,CPU、内存、磁盘和时间有上限,每个任务使用独立环境,结束后销毁。实现可以是操作系统级沙箱、容器、gVisor 或微虚拟机,隔离越强成本越高,多租户运行不可信代码一般用虚拟机级隔离。

工具可信度分级:自研并经过评审的工具可以在沙箱中自动执行;第三方工具审核来源和代码,固定版本,在更严格的网络和文件策略下运行,定义变化时重新审核。配置完成后用实际的越界操作测试,确认读取外部文件、访问禁止域名等确实被拒绝。

7. 参考资料​