
权限模型Agent 的缰绳与三种信任级别再聪明的 Agent 也可能好心办坏事。权限模型就是那根缰绳——自动放行、人工审批、直接禁止三级信任外加最小权限原则。为什么这套设计是私有化、可控、可审计 Agent 的核心卖点这节讲透。本文导航为什么需要权限这根缰绳三种信任级别放行/审批/禁止权限判定的核心规则引擎最小权限原则给 Agent 恰好够用Claude Code 的权限设计对照为什么权限是私有化部署的核心卖点小结下节预告第 23 节。六层架构第四层安全权限。前几节我们给了 Agent 双手第 21 节、眼睛和记忆第 22 节——这下它什么都能干了。但等等它什么都能干凭什么相信它不乱来这就是权限模型登场的理由。它回答一个问题Agent 想做的每个动作系统该不该放行为什么需要权限这根缰绳先看反面教材第 20 节那场删库事故的深层原因一个能执行 bash 的 Agent 配上自动放行所有命令等于把刀递给一个可能失控的使用者。不是模型天生坏而是模型可能误判把$PROJECT_DIR解析成空命令退化到危险路径模型可能被诱导用户/恶意提示词引导它执行危险操作模型可能钻牛角尖第 18 节停不下来反复执行破坏性动作。权限模型的本质就是在模型想做什么和实际让它做什么之间加一道人类可控的闸门。它不改变模型的能力它改变的是信任的边界。三种信任级别放行/审批/禁止核心设计是给每个动作打上信任级别——我把它叫三级审批模型这是整个权限体系的骨架信任级别含义适用场景自动放行trust安全操作直接执行不用问读文件、搜索、只读查询人工审批ask有风险但可能必要弹窗问用户写文件、跑命令、删除文件直接禁止deny危险操作永不执行问都不问rm -rf、格式化盘、curl|sh一张图看懂判定流程渲染错误:Mermaid 渲染失败: Parse error on line 6: ... D -- 用户拒绝 -- E[返回已拒绝给模型] B -- 直接 -----------------------^ Expecting SQE, DOUBLECIRCLEEND, PE, -), STADIUMEND, SUBROUTINEEND, PIPE, CYLINDEREND, DIAMOND_STOP, TAGEND, TRAPEND, INVTRAPEND, UNICODE_TEXT, TEXT, TAGSTART, got STR关键设计点分级不是一刀切同一个工具不同参数走不同级别。比如read_file自动放行write_file人工审批run_bash里出现rm -rf直接禁止。询问拒绝也要回填给模型用户拒绝后要把用户不同意这个操作作为 tool 结果回填第 19 节那套错误回填让模型换条路或停下而不是卡死。权限判定的核心规则引擎“放行/审批/禁止不是硬编码在代码里的 if-else 堆而是一套可配置的规则引擎。每个规则大致是工具名 参数模式→信任级别”permission_rules.py —— 权限规则引擎的骨架第23节 运行环境Python 3.12 本文件是纯规则定义演示无真实 API 调用 fromdataclassesimportdataclassclassTrustLevel:ALLOWallow# 自动放行ASKask# 人工审批DENYdeny# 直接禁止dataclassclassRule:tool:str# 匹配哪个工具如 run_bashpattern:str*# 参数匹配模式简单起见用关键字包含level:strTrustLevel.ALLOW# 一套示例规则表生产环境通常从配置/数据库读取不硬编码RULES[Rule(read_file,*,TrustLevel.ALLOW),Rule(glob,*,TrustLevel.ALLOW),Rule(grep,*,TrustLevel.ALLOW),Rule(write_file,*,TrustLevel.ASK),Rule(edit_file,*,TrustLevel.ASK),Rule(run_bash,*,TrustLevel.ASK),# 危险命令永远 deny不管模型怎么想Rule(run_bash,rm -rf,TrustLevel.DENY),Rule(run_bash,curl | sh,TrustLevel.DENY),Rule(run_bash,mkfs,TrustLevel.DENY),Rule(run_bash,sudo,TrustLevel.DENY),]defdecide(tool:str,argument:str)-TrustLevel:判定某个动作该走哪级信任。规则表按先匹配者优先。 deny ask allow危险命令优先级最高decisionTrustLevel.ALLOWforrinRULES:ifr.tooltooland(r.pattern*orr.patterninargument):decisionr.level# 越靠后越严格覆盖为更高即可returndecision# 演示print(decide(read_file,app/main.py))# allow 读文件放行print(decide(write_file,app/main.py))# ask 写文件要问print(decide(run_bash,rm -rf /tmp))# deny 危险命令禁止print(decide(run_bash,ls -la))# ask 普通命令要问运行输出allow ask deny ask这套思路的关键价值规则与代码分离规则可配存配置/数据库改权限不用改代码、改依赖。deny 永远优先危险命令无论何时都是deny即使别的规则想放行也不行事故里rm -rf就该在这儿被拦下。可审计每条规则命中都能记录决策路径第 25 节可观测性会用到。第 10 章 v0.5 会把这套规则引擎落地成完整权限守卫含命令模式匹配正则、审批 CLI 交互本节先把分级判定的模型立住。最小权限原则给 Agent 恰好够用权限设计有一条贯穿始终的铁律最小权限原则Principle of Least Privilege——只给 Agent 完成任务所必需的、最小的权限绝不多给。为什么因为每次你多给的权限都是多一份信任暴露面只让它读代码就别给写只让它碰工作区就别给全盘读只让它跑 pytest就别给sudo。落到实操我常这样践行工作最小权限代码审查read_file grep glob只读自动改代码read/write/edit在指定工作区跑测试run_bash 但限定命令白名单能只读就别写能局部就别全局能白名单就别放开——这三句话就是最小权限的通俗版。它和三级审批是同一条缰绳的两股审批决定要不要问最小权限决定给不给这个能力。Claude Code 的权限设计对照说理论不落地是耍流氓。市面上最能打的生产级 Agent 之一Claude Code它的权限设计就是这套模型的最佳实践我们对照着学Claude Code 设计对应我们模型默认read工具自动放行自动放行trust对 bash/Edit 默认弹窗询问人工审批ask提供--dangerously-skip-permissions开关全自动放行的危险模式默认关闭bash 工具内置危险命令拦截直接禁止deny路径限制在工作区最小权限 路径白名单第 10 章Claude Code 的做法核心是**“默认保守”**能自动的少、需要问的多、禁止的明确。它几乎从不用让模型全自动乱跑的默认而是把决定权牢牢握在用户手里。这正是它能被企业信任、敢对私有化代码库操作的原因——权限保守才有信任。我们学它的默认哲学ask多于allow。为什么权限是私有化部署的核心卖点最后聊商业视角呼应第 1 章引爆区的洗脑。为什么权限模型值得单独开一节因为它是私有化部署的核心卖点。客户尤其企业敢不敢把 Agent 放进他们的代码库、数据库、服务器卡点从来不是模型够不够聪明而是**“它会不会乱来、我们能不能管住”**。而三级审批 最小权限 可审计恰恰给了企业三颗定心丸可控每个危险操作都有人类把关可审计谁批准了什么、Agent 执行了什么全程留痕第 25 节可收敛最小权限把风险面压到最小。所以权限完善的 Agent 不是技术加分项是私有化项目的准入门票。你做商用 Agent第 16 章商业场景权限模型就是你报价单上安全可控这四个字的底气。小结权限是缰绳在模型想做什么和让它做什么之间加一道人类可控的闸门。三级信任自动放行安全/人工审批有风险/直接禁止危险按动作判定。规则引擎规则与代码分离deny 永远优先可配置可审计。最小权限原则能只读别写、能局部别全局、能白名单别放开。学 Claude Code 的默认保守ask 多于 allow权限保守才有信任。权限是私有化部署的准入门票可控可审计可收敛是商业 Agent 的安全卖点。下节预告缰绳勒住了单兵作战的 Agent但一个人一个 Agent忙不过来怎么办下一节进入六层架构第五层——多 Agent 编排把好几个 Agent 组织起来干活router/pipeline/swarm 三种编排拓扑以及什么时候该用多个 Agent、什么时候一个更好的决策智慧。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~