游乐游手机版
首页/AI教程/文章详情

蒸馏谷歌工程基因 将工程师判断力编码给智能体

时间:2026-06-18 16:58
想象一下这个场景:你让AI agent实现一个用户登录功能。它没有问你任何问题,直接开始写代码。十分钟后,一个完整的实现摆在你面前——账号密码登录、JWT token、数据库查询,看起来一切正常。但你想要的是OAuth。你让它改。它改了。你又发现没有处理token过期的情况。再改。改完你问它:“测试
想象一下这个场景:你让AI agent实现一个用户登录功能。它没有问你任何问题,直接开始写代码。十分钟后,一个完整的实现摆在你面前——账号密码登录、JWT token、数据库查询,看起来一切正常。但你想要的是OAuth。你让它改。它改了。你又发现没有处理token过期的情况。再改。改完你问它:“测试呢?”它说:“这个逻辑比较简单,您可以自己验证一下。”你白白耗了两个钟头,在一个本可以十五分钟写完spec就能避免的方向上反复拉扯。这就是AI coding agent的默认工作方式:以最快速度到达“完成”,跳过一切在diff里看不见的东西——写spec、暴露假设、先写测试。 Addy Osmani在Google工作近20年,曾长期主导Chrome开发者体验团队,现任Google Cloud AI总监。他在博客里写道:**agent-skills**是他给出的答案。

一、TL;DR

AI coding agent 默认以最快速度到达「完成」,跳过写 spec、先写测试、上线检查这些在 diff 里看不见的工作。Addy Osmani 把 Google 二十年的工程实践蒸馏成 agent-skills——20 个结构化 Skill,加上一个负责任务路由的 Meta Skill,把高级工程师的判断力编码成 agent 无法绕过的工作流。

值得注意的是,这套工程实践本身并不只属于 AI——写 spec、显式化假设、验收标准可量化、反合理化,对人类工程师同样适用,放进团队 wiki 照样有效。而 Addy 设计 Skill 的方式——触发条件、阶段检查点、边界三分法、反合理化内置——也是一套可以直接借鉴的方法论,无论你是在为 AI agent 还是为团队编写自己的 Skill。

二、什么是 Skill

在深入 agent-skills 之前,先问一个关键问题:Skill 到底是什么?

Addy 的定义很精准:一个 Skill 是注入 agent 上下文的 Markdown 文件,但它不是参考文档——它是一个带检查点和退出条件的工作流。每个步骤都有明确的执行指令,每个阶段都有人类审核节点,任务完成的标准是「有证据」,而不是「看起来对了」。

这个区别很关键。普通的参考文档,agent 会读一遍,生成看起来合理的输出,然后跳过实际要做的事。Skill 的结构让这条捷径消失——没有完成检查点,就不能进入下一步。

可以把它理解为介于 system prompt 片段和 runbook 之间的东西:比 system prompt 更结构化,比 runbook 更高层——不是机械执行步骤,而是带判断点的工作流。

三、蒸馏与编码:Google 工程基因如何变成可执行的 Skill

agent-skills 里的工程实践,不是 Addy 发明的。翻开 Google 出版的《Software Engineering at Google》,几乎可以找到每一条实践的出处:

实践对应 SkillSWE Book 章节
Hyrum 定律api-and-interface-designCh01 — What Is Software Engineering?
左移ci-cd-and-automationCh01 — What Is Software Engineering?
切斯特顿之栅code-simplificationCh03 — Knowledge Sharing
代码评审code-review-and-qualityCh09 — Code Review
测试金字塔 / Beyoncé Ruletest-driven-developmentCh11 — Testing Overview
DAMP > DRYtest-driven-developmentCh12 — Unit Testing
主干开发git-workflow-and-versioningCh16 — Version Control and Branch Management
代码是负债deprecation-and-migrationCh15 — Deprecation

这正是「蒸馏」二字的含义——把 Google 工程师二十年积累的实践,提炼成 agent 可以直接执行的指令。

但问题就在于,光有正确的内容还不够。如果只是把它们写进一份文档,agent 读一遍,生成看起来合理的输出,然后照样跳过实际要做的事。真正的挑战是「编码」:把这些实践转化成 agent 无法绕过的结构。这是 Addy 自己摸索出来的 Skill 设计准则,在 SWE Book 里找不到对应:

  • 触发条件明确。 每个 Skill 最前面都是「何时用 / 何时不用」。spec-driven-development 明确写道:单行修改、typo、无歧义的独立改动,直接跳过。防止 agent 无脑套用。
  • 阶段检查点,人类不可绕过。 spec-driven-development 的四阶段工作流——SPECIFY → PLAN → TASKS → IMPLEMENT——每个阶段结束都有「Human reviews」检查点,明确标注:「未经人类验证,不得进入下一阶段。」
  • 假设显式化。 每个 Skill 的第一步不是写代码,而是列出假设清单,格式固定:
    ASSUMPTIONS I'M MAKING: 1. [关于需求的假设] 2. [关于架构的假设] → Correct me now or I'll proceed with these.
  • 验收标准可量化。 模糊目标必须转化为可测试的标准。「更快」不够,要写成「LCP < 2.5s」。code-review-and-quality 里同样要求:「量化问题,不要模糊表述——‘这个 N+1 查询会增加约 50ms 延迟’,而不是’这可能会慢一点‘。」
  • 边界三分法。 每个 Skill 都定义了三条边界:Always(直接做)、Ask First(先问)、Never(禁止)。agent 遇到决策点,直接查表,不需要猜测。
  • 反合理化内置。 提前把 agent 会找的借口写进 Skill,附上反驳。这个设计下一章单独讲。
  • Spec 是活文档。 不是冻结的需求文档,而是随代码一起提交、在 PR 里引用、随实现持续更新的活文档。

四、Meta Skill:整个体系的操作系统

20 个 Skill 摆在那里,问题来了:什么时候用哪个?

如果在会话开始时把所有 Skill 全部加载进 context,本身就是反模式。Addy 说得很直接:「每个加载的 token 都会降低性能,不需要的留在磁盘上。」

这就是 using-agent-skills 存在的原因——整个体系的操作系统,负责在正确的时机激活正确的 Skill。

决策树:任务进来,先路由

任务到来时,meta skill 用一棵决策树做路由:

\

主干与按需加载:两层结构

仔细看这棵树,20 个 Skill 实际上分成两层:

11 个构成主干,覆盖一次完整功能开发的全生命周期:idea-refine → spec-driven-development → planning-and-task-breakdown → context-engineering → source-driven-development → incremental-implementation → test-driven-development → code-review-and-quality → git-workflow-and-versioning → documentation-and-adrs → shipping-and-launch

另外 9 个是条件加载,只在特定场景下激活,可以分为四类:

类型Skill
领域专家型(特定技术栈)frontend-ui-engineering、api-and-interface-design
异常处理型(出问题才用)debugging-and-error-recovery、browser-testing-with-devtools
深化审查型(review 增强)code-simplification、security-and-hardening、performance-optimization
生命周期边缘型(跨迭代决策)ci-cd-and-automation、deprecation-and-migration

典型路径

不同任务类型,走不同的路径:

场景路径步骤数
完整功能开发idea-refine → ... → shipping-and-launch11 步
Bug 修复debugging-and-error-recovery → TDD → code-review3 步
API 开发spec → plan → api-and-interface-design → incremental → TDD → review → git → ship8 步
前端功能spec → plan → frontend-ui-engineering → incremental → browser-testing → review → git → ship8 步

\

最长 11 步,最短 3 步。meta skill 的价值正在于此——根据任务类型,从主干上裁剪出合适的路径,而不是每次都走完整流程。

六条不可违背的行为规范

路由之外,meta skill 还定义了 agent 的底层操作原则——六条无论执行哪个 Skill 都必须遵守的行为规范:

  1. 显式化假设。 开始任何任务前,先列出假设清单:
    ASSUMPTIONS I"M MAKING: 1. [关于需求的假设] 2. [关于架构的假设] → Correct me now or I'll proceed with these. 「最常见的失败模式,是带着错误假设一路往前走。」
  2. 主动管理困惑。 遇到不确定,停下来,明确说出具体的困惑,等待解答。不猜测,不绕过。
  3. 该反驳就反驳。 发现问题,直接指出,量化影响——「这会增加约 200ms 延迟」,而不是「这可能会慢一点」。提出替代方案,接受人类的最终决定。
  4. 强制简洁。 完成前问自己:能用更少的行数实现吗?抽象是否值得其复杂度?有经验的工程师会不会说「为什么不直接……」?
  5. 范围纪律。 只动被要求动的地方。不重构相邻系统,不删除没完全理解的代码,不因为「看起来有用」就添加未被要求的功能。
  6. 验证才算完成。 有通过的测试、有构建输出、有运行时数据——才算完成。

10 个失败模式

meta skill 还附了一份负面清单,把 agent 最常踩的坑提前列出来:

前五条,都是「不该走时往前走」:

  • 没确认就带着错误假设前进
  • 遇到困惑继续硬推
  • 发现不一致却不说
  • 非显式决策不体现权衡
  • 对糟糕方案随声附和

后五条,都是「做了不该做的事」:

  • 把代码和 API 过度复杂化
  • 改动了与任务无关的代码
  • 删除了没完全理解的东西
  • 没有 spec 就开始实现「显而易见」的需求
  • 「看起来对了」就收工,跳过验证

两类失败,一个根源:agent 在优化「快速完成」,而不是「正确完成」。meta skill 做的,就是把这条捷径逐一堵死。

五、反合理化:预先封堵借口

agent-skills 里最有创意的设计,不是那 20 个 Skill,而是每个 Skill 里都内置的一张表——反合理化表格(Anti-Rationalization)。

设计思路很反直觉:与其告诉 agent 应该做什么,不如把它会找的借口提前写下来,附上反驳,让这些借口在说出口之前就被堵死。

回到引子里的那两个场景:

场景 A:跳过 spec
agent 最常用的借口是「spec 会拖慢进度」。spec-driven-development 的反驳是:

场景 B:跳过测试
test-driven-development 里写得更直接:

借口反驳
“I’ll write tests after”You won’t. Post-hoc tests test implementation, not beha vior.
“Too simple to test”Simple code gets complicated; test documents expected beha vior.
“Tests slow me down”Now yes. Every future change: no.
“It’s just a prototype”Prototypes become production.

「等会再写」是整个表格里最有力的一条。「等会」这个词承载了太多从未兑现的承诺——就像我们常说的「有时间一起吃个饭」,说的时候是真心的,但都知道不会发生。不只是 agent,人类工程师也一样。把它写进 Skill,是对所有人的约束。

这个设计模式本身也值得借鉴——不只用于 agent。Addy 在博客里提到,可以把反合理化当成团队实践:把你们团队经常对自己说的谎话列出来,加上反驳,放进 wiki。适用范围远不止 AI 编程。

六、收尾

回头看引子里那个 agent——它不是不够聪明,它只是在忠实地执行自己的默认目标:以最快速度到达「完成」。

没有人告诉它,「完成」不等于「正确完成」。

agent-skills 做的,就是把这个差距填上——用 Addy 二十年在 Google 积累的工程判断力,用 SWE Book 里那些经过大规模验证的实践,把它们编码成 agent 无法绕过的结构性约束。

不是参考文档,不是建议,是工作流。

模型会越来越强,但判断力不会自动涌现。在它真正拥有之前,我们能做的,是把我们的判断力写下来。

代码是廉价的。判断力不是。agent-skills 做的,是让前者不再替代后者。

参考资料

[1] Addy Osmani: https://addyosmani.com
[2] agent-skills: https://github.com/addyosmani/agent-skills
[3] Software Engineering at Google: https://abseil.io/resources/swe-book
[4] Hyrum 定律: https://abseil.io/resources/swe-book/html/ch01.html#hyrumapostrophes_law
[5] 左移: https://abseil.io/resources/swe-book/html/ch01.html#shifting_left
[6] 切斯特顿之栅: https://abseil.io/resources/swe-book/html/ch03.html#understand_context
[7] 代码评审: https://abseil.io/resources/swe-book/html/ch09.html
[8] 测试金字塔 / Beyoncé Rule: https://abseil.io/resources/swe-book/html/ch11.html
[9] DAMP > DRY: https://abseil.io/resources/swe-book/html/ch12.html
[10] 主干开发: https://abseil.io/resources/swe-book/html/ch16.html
[11] 代码是负债: https://abseil.io/resources/swe-book/html/ch15.html
[12] 触发条件明确: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#when-to-use--not-use
[13] 阶段检查点,人类不可绕过: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#the-gated-workflow-4-phases
[14] 假设显式化: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#surface-assumptions-first
[15] 验收标准可量化: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#reframe-vague-requirements-as-testable-criteria
[16] 边界三分法: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#six-core-areas-of-a-spec
[17] 反合理化内置: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#common-rationalizations-vs-reality
[18] Spec 是活文档: https://github.com/addyosmani/agent-skills/tree/main/skills/spec-driven-development#keeping-the-spec-alive
[19] using-agent-skills: https://github.com/addyosmani/agent-skills/tree/main/skills/using-agent-skills

来源:https://cloud.tencent.com.cn/developer/article/2692734
上一篇年IT服务管理平台选型指南:能力、场景与落地实践 下一篇AIWCLOUD免备案CDN过移动屏蔽不限内容,助力跨境直播电商实时互动
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程
AI教程 · 2026-06-30

CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程

CapCutAI容器化部署需先确认镜像来源与授权范围,再完成环境准备、镜像拉取、端口映射、数据目录挂载和启动验证,适合本地试用、团队内网演示与轻量化AI剪辑服务管理。

CapCut AI Windows本地安装配置2026最新版含下载与环境要求
AI教程 · 2026-06-30

CapCut AI Windows本地安装配置2026最新版含下载与环境要求

CapCutAI与剪映AI在Windows端适合短视频、口播、课程和营销素材剪辑,安装前需确认系统、显卡、存储与网络条件,优先选择官方渠道下载,并完成账号、素材目录、硬件加速和导出参数配置。

Veo新手保姆级安装教程:从下载到首次运行
AI教程 · 2026-06-30

Veo新手保姆级安装教程:从下载到首次运行

Veo适合用文字生成短视频,新手应先确认官方入口、准备账号与设备环境,再按网页或应用方式完成启用。首次运行重点在提示词、参数、素材合规与结果保存,避免使用非官方安装包。

Veo本地模型运行下载路径设置与性能优化指南
AI教程 · 2026-06-30

Veo本地模型运行下载路径设置与性能优化指南

Veo本地模型部署需先确认模型来源与硬件条件,再完成下载校验、目录规划、路径配置和推理参数优化。重点关注显存占用、依赖版本、缓存位置、授权范围与常见报错处理。

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案
AI教程 · 2026-06-30

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案

Veo安装失败通常与系统环境、依赖版本、网络源、权限和缓存有关。排查时应先确认版本要求,再查看安装日志,按报错类型处理,并提前备份项目,确保升级与回滚可控。