九篇文章,从 8 月 1 号写到今天。如果只看第一篇和这一篇,你会发现一个有意思的对照:开篇我们说”AI 编码又快又烂”,今天我们要给”烂”画一条线——到底是哪里烂,烂到什么程度不可接受,以及怎么系统性地把这道线往前推。
系列到今天收官。我想用三件事把九篇串起来:先回顾全景,再讲 agent-skills 最特别的那块东西(三层评估框架),最后给三类读者一条能马上落地的采纳路线。
一、九篇文章的全景图
把九天的内容压成一句话:把一个高级工程师脑子里的工程纪律,拆成 AI 能直接执行的步骤和门控。
我们一起走过了六个阶段:DEFINE 把”要什么”想清楚,PLAN 把大象切成原子任务,BUILD 用垂直切片 + TDD 落地,VERIFY 调试分诊让 bug 修到根上,REVIEW 用五把尺子把关,最后 SHIP 把代码安全、可逆、可观察地送到生产。
每篇都聚焦在一个具体问题上,下面这张图把九篇文章按主题串起来:
flowchart LR
A["Day1
开篇
六阶段全景"] --> B["Day2
DEFINE
需求想清楚"]
A --> C["Day3
反合理化
堵住偷懒借口"]
B --> D["Day4
PLAN+BUILD
切片与TDD"]
C --> D
D --> E["Day5
VERIFY+REVIEW
调试与评审"]
E --> F["Day6
SHIP
CI/CD与上线"]
F --> G["Day7
多Agent安装
实战踩坑"]
F --> H["Day8
横评
三大技能库"]
G --> I["Day9
收官
从能跑到可合并"]
H --> I
I -.反馈闭环.-> A
回到那张开篇就画过的六阶段流水线。九篇文章讲的不是六个独立的步骤,而是一个闭环——SHIP 之后收集到的反馈,会重新流回 DEFINE。这正是工程实践区别于”做完就丢”的关键。
flowchart LR
D["DEFINE
想法打磨"] --> P["PLAN
任务拆解"]
P --> B["BUILD
增量实现"]
B --> V["VERIFY
调试验证"]
V --> R["REVIEW
代码评审"]
R --> S["SHIP
上线发布"]
S -.反馈与监控.-> D
V -.Tier 3 行为检查.-> B
R -.Tier 3 行为检查.-> D
最下面那两条虚线是新加的——评估反馈。这正是我要讲的第二件事:三层评估框架。它是这套流水线能”自我修正”的机制。
二、三层评估框架:agent-skills 的独特之处
我对比过三个主流的 agent 技能库(Day8 那篇横评里有详细分析),它们解决”AI 怎么写代码”的问题方式不太一样。但 agent-skills 有一件事是另外两家都没做的:用工程化的方式评估技能本身。
仓库里 evals/ 目录藏着一个三层评估框架:
| Tier | 检查内容 | 跑在哪 | 成本 |
|---|---|---|---|
| Tier 1:结构检查 | frontmatter、命名、必填章节、命令对齐 | CI(validate-skills.js、validate-commands.js) |
免费 |
| Tier 2:路由检查 | 正向 prompt 能否命中、负向 prompt 不会误命中、两个技能描述是否冲突 | CI(run-evals.js) |
免费 |
| Tier 3:行为检查 | 智能体真跑一遍技能,是否满足 expectations[] |
按需(run-evals.js --behavioral) |
烧 token |
它们之间的关系是递进的——Tier 1 过了不代表 Tier 2 过,Tier 2 过了不代表 Tier 3 过:
flowchart TB
T1["Tier 1
结构检查
SKILL.md 格式正确"] -->|通过| T2["Tier 2
路由检查
描述能命中目标 prompt"]
T2 -->|通过| T3["Tier 3
行为检查
agent 真跑符合预期"]
T1 -->|失败| Fix1["修 SKILL.md
补 frontmatter"]
T2 -->|失败| Fix2["修 description
加触发词 / 收敛范围"]
T3 -->|失败| Fix3["改 skill 工作流
或补 expectations"]
classDef tier fill:#e8f4ff,stroke:#3b82f6
class T1,T2,T3 tier
Tier 1:结构检查
这是最朴素的一层。打开任何一个 SKILL.md,它必须满足:
- YAML frontmatter 里
name小写连字符,且和目录名一致 description长度 ≤ 1024 字符,包含”做什么”+”何时用”- 包含标准章节:Overview、When to Use、Core Process、Common Rationalizations、Red Flags、Verification
- 对应的 slash 命令(如果存在)也要满足对齐规则
这一层跑在 CI 上,零成本、零 token。如果 SKILL.md 写错了,CI 直接红,根本进不了主分支。
Tier 2:路由检查
这是最巧妙的一层。
问题:技能库里 24 个技能,每个都有自己的 description。当用户说”写一个失败的测试”,模型该调用 test-driven-development 还是 debugging-and-error-recovery?判定完全靠 description 里那行文字。
agent-skills 用了一种词法近似的方法:把每个 prompt 和每个 description 都做词干提取 + TF-IDF 向量化,然后对每个 prompt 跑排序,看正向 prompt 能否把对应技能排在 top-k,负向 prompt 是否不会把它误排到第一。
1 | # CI 跑 Tier 2(确定性、零成本) |
README 里给了一个真实数字:**已签入的基线是 rank-1 命中率 86%**,CI 卡 80%。这两个数字之间的余量是有意留的——给”无关的描述改动”留缓冲,但不降到能掩盖回归。
冲突检查也很重要:两个技能 description 相似度 ≥ 75% 直接报错,≥ 50% 警告。我改一个技能的时候经常跑这条,避免”我以为只动了一个,结果另一个被抢走了”。
Tier 3:行为检查
这是最贵的一层,也是最关键的一层。
Tier 1 和 Tier 2 都只能检查”文档长什么样”和”描述能不能命中”。但真正的问题是:AI 真按 SKILL.md 跑下来,能不能产出符合预期的东西?
Tier 3 的做法是:给每个技能写一份 evals.json,里面是真实的 prompt + 一份 expectations[](可验证的预期)。然后用无头 claude 跑,把整个 trace(包含工具调用)丢给 grader 评分。
1 | # 烧 token 的 Tier 3 |
跑出来什么样子?比如 test-driven-development 的 eval:
1 | { |
这三个 expectation 都是可验证的行为,不是文风。grader 看的是 trace:有没有先写测试?实现的 diff 有没有超过必要范围?跑测试的命令有没有执行、退出码是不是 0?
更狠的是 Tier 3 还包含压力测试——专门给纪律类技能加的:时间压力(”赶时间,先跳过 SPEC”)、沉没成本(”已经写了 200 行,懒得回滚”)、权威压力(”老板说要直接上线”)。看技能流程在压力下还撑不撑得住。
三层的意义
把三层叠加起来,我们其实在解决一个根本问题:**技能库的”质量保证”**。
Tier 1 保证”格式对”——技能不是随便抄来的模板。
Tier 2 保证”用得上”——描述里有用户实际会说的词,不会被另一个技能抢走。
Tier 3 保证”真管用”——按 skill 跑出来的产物,确实是它承诺的产物。
没有这三层的技能库,是”我写了一个 SKILL.md,你信我”。有三层的技能库,是”我写了一个 SKILL.md,CI 验过 24 个 prompt 路由,5 个真跑过的 trace 评分”。这两件事的差距,就是”个人经验沉淀”和”团队可信赖基础设施”的差距。
三、AI 时代的”生产级”标准
九篇写到这里,我心里一个越来越清晰的图景浮现出来:**AI 时代真正稀缺的不是”能写出代码”,而是”能交付生产级代码”**。
什么是生产级?我们拆开看。
不只是能跑
能跑是底线。但生产级代码还要满足:
| 维度 | 含义 | 对应实践 |
|---|---|---|
| 可合并 | 评审者看完敢点 merge | 原子任务、垂直切片、五维度评审 |
| 可回滚 | 出问题时能 5 分钟内撤回 | Feature Flag、安全默认值、git stash |
| 可观察 | 出问题时能 5 分钟内定位 | 埋点、trace、日志、告警阈值 |
| 可验证 | 改完知道有没有破坏 | 测试金字塔、TDD、回归测试 |
| 可解释 | 半年后看代码知道为什么这么写 | ADR、文档、commit message |
每一行都不是新概念。但在 AI 协作场景下,它们被同时推到了一个新的量级——模型产出太快,错误也被放大了同样的倍数。
三套经典理论的拼图
我一直在想,这套体系对应到软件工程的经典理论里是什么。答案是三个东西的拼图:
测试金字塔(Mike Cohn 提出):80% 单元测试 + 少量集成 + 极少数 E2E。这是 Day4 反复强调的——test-driven-development 的核心。
DORA 指标(DORA 团队多年研究):部署频率、变更前置时间、变更失败率、事故恢复时间。这四个指标越高,团队越高效。SHIFT LEFT + FASTER IS SAFER + 可观察性 + 可回滚,对应的就是这四个指标。Day6 那篇讲 SHIP 的文章本质上就是 DORA 四个指标的具体落地。
安全左移(Shift Left Security):把安全检查从”上线前”挪到”写代码时”。security-and-hardening 技能把这条原则拆成了 dependency audit、secret scan、输入校验、auth/authz、错误信息泄露五条线。
把这三套理论拼起来,AI 编码时代的”生产级”标准可以总结成一句话:
能跑 + 能验 + 能回 + 能看 + 能护——五项都过,才算生产级。
能跑对应能跑通的最小代码;能验对应测试金字塔;能回对应 DORA 的 MTTR 和 Feature Flag;能看对应可观测性;能护对应安全左移。
工程纪律比模型能力更重要
这九篇写下来,我越来越确信一件事:决定 AI 编码质量的,不是模型能力,是工程纪律。
模型的能力每年都在涨,但跳步骤的习惯也在跟着涨。Sonnet 4 比 Sonnet 3.5 更聪明,但它”觉得这个改动太小,跳过 SPEC”的概率没有降低。模型越强,跳步骤越难被发现——因为跳完之后的结果看起来还很像样。
工程纪律做的事,是把流程变成强制。Tier 1 的 CI 检查强制 SKILL.md 不能乱写;Tier 2 的路由评估强制 description 不能漂移;Tier 3 的行为评估强制跑出来的产物必须满足预期;SKILL.md 里的反合理化表强制”我跳过 SPEC”的借口过不去。
这些”强制”才是真正的护栏。模型能力是油门,工程纪律是刹车和方向盘——只踩油门不握方向盘,开得越快越危险。
四、三条采纳路线图
理论讲完了,讲点更实际的。下面是给三类读者的具体路径。每条都假设你已经会用 Claude Code、Cursor 或者类似的 AI 工具——agent-skills 不是给完全不会写代码的人准备的。
个人开发者
如果你是一个人写项目,时间精力都有限,建议从三个技能开始:
**1. interview-me**(DEFINE)。在你拿不准需求的时候用。一个小时问清楚,比三天返工划算。
**2. test-driven-development**(BUILD)。这条最难坚持,但回报最大。学会之后你会发现 AI 写代码不再是”赌一把”,而是”一步一步有证据”。
**3. debugging-and-error-recovery**(VERIFY)。调试分诊六步法,Stop-the-Line + 分诊清单 + 防回归测试。模型最容易在调试时翻车,这条直接堵死。
三个技能配齐,日常开发的”质量下限”就有了。剩下的慢慢加,不要一次上 24 个。
小团队(2-10 人)
小团队的关键不是”每个人都会全套”,而是”团队里有共同的纪律”。建议引入三个技能:
**1. spec-driven-development**(DEFINE)。让 PR description 不再是”实现了 XX”,而是”实现了 SPEC-123 的第 4 项”。
**2. planning-and-task-breakdown**(PLAN)。任务拆成原子任务,验收标准写到 checklist。这一步解决了”代码 review 才发现需求理解不一致”的经典扯皮。
**3. code-review-and-quality**(REVIEW)。五维度评审作为 review checklist 的基础。code-reviewer、test-engineer、security-auditor 三个 persona 在 review 时直接 fan out。
三个技能跑三个月,团队的 PR 通过率、bug 率、事故恢复时间都会有可观测的变化。
开源维护者
维护开源项目最大的挑战是外部贡献者的质量参差。建议这样引入:
第一步:全量引入。 把 24 个技能作为仓库的 AGENTS.md + CLAUDE.md 的参考骨架。AGENTS.md 是仓库内已经写好的范例,可以直接参考。
第二步:改造 AGENTS.md。 把仓库已有的 AGENTS.md 改写成”项目专版”——比如把 spec-driven-development 里的 SPEC 模板换成你项目的 issue 模板,把 TDD 的”测试命令”换成你项目的测试命令。
第三步:加 CI 校验。 把 Tier 1 的 validate-skills.js 移植到你的 CI 里,跑一次结构检查。如果你的项目引入了多技能编排,把 Tier 2 的路由评估也接进来。
这三步做完,外部贡献者的 PR 会从”看运气”变成”至少结构上过得去”。
五、本博客的下一步
九篇系列文章到这里就结束了,但 agent-skills 的实践在这个博客才刚刚开始。
我自己已经在做的几件事,先汇报一下进度。
1. 在本博客(Hexo)部署流程中实测 agent-skills。 这个博客的 deploy.sh 脚本就是天然的试验田——它是一个 shell 脚本,逻辑清晰但缺乏单元测试,正好适合用 TDD 改造。下个月的文章里我会专门讲这次改造的过程。
2. 把 deploy.sh 等脚本用 skill 改造。 计划是用 test-driven-development 给 deploy.sh 写一套单元测试,用 debugging-and-error-recovery 重构错误处理,用 observability-and-instrumentation 加埋点。改造完以后 deploy 流程会变成”可合并、可回滚、可观察”——对应今天讲的”生产级”五项里的三项。
3. 后续文章预告。 我在计划两个新系列:
- agent-skills 实战系列:拿真实的项目(包括这个博客)做改造,把”怎么用”讲透。预计 9 月开始。
- AI 编码的工程纪律系列:跳出 agent-skills 的范畴,把测试金字塔、DORA、安全左移这些经典理论在 AI 时代重新解构一遍。
如果你也在用 agent-skills,或者有想看的具体话题,欢迎在评论区或者 GitHub 提。
写在最后
写到这里,九篇文章画上了句号。但我心里清楚,句号只是给这一段阅读一个停顿。
回到开篇那张图——DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP → 反馈 → DEFINE。它没有真正的终点。SHIP 之后的反馈,会重新流回 DEFINE。
AI 编码这件事也一样。我们今天写的所有纪律、所有门控、所有评估,都会随着模型能力的演进而调整。但**”工程纪律让产出从能用变成生产级”**这件事不会变。
把这九篇当作起点,不是终点。
祝我们都能写出”能跑、可合并、可回滚、可观察、可解释”的代码。
参考资料