ai-engineering-from-scratch 如何为 Claude Code 自主智能体选择合适的权限模式?
2026/9/12 13:49:23 网站建设 项目流程

ai-engineering-from-scratch 如何为 Claude Code 自主智能体选择合适的权限模式?

【免费下载链接】ai-engineering-from-scratchLearn it. Build it. Ship it for others.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-from-scratch

把一个 Claude Code 自主智能体放到你的机器上跑之前,先要决定的是给它多少自由,而不是让它做什么。开源课程 ai-engineering-from-scratch 的 Phase 15 · Lesson 10(课程文档)以 Claude Code 为例给出了完整的选型方法:它的权限系统不是一个"自主/不自主"的开关,而是一架 6 级阶梯;选定模式后还要配套预算和隔离要求,再验证这套机制到底能拦住什么。

六种权限模式及适用场景

Claude Code 提供 6 种权限模式,每种都是执行速度与"逐动作确认"之间不同的取舍:

模式行为文档给出的适用场景
plan智能体先写计划,你批准整个计划,每个动作执行前都要审不熟悉的任务;生产邻近的代码;第一次在某仓库使用智能体
defaultUI 中标为 "Manual";智能体执行动作,遇到"危险"动作(shell 执行、破坏性操作、网络调用)才提示你大多数交互式编码会话
acceptEdits文件写入自动通过;shell 执行和网络调用仍然提示跨多个文件的重构
auto由一个独立的分类器模型在执行前审查每个动作,拦截超出请求范围的动作受限工作区内的长时间无人值守运行
dontAsk从不提示;未被权限规则预先允许的动作直接拒绝一次性沙箱、CI 任务、研究脚本
bypassPermissions批准一切文档明确限定"只用于你愿意整个丢弃的一次性容器内部"

模式名与 Claude Code 官方文档一致;其中 UI 会把default标为 "Manual"。

按任务类型决定模式

课程文档给出了任务类型到模式的直接映射:

  • 不熟悉的任务:从plan开始——读一份计划比回滚一次坏 run 便宜。
  • 已知的重构:acceptEdits——省掉大量确认点击。
  • 无人值守后台运行:只用auto,且只能放在你测量过爆炸半径的工作区里——文档的条件是:没有凭据、没有生产挂载、没有你没主动授权的 egress。
  • 一次性容器:dontAsk/bypassPermissions——前提是这个容器和它里面的凭据都可丢弃。

选模式不是"越自主越好"。文档把工程问题表述为:这套系统能抓住什么、抓不住什么、一个具体任务到底值得哪种模式。

无人值守运行前,先填一张 run card

对达到autodontAsk或超过 30 分钟运行时的任务,配套的 permission-mode-picker 要求你在智能体开始前产出一页 run card,包含 5 项:

  1. 任务画像:一句话说明任务做什么,一句话说明它失败时的爆炸半径;
  2. 模式建议:6 个模式之一,附一句引用爆炸半径的理由;
  3. 预算数字max_turnsmax_budget_usd与每个工具的调用上限的具体数值。对超过 1 小时的无人值守运行,美元上限应不超过"你愿意为一个无法回滚的人为错误付出的代价";
  4. 隔离要求:文件系统范围(仅项目目录 / 临时目录 / 一次性容器)、网络策略(无 egress / 仅白名单 / 全开)、凭据面(无 / scoped token / 宽权限 token)。bypassPermissionsdontAsk必须在没有挂载生产凭据的一次性容器里运行;
  5. 轨迹审计计划:运行后由谁、何时、按什么标准审查轨迹。

该 skill 定义了以下"硬性拒绝",命中任意一条就不该启动:

  • 在有未提交变更的仓库上使用bypassPermissions
  • auto没有设置预算上限;
  • 环境里有宽权限凭据(AWS、GCP、带 repo scope 的 GitHub PAT)却使用高于acceptEdits的模式;
  • 超过 1 小时的无人值守运行没有安排轨迹审计;
  • 声称 Auto Mode 分类器单独就足以应对新颖的任务分布。

此外还有三条拒绝规则:说不出失败的最坏情况时,要求先写出一句明确的最坏情况;auto工作区里能摸到生产数据库凭据时,要求先换 scoped 凭据或一次性容器;预算上限超过你愿意在坏 run 上损失的钱时,要求先降低上限。

两个预算参数的含义:max_turns是会话内总迭代次数上限,max_budget_usd是触发会话中止的美元上限,另有按工具计数的动作上限(例如每个会话不超过 N 次WebFetch调用)。

验证 auto 分类器能拦住什么、漏掉什么

课程提供一个仅依赖标准库的模拟器 code/main.py,无需安装任何第三方包,在课程目录phases/15-autonomous-systems/10-claude-code-permission-modes/下直接运行:

python3 code/main.py

脚本把一条合成轨迹(正常动作、一次 prompt injection、一个重复循环、一组经"合法通道"外泄数据的三步组合)过两级审查流水线:

  • Stage 1:廉价的关键词规则,对每个动作都跑。curlsudorm -rf /chmod 777aws s3 rb等形状在这里被标记;连续 4 个动作 tool+payload 完全相同时,第 5 个会触发重复循环检测。
  • Stage 2:较慢的多规则审查,只处理 Stage 1 标记过的动作。curl到白名单主机(registry.npmjs.orgpypi.orggithub.com)会作为 Stage 1 误报被放行;外泄形状 URL、文件系统根目录破坏性操作、权限升级被硬拦截;拿不准时升级到 HITL(人工确认)而不是批准。

输出是逐动作的判定(APPROVED (S1 fast path)BLOCKED (S2)ESCALATED to HITL等)加一行summary计数。脚本结尾固定打印一段结论:分类器是一层防护,不是完整方案——轨迹末尾那组"每步局部安全、合起来构成凭据外泄"的三步动作两个阶段都没抓住,因此预算、白名单和轨迹审计仍然必要。

需要说明:这个两级流水线是教学简化,真实auto模式背后是一个独立的分类器模型,并不存在文档化的两级契约。

这套系统能抓什么、抓不住什么

选模式时要知道auto分类器的边界,文档明确列出了两侧:

能抓住

  • 映射到已知危险动作形状的常规 prompt injection(注入在工具输入里);
  • 重复工具循环——分类器能看出动作 N+1 与动作 N 几乎相同,且已连续出现五次;
  • 在一个"只改文件"会话里明显超出范围的 shell 命令。

可能漏掉

  • 不产生任何单个被标记动作、只微调行为的微妙 prompt injection(文档指出 indirect prompt injection 不是完全可修补的漏洞);
  • 语义层面的漂移:每个单独动作都看似安全,组合出的轨迹才是有害的。分类器判断动作,不会重新推导用户意图;
  • 经合法通道的外泄:把数据写进自己的文件再git push到公开仓库,是一串各自被允许的动作,问题出在组合上。

Anthropic 把 Auto Mode 作为 research preview 发布(2026-03-24),文档措辞明确:分类器是一层,不是解决方案,用户需要把它与预算、白名单、隔离工作区和轨迹审计组合使用(对应课程的 Lesson 12–16)。auto是否可用本身受 plan、组织启用状态、模型和 provider 四重门控。

下一步

课程给出了 5 道练习,其中两道直接对应本文的选型任务:

  1. 运行code/main.py,回答:哪种合成动作类型"Stage 1 从不标记、Stage 2 总能抓住"?哪种两级都抓不住?
  2. 设计一个 24 小时无人值守运行的预算:max_turnsmax_budget_usd、每工具上限、白名单,每个数字都要给出理由。

如果你的任务命中了上面任何一条"硬性拒绝",正确的动作不是找一个更宽松的模式,而是先把爆炸半径降下来:缩小凭据、换一次性容器,或者把预算上限压到可承受的损失之内。

【免费下载链接】ai-engineering-from-scratchLearn it. Build it. Ship it for others.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-from-scratch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询