跳到主要内容

别把钥匙全交出去 — 工具使用与代理的边界

这一章讲三件事: 为什么「全权放手」是这个行业最普遍的坑; 职责怎么拆、权限怎么从零开起;以及 ALARA 框架——一套把「工具范围」 写进项目结构的做法,连测试数据都齐了。 读完你能回答:该给 agent 接几个工具、各带多少权限,怎么定?

1. 这一章讲什么

前一章管「agent 做的动作要不要人点头」。这一章往前退一步:agent 手里有哪些 工具、每个工具带多少权限,在装配时就该定好。

书里的观察从人开始:最常见的坑不在技术里,在人的冲动里——从非开发者到最硬核 的计算机科学家,拿到 agent 都想「给它全部权限,让它自己发挥」。作者把这评为 他日常看到的头号安全坑,并给了一个心理学解释:AI 辅助开发的多巴胺奖励 (随手一投喂、马上涌出一堆可筛的输出,偶尔还有金子)让我们停在高层的浅层工作, 把真正要下深功夫的事——在 AI 系统之外把墙砌对——给绕过去了; 更糟的形态是在 prompt 层和模型层放「假控制」糊弄自己1

2. 顶层全景

错误路线: 正确路线:

任务 ──→ 一个大而全的 agent 任务 ──→ 拆成单职责小 agent
│ │
全部工具、全部权限 每个部件:单一职责 → 单一身份
│ → 恰好够用的最小权限
一个洞 = 全部资产 │
模型只做「决定」,执行交给
已知的确定性工具(带权限边界的)

图说:左边的架构里,权限问题没有解决的地址——所有能力长在同一具身体上。
右边把「能干什么」按职责切开,每个切口都是一个可审计的权限边界。

3. 核心原理

3.1 分离职责:agentic 的部分越小越好

书里的头号设计建议:让 agentic 部件尽可能小、尽可能聚焦——聚焦到一件事。 作者把它类比 Linux 哲学的 KISS(keep it super simple,越简单越好): 一个模型或工具越聚焦于单一活动,表现越好,而且越容易套上单一身份、 再把最小权限原则(04 章)压上去2

微服务世界有一条配套的姊妹原则直接可以搬:职责分离(separation of duties)—— 一个工具若要干另一件大事,更好的做法是拆成两个工具,显式管理它们之间的权限; 这强制了分仓(compartmentalization,把资产隔成互不连通的舱室),把失效或漏洞 的影响范围锁小3

书里的反面教材是 Anthropic 的自动售货机 agent 项目:Claudius (2025 年 Anthropic 的「Project Vend」实验里经营办公室零食柜的 agent,此背景来自 通用知识)多次被用户占便宜——作者写,几轮下来,Anthropic 给它加了一层抽象 (书中记作 SeeMoreCash)来管它的商业决策,让它用 agent 相互看守、把任务 切成更窄的聚焦小块4

作者还嫌这层抽象不够狠,给出了更「工程」的版本:很多 agent 任务根本该自动化掉—— 比如只允许 agent 调预先认证好的 API(价格、库存都是接口返回,不是模型嘴说的), 或者给自助结账写死限价:模型想把价格改到进货价以下?系统直接拒绝,除非人来放行4。 注意这个思路的方向:把「模型的决定」降级成「在硬边界内选择」

3.2 研究者的快捷方式:先锁死,再逐个开

从零设计一套正好的权限很难,书里给了个务实的起步姿势:先全部锁死, 然后按需要逐项打开5

这个次序天然对齐几个老原则:默认就是 fail-closed(05 章:失败即关闭—— 没开的权限在,故障时不会多出能力);权限是迭代着加的,每加一项都被迫 想清楚一次6。书里列了渐近开权限逼你回答的四个问题6:

逐项开权限逼你看清的事
每个权限到底放行了什么、把功能扩到了哪
工具与工具之间的边界画在哪
每个控制是否匹配用途、有没有默认暴露
每个动作都被单独评估过,而不是打包放行

代价书里也直说:权限会随时间累积、变得难追踪——所以这个姿势适合小项目起步, 配上定期复审(03 章的衰减教训在这里接上)6。 要从零就正经设计,书里给的三字诀是:default-deny(默认全拒)→ incremental enablement(按需增量放开)→ continuous auditing(持续审计)7

3.3 ALARA:把结构写进项目骨架

上面都是姿势,书里接着给了一个有论文、有数据的框架:ALARA (As Low As Reasonably Achievable——「压到合理可及的最低」,这个词借自辐射防护领域)。 《ALARA for Agents》的核心主张:项目应该在一个结构化的项目定义里, 显式写清工具范围、上下文与权限;作者特意对比了 Anthropic 的 SKILLS (skill 文件以自由格式的 markdown 为主)——ALARA 的差异点在于对 agent 强制结构8

实证数据书里引得具体:实现为 npcsh 的系统,拿 22 个本地模型 (参数量——模型里可调数字的个数,粗略对应块头——从 0.6B 到 35B)在 115 个任务(文件操作、网页搜索、脚本、多 agent 协调) 上评测。结果三条9:

  1. 严格的工具 scoping + 模块化组织提升性能——模型越小,提升越明显;
  2. 结构化开销反而减少上下文过载与协调崩解这类失败:文件与结构给了 agent 稳定的可回锚点(08 章的 plan.md 思想,升格到项目级);
  3. 限制工具访问同时改善准确与安全:agent 被拆成带最小上下文的专职角色后, 可扩展性与 agent 间协作反而更好——比造巨型单体 agent 强。

ALARA 的项目骨架(书里给了完整目录树,精简转录):

my-agent-project/
├── context/ main.yaml(顶层定义:orchestrator、团队)、各子团队 yaml
├── agents/ researcher.yaml / writer.yaml / reviewer.yaml / orchestrator.yaml
├── tools/
│ ├── base/ python、chat、shell、web_search(基础工具,各一个 yaml)
│ ├── composite/ react(chat+python)、delegate(chat+shell)、computer_use
│ └── custom/ summarize、write_report
├── workflows/ report_pipeline.yaml、research_flow.yaml
├── data/ inputs / outputs
└── config/ models.yaml(每个 agent 的模型配置)、settings.yaml

图说:目录树即权限表——每个 agent 挂哪些工具、每个工具什么能力,
全部是看得见、可评审、可 diff 的静态文件。

书里点出这张树的设计要害:把「AI 模型调用」与「工作流、任务的实际执行」分开; 目标是避免让模型直接 shell 出去,而是调已知的、确定性的工具10

(工具这层现在有行业标准做法,补充,不在书里,依据我们的 protocol 书架: MCP(Model Context Protocol:模型连工具的通用接口标准)。

它把鉴权建立在 OAuth(给「第三方替你办事」发临时通行证的标准授权办法) 2.1 上。

规范里还有两条安全红线。第一条:人在回路(高风险动作先停下来问人)。

第二条:禁止令牌透传(把发给你的临时通行证原样转手给别人用——一旦转手, 出了事就分不清是谁干的)。 工具调用的授权本来就该按这种纪律对待。 依据: shelf=ai-protocol-reference/mcp-spec#06-authorization-and-security.md @4e67bdc2f3403a8602f72025b28ac27fe7fd4e44 事实=MCP 规定 HTTP 传输应遵循 OAuth 2.1 鉴权,安全红线含人在回路与禁止令牌透传。)

章末作者把话说透:工具、框架、指导原则全都存在,真正的挑战只有一个—— 避开那条容易的路,做出对模型操纵有韧性的系统,用带外控制11

3.4 主走查:一个双职责 agent 的拆分手术

场景:一个管小店经营的 agent,职责两条:「把货架摆上顾客想要的东西」+ 「把生意做得赚钱」。书里用这对职责引出 Claudius 的教训(两条职责天然打架: 对顾客大方 vs 对利润抠门,模型得自己拿捏分寸)4。我们动手拆 (拆分方案与数值为演示所编):

拆前(单体):
agent:全工具(库存读写、定价、下单、客服消息),全权限
身份:1 个(服务账号,什么都能干)
风险点:注入载荷只要操纵了「定价判断」,就能顺手读库存、动下单

手术第 1 刀 · 职责切分
agent-A(选品):工具 = 销售数据(只读)、货架建议(写入暂存区)
agent-B(定价):工具 = 成本表(只读)、改价接口(限幅:新价 ≥ 进货价 × 1.05)
agent-C(复核):工具 = A/B 的产出(只读)、否决接口
(C 对 A/B 相互看守——书里 Claudius 整改的方向)

手术第 2 刀 · 身份与权限对齐
3 个身份替换 1 个:A 只读数据,B 只能调限幅改价接口,
C 只能否决。任何一个被注入,它能造成损失的半径 = 它那一个舱室。

手术第 3 刀 · 把「决定」降级成「在硬边界内选」
改价接口校验:B 说改到 3.99,接口校验 3.99 ≥ 进货价 3.80 ✓ 放行;
B 说改到 3.50 → 接口拒绝,事件进日志,升级人工(09 章的阈值)。
模型不再「管钱」,只是在护栏内提建议。

结果对比(演示):
拆前:1 个身份、4 类工具、0 条硬边界
拆后:3 个身份、按需 2 类工具、2 条硬边界(限幅、暂存区)
性能预期(ALARA 数据的方向):更聚焦的职责 → 更准,不是更弱。

4. 作者的判断与证据

  • 有数据的:ALARA 的评测(22 个模型、115 个任务、性能与安全双升、小模型受益 最大)是书里引述的论文结果9;
  • 作者的经验:「全权放手是头号坑」「多巴胺绕过深工」——一线观察1; 「会再更进一步自动化」是他给 Claudius 案例的改法,属作者判断4;
  • 作者的立场:结构化可扩展性反而更好(反直觉,有论文背书)9; 「真正的挑战是纪律,不是缺工具」——全章落点11

5. 边界与局限

  • ALARA 的评测全在本地小模型(0.6B–35B)上;对前沿大模型是否同样成立, 书里没说(书里其他章节甚至暗示前沿 agent「太脱缰」,见第 12 章);
  • 「先锁死再放开」书里明说适合小项目;大项目的权限累积问题只给了 「持续审计」四个字,操作细节缺;
  • Claudius 案例书里只有几行,SeeMoreCash 这层抽象的具体机制没有展开;
  • 复合工具(composite)与自定义工具的划分标准,书里没给规则。

6. 可带走的

  1. 全权放手不是效率,是行业头号坑;「demo 惊艳」不构成权限依据;
  2. agentic 部件越小越聚焦越好:单职责 → 单身份 → 最小权限;
  3. 两件大事要拆开管:拆工具,并显式管理工具间的权限(职责分离);
  4. 给模型硬边界(限幅接口、预认证 API),把「决定」降级成「护栏内选择」;
  5. 起步姿势:先锁死,逐个开;每开一项回答四个问题(放行了什么/边界在哪/是否默认暴露/是否单独评估);
  6. 正经设计的口诀:default-deny → 增量放开 → 持续审计;
  7. ALARA 证明结构与工具限制是正和的:更准也更安全,小模型受益最大;
  8. 把模型调用与任务执行分开:模型决定,确定性工具执行;
  9. 项目结构即权限表:用可评审、可 diff 的静态文件声明 agent/工具/权限;
  10. 真正的挑战不是缺原则缺框架,是避开容易的路、把控制砌在带外。

7. 原文地图

主题原书章原文位置
全权放手是头号坑、多巴胺与浅层工作、假控制Tool Use & Agencytext/17-fm-tool-use-agency.txt:3(搜「full access」)
agentic 部件要小要聚焦、KISS、单一身份Tool Use & Agencytext/17-fm-tool-use-agency.txt:7(搜「KISS」)
双职责案例、Claudius、SeeMoreCash、硬边界改法Tool Use & Agencytext/17-fm-tool-use-agency.txt:15(搜「Claudius」)
微服务姊妹原则:职责分离、分仓Tool Use & Agencytext/17-fm-tool-use-agency.txt:19(搜「Separation of Duties」)
先锁死再放开Tool Use & Agencytext/17-fm-tool-use-agency.txt:23(搜「locked down」)
代价:权限累积;渐近开权限教的事Tool Use & Agencytext/17-fm-tool-use-agency.txt:25(搜「accumulate」)
fail-closed 对齐Tool Use & Agencytext/17-fm-tool-use-agency.txt:37(搜「fail-closed」)
default-deny 三字诀Tool Use & Agencytext/17-fm-tool-use-agency.txt:39(搜「Default-deny」)
ALARA 定义、对比 SKILLSTool Use & Agencytext/17-fm-tool-use-agency.txt:43(搜「ALARA」)
npcsh、22 模型 0.6B–35B、115 任务Tool Use & Agencytext/17-fm-tool-use-agency.txt:45(搜「115 tasks」)
结果:结构化提升性能、减失败、准确与安全双升Tool Use & Agencytext/17-fm-tool-use-agency.txt:47(搜「smaller models」)
模型调用与执行分离、确定性工具Tool Use & Agencytext/17-fm-tool-use-agency.txt:110(搜「deterministic tools」)
挑战是避开容易的路、带外控制Tool Use & Agencytext/17-fm-tool-use-agency.txt:112(搜「out-of-band controls」)

Footnotes

  1. 出处:「Tool Use & Agency」第 3 段(text/17-fm-tool-use-agency.txt:3,搜「full access」)。从非开发者到硬核计算机科学家都想给模型/agent 全权;作者评其为日常最常见的安全坑;引《Deep Work》(原文拼作 Karl Newport,通行作者名为 Cal Newport):AI 辅助的多巴胺让人停在高层浅层工作;对抗真威胁必须在 AI 系统之外砌墙;有时还把假控制放在 prompt 与模型层。 2

  2. 出处:「Tool Use & Agency」第 7 段(text/17-fm-tool-use-agency.txt:7,搜「KISS」)。设计 agentic 系统时把 agentic 部分保持小而聚焦,单任务聚焦提升性能,也更易套单一身份与最小权限。

  3. 出处:「Tool Use & Agency」第 19 段(text/17-fm-tool-use-agency.txt:19,搜「Separation of Duties」)。微服务世界的姊妹原则;工具要干另一件大事就拆开、显式管理权限;强制分仓,把失效与漏洞的范围锁小;对齐 Linux 的小而专用工具哲学。

  4. 出处:「Tool Use & Agency」第 15 段(text/17-fm-tool-use-agency.txt:15,搜「Claudius」)。Anthropic 的 Claudius 几轮被占便宜后,加抽象层(书中记作 SeeMoreCash)管商业决策,让 agent 相互看守、任务更窄;作者会更进一步:只准调预认证 API、自助结账写死限价(如不得低于进货价),越界须人工放行。 2 3 4

  5. 出处:「Tool Use & Agency」第 23 段(text/17-fm-tool-use-agency.txt:23,搜「locked down」)。研究者捷径:start locked down then pivot——从安全基线起步,按需逐项放开,防意外错配与过度授权。

  6. 出处:「Tool Use & Agency」第 25 段(text/17-fm-tool-use-agency.txt:25,搜「accumulate」)与第 27-37 段。代价:权限累积难追踪;渐近放开帮助你理解每项权限放行什么、边界在哪、控制是否默认暴露、动作是否被单独评估;此法默认 fail-closed、支持迭代设计、迫使每个动作被有意设计。 2 3

  7. 出处:「Tool Use & Agency」第 39 段(text/17-fm-tool-use-agency.txt:39,搜「Default-deny」)。从零建安全系统的框架式表达:Default-deny > incremental enablement > continuous auditing。

  8. 出处:「Tool Use & Agency」第 43 段(text/17-fm-tool-use-agency.txt:43,搜「ALARA」)。《ALARA for Agents》:As Low as Reasonably Achievable;项目在结构化定义里显式声明工具范围、上下文与权限;与 Anthropic SKILLS(以自由 markdown 为主)的差异在「对 agent 强制结构」。

  9. 出处:「Tool Use & Agency」第 45 段(text/17-fm-tool-use-agency.txt:45,搜「115 tasks」)与第 47 段(text/17-fm-tool-use-agency.txt:47,搜「smaller models」)。实现于 npcsh,22 个本地模型(0.6B–35B 参数)、115 个任务(文件操作、网页搜索、脚本、多 agent 协调);结果:严格工具 scoping 与模块化提升性能(小模型尤其)、减少上下文过载与协调崩解(文件与结构给稳定锚)、限制工具访问同时提升准确与安全(专职角色+最小上下文)、结构化反而改善可扩展性与协作。 2 3

  10. 出处:「Tool Use & Agency」第 110 段(text/17-fm-tool-use-agency.txt:110,搜「deterministic tools」)。ALARA 结构体现清晰职责分离;目标:把 AI 模型调用与工作流、任务实际执行分开;避免让模型直接 shell,改调已知的确定性工具。

  11. 出处:「Tool Use & Agency」第 112 段(text/17-fm-tool-use-agency.txt:112,搜「out-of-band controls」)。工具与框架已存在,指导原则也有;真正的挑战是避开容易的路,造出对模型操纵有韧性、以带外控制支撑的系统。 2