Aklman · Library

19 / 第十九章

Capstone · 把企业级 agent 交给编码 agent 去搭.

全书的收束:一张参考架构图、一份分层规格、一段能直接交给 Cursor 或 Claude Code 的 kickoff prompt —— 让「vibe 出一个企业级 agent」变成带验收标准的工程,而不是口号。


全书到这里,你手里有一个能跑的研究助手,和八根支柱的判断力:身份鉴权、带权限的检索、对抗性安全、治理审计、常设评测、失败工程、控制平面、多租户。这一章把它们收成一个可交付的东西 —— 一张参考架构图、一份分层规格、和一段能直接交给 Cursor 或 Claude Code 去实现的 kickoff prompt。目标很具体:让「vibe 出一个完整企业级 agent」变成一件带验收标准、能验证的工程,而不是一句口号。 心脏没变。全书第一章那句话在这里第三次兑现:agent 是 LLM 在循环里用工具、读反馈、定下一步;其余都是挂在这个循环上的层。4注 4OpenAI ·「A Practical Guide to Building Agents」(2025-04)—— 单 agent 是一个 run loop,跑到触发退出条件为止;护栏是分层防御。capstone 的参考架构就是把这个 run loop 放进控制平面的中心,各层挂在四周。企业级不是换一个更聪明的心脏,是在同一个循环外面,一层一层把「可信、规模化、在别人数据上、留得下审计」搭起来。所以 capstone 不是又一个 demo,是把八根支柱收进一个连贯的控制平面 —— 而 Anthropic 那条老规矩照样管用:每一层都得挣到自己的位置,别为了「企业级」堆没被证明值得的复杂度。1注 1Anthropic ·「Building Effective Agents」(2024-12-19)—— 基本积木是 augmented LLM;建议先找最简单的方案,只在复杂度确实改善结果时才加。capstone 把八根支柱收进一个连贯工程,靠的还是这句话:每一层都得挣到自己的位置。

I

参考架构:一个循环,套在控制平面里.

先看全景。中间还是第二章那个 while 循环,控制平面的七层从上到下把它包住,每个行动进出都要穿过。八根支柱不是八个模块,是这张图上的位置。
   用户 / 上游系统
        │  请求 + 委托(替谁干)

  ┌─────────────────── 控制平面(每个动作穿过)───────────────────┐
  │ ① 身份     workload identity + 委托(act) + 每租户凭据      │ ← 身份章
  │ ② 运行时    沙箱 · 一次性工作区 · 多租户数据隔离            │ ← ch7 + 多租户
  │ ③ 上下文    带权限的检索(先过滤再检索) · 上下文工程 · 缓存 │ ← ch4
  │ ④ 网关     model gateway(换模型不改工作流) · 成本 · 限速  │ ← ch11 + FinOps
  │            ┌──────────────────────────────────────┐      │
  │            │   核心循环(ch2):model → 看 stop →     │      │
  │            │   工具·并行(ch3) → 观察回灌 → 直到完成 │      │
  │            │   · 推理/规划(ch5) · 记忆(ch4)         │      │
  │            └──────────────────────────────────────┘      │
  │ ⑤ 工具     scope 鉴权 · 白名单 · 污点/出网 · 人闸         │ ← 身份+对抗+ch9
  │ ⑥ 评测/追踪 回归门禁(golden set) · trace · 审计链          │ ← ch10 + 治理
  │ ⑦ 审批/降级 熔断 · 预算硬闸 · 模型 fallback · 急停         │ ← ch11 + 治理
  └───────────────────────────┬───────────────────────────────┘
        持久执行(可恢复·幂等·可重放) ← ch11 · 失败工程


   结论 + 审计轨迹 + cost-of-pass

企业级研究助手的参考架构 —— 循环居中,控制平面环绕

读这张图的方法:从任意一个动作出发,它必须自上而下穿过每一层,任何一层都能拦。一个被网页注入劫持、想把密钥 fetch 出去的动作,会在 ⑤ 撞上出网白名单(对抗章)、或因会话被污点标记而撞上人闸;一个跑飞的循环会在 ⑦ 撞上预算硬闸(第十一章);一次改动让成功率掉了,会在 ⑥ 的回归门禁(第十章)被挡在上线之前。八根支柱在这张图上各就各位 —— 缺哪一层,就是那个方向没有拦截。

II

分层规格:每一层的输入、契约、不做会怎样.

架构图给形状,规格给契约。下面把每一层写成三件事:它拿什么、保证什么、不做会怎样 —— 这正是能交给编码 agent 的东西:一层一个可验收的目标。
① 身份与委托
拿:调用者 + 替谁干。保证:agent 有独立身份、token 短命且只降权、密钥不进上下文。不做:无法归因、爆炸半径 = 你的全部权限(身份章 · RFC 8693)。
② 运行时与隔离
拿:要执行的不可信代码/动作。保证:沙箱、一次性工作区、租户间数据不串。不做:一次注入拿下整台机器、租户 A 读到租户 B(ch7 · 多租户)。
③ 上下文与检索
拿:任务 + 可用知识。保证:先按权限过滤再检索、上下文有预算、缓存稳定前缀。不做:后置过滤经命中数泄露、context rot 让它变笨(ch4)。
④ 网关与成本
拿:模型请求。保证:换模型不改工作流、按成本/复杂度路由、每请求可计价。不做:绑死一家、成本不可见(ch11 · FinOps)。
⑤ 工具与护栏
拿:模型要调的工具。保证:scope 鉴权、白名单、污点后升级人闸、出网白名单。不做:confused deputy 借你的权限外发(身份+对抗+ch9)。
⑥ 评测与追踪
拿:每一步 + 每次改动。保证:golden set 回归门禁、trace 可 debug、审计链不可篡改。不做:你以为 95% 其实 70%、改坏了没人知道(ch10 · 治理)。
⑦ 审批与降级
拿:高风险/超预算/失败信号。保证:预算硬闸、熔断、模型 fallback、一键急停。不做:一个循环烧穿账单、坏模型上线拉不回(ch11 · 治理)。
持久执行
拿:长任务的状态。保证:可恢复、幂等、可重放。不做:一崩全白跑、恢复时重复下单(ch11 · 失败工程)。
这份规格的用法有两种。一是审计你现有的 agent:逐层问「这一层我有没有、保证得住吗」,缺的那几层就是你的差距清单。二是当作下一节 kickoff prompt 的骨架 —— 每一层的「保证」就是一条验收标准。

III

Kickoff Prompt:交给编码 agent 去 vibe.

「vibe 出一个企业级 agent」不是一句口号,前提是你交出去的不是「帮我做个企业级 agent」这种许愿,而是一份带验收标准的规格。编码 agent(Cursor / Claude Code / Codex)最强的场景是有客观对错信号的活 —— 所以 kickoff prompt 的关键,是把上一节每层的「保证」写成它能自己跑的检查。 Claude Code 的核心 best practice 就一句:给它一个它能自己跑的检查(测试、build、linter),循环就能自己闭合 —— 写 → 跑检查 → 读结果 → 改,直到过。2注 2Anthropic 文档 · Claude Code best practices —— 核心一句「给 Claude 一个它能自己跑的检查」(测试/build/linter/截图)让循环自己闭合;Explore → Plan → Code → Commit。capstone 的 kickoff prompt 正是把验收标准写成「它能自己跑的检查」,让 vibe-code 有客观的对错信号。截至 2026-05。下面这份 prompt 就是照这个来的:它给编码 agent 一个基线(本书的 research_agent 工程)、一份分层任务、和一组必须变绿的验收测试。把它整段贴给 Cursor 或 Claude Code:
提示词Cursor / Claude Code / Codex
把基线工程 <research_agent> 升级成一个企业级 agent。基线已实现:循环、工具+并行、记忆、沙箱、护栏、trace、预算闸,以及企业四格的教学骨架(authz / 污点+出网 / 审计+急停)。

分层实现下面每一层,每层配一个可自动跑的测试,全部变绿才算完成:

1) 身份:把 authz.py 的教学版 TokenBroker 换成一次真实的 OAuth 2.0 token exchange(RFC 8693),token 短命、只降权、带 act 声明。测试:降权的 Principal 调受限工具被拒。
2) 运行时:把沙箱从 subprocess 换成容器隔离(<容器方案>),无网络、只读根、workspace 可写。测试:一段试图读 ~/.ssh 并外发的代码被挡。
3) 上下文:把关键词 RAG 换成「先按 <权限模型> 过滤、再检索」的管线。测试:租户 A 的查询检索不到租户 B 的文档。
4) 网关:在模型层前加一个 model gateway,支持按 <路由规则> 换模型、记每请求成本。测试:换模型时工作流代码零改动。
5) 工具:把污点闸和出网白名单接到你真实的高风险工具上。测试:会话读过不可信内容后,动手工具强制过人闸。
6) 评测:建一个 >=20 条的 golden set + CI 回归门禁,成功率下降就挡住合并。测试:注入一个会降低成功率的改动,CI 变红。
7) 审批/降级:预算硬闸 + 模型 fallback + 文件急停,全部可在不重启的情况下触发。测试:touch 急停文件后,下一步 0 执行且进审计。
持久执行:把内存态换成可持久化的状态,支持崩溃后从断点恢复、动手动作幂等。测试:跑到一半 kill 进程,重启后从断点续、不重复已完成的动手步。

约束:
- 每层实现前先给出取舍(为什么这个方案),再写代码。
- 沿用基线的双档设计:不配置时行为等同基线,配置后才启用企业档。
- 每层的验收测试进 CI;不许为了过测试写投机代码(reward hacking)。
- 对照 OWASP Agentic Top 10 自查:ASI01 目标劫持 / ASI02 工具滥用 / ASI03 身份滥用 / ASI05 意外代码执行 / ASI06 记忆投毒 / ASI10 失控 agent 各有哪一层在防,写进 README。
(把 <尖括号> 换成你的真实选择,例如:)
<容器方案> = gVisor(比 Docker 强一档,跑不可信代码)
<权限模型> = 每文档的 tenant_id + ACL 标签,检索前先过滤
<路由规则> = 简单任务走便宜模型、复杂任务走旗舰,按 cost-of-pass 决定
—— 填完这三个,上面整段就能直接交出去。
为什么这份 prompt 能真搭出企业级 agent,而不是又一个 demo?因为它交出去的不是愿望,是八根支柱各自的验收标准 —— 每一条都能自动跑、会给对错。编码 agent 在这种有客观信号的活上最靠谱:它写完一层,测试告诉它过没过,不过就自己改。你要做的是三件事:填掉上面高亮的三个占位符(把取舍变成你的真实选择)、盯着它别为过测试写投机代码(第十四章的 reward hacking)、以及在它自查 OWASP 那一步核对每条威胁真有一层在防。3注 3OWASP · Top 10 for Agentic Applications 2026 —— capstone 的验收清单直接对着这十条:ASI01 Agent Goal Hijack、ASI02 Tool Misuse and Exploitation、ASI03 Identity and Privilege Abuse、ASI05 Unexpected Code Execution、ASI06 Memory & Context Poisoning、ASI10 Rogue Agents 等。条目名以官方 PDF 目录为准。这就是「vibe 出企业级 agent」的实际样子 —— 不是一句话许愿,是一份带刻度的规格加一个会自己闭环的编码 agent。 动手 · 真交出去一次:
01

填掉三个尖括号,选一层先做

把三个占位符(容器方案 / 权限模型 / 路由规则)换成你的真实取舍,然后只让编码 agent 先做第 5 层(污点+出网接到真实工具)—— 它是基线里已有骨架、最快看到绿的一层。
02

盯它的验收测试,别让它作弊

看它写的测试是不是真在验「保证」,还是在验一个它自己能轻松满足的空壳 —— 那一步就是第十四章说的、客观信号保不了你的地方。
03

让它写 OWASP 自查表,你来核对

让编码 agent 产出「ASI0x 由哪一层防」的表,你逐条核对:有没有哪条威胁其实没有任何一层在拦。核对完,你手里就是一个能对着清单交代自己的企业级 agent。

心脏还是第二章那个循环, 企业级是你在它外面搭起的每一层。.

The heart is still chapter 2's loop; enterprise-grade is every layer you build around it..

Aklman Library

讨论

讨论.

评论区初始化中…