你有没有遇到过这种情况:

让 AI 帮你写一段 Fastify 路由,出来的代码语法没错,跑起来也没报错,但感觉就是哪里不对劲——命名不像自己的风格,错误处理方式是网上随便抄来的样子,性能调优那块更是一看就知道是"大路货"。

这件事让 Matteo Collina 彻底烦了。


Matteo 是谁?

如果你在 Node.js 生态里混过一段时间,这个名字应该不陌生。

Matteo Collina 是 Node.js TSC(技术指导委员会)成员,同时也是 Fastify 框架的核心作者。Fastify 目前是 Node.js 生态里性能最强的 Web 框架之一,GitHub 星星数超过 3 万。

他不是那种"出来站台"的 KOL,而是真正在 Node.js 底层工作的人——libuv 的行为他了如指掌,V8 的 JIT 他踩过不少坑,streams 的各种边界情况他亲手修过 bug。

就是这样一个人,最近在博客里直接用了 "slop"(垃圾) 这个词来形容 AI 生成的代码。


真正的问题不是"AI 不懂代码"

Matteo 在博客里说了一句让我印象很深的话:

"我不是在抱怨 AI 写不出代码,而是它写出来的代码不符合我的标准。我每次 Code Review 都要重复同样的意见。"

这才是核心。

AI 能写 Node.js,但它不知道  怎么写 Node.js。它可能用了过时的回调风格,可能没有遵循 Fastify 的插件封装规范,可能在错误处理上用了一套和你项目完全不一致的逻辑。

AI 的"平均水准"对很多项目已经够用,但对于有自己一套成熟方法论的开发者来说,这种"够用"其实是一种折磨——因为你还需要花时间把它改成"你的风格"。

Matteo 的解法是:既然要反复说,不如直接写成 Skill,让 AI 一次性学会。


mcollina/skills:把多年经验装进 9 个包

他在 GitHub 上发布了 mcollina/skills,目前已获得 847 个 Star

这个仓库里有 9 个 Skill,每一个都是他某个特定领域的知识浓缩:

1. fastifyFastify 框架的使用最佳实践,涵盖 hook 生命周期、插件封装架构和性能调优。这是他最核心的一块——毕竟他就是 Fastify 的作者,这里面的内容可以说是"官方认证"的写法。

2. node一般性 Node.js 开发规范:事件循环的正确理解、异步错误处理方式、流(stream)的使用,以及 Node.js 原生 test runner 的写法。

3. nodejs-core这个 Skill 的深度比一般人想象的要高很多。覆盖 V8 引擎内部机制、libuv 工作原理、C++ addons 的写法和构建系统配置。如果你在写 Node.js 底层扩展,这块内容价值极高。

4. typescript-magician高级 TypeScript 类型系统和复杂泛型模式。灵感来自 TotalTypeScript,专门针对那些"AI 一写就写错"的复杂类型场景。

5. octocatGit 工作流和 GitHub 操作,重点是使用 gh CLI 工具。日常提 PR、写 issue、管理 Release 的规范。

6. oauth基于 RFC 规范的 OAuth 2.0/2.1 实现,并结合了 Fastify 集成。认证这块坑太多,一旦有了 Skill 约束,AI 就不会随便"发明"轮子了。

7. linting-neostandard-eslint9现代 ESLint v9 flat config 配置方式,搭配 neostandard 风格。这是目前 Node.js 社区比较新的配置标准,很多 AI 还停留在旧版用法。

8. documentation技术写作规范,遵循 Diátaxis 框架——这是一套把文档分为 Tutorial、How-to、Reference、Explanation 四类的方法论,在开源项目里越来越流行。

9. snipgrapher代码截图工具 snipgrapher 的配置和使用方式。


这个"Skill"到底是什么东西?

可能有读者对 Agent Skills 这个概念还不太熟悉。

简单说:Skill 就是给 AI 的"说明书",告诉它在某个特定领域要遵循什么规范、偏好什么写法。

它遵循 Agent Skills 开放标准。这个标准最早由 Anthropic 提出,现在已经获得了 Claude Code、GitHub Copilot、OpenAI Codex 等主流 AI 工具的支持。

这个标准有一个聪明的设计——渐进式加载(Progressive Disclosure):AI 助手会先加载 Skill 的元数据(相当于目录),只有真正需要某部分知识时,才加载对应的完整内容。这避免了一次性把所有上下文都塞进去导致"撑爆"的问题。

每个 Skill 内部通常包含:

  • SKILL.md:元数据和说明

  • 可执行脚本(可选)

  • 参考文档

  • 模板资源


和直接写 AGENTS.md 有什么区别?

很多项目现在会在根目录放一个 AGENTS.md,把所有上下文一次性塞给 AI。这种做法稳妥,但有几个问题:

  • 无法复用:写在 AGENTS.md 里的内容只对这一个项目有效

  • 上下文压力大:不管 AI 当前在做什么,这些内容都占着位置

  • 维护成本高:每个新项目都要重写一遍

Skills 的设计思路不同:它是跨项目可共享的知识单元,像 npm 包一样可以被分发和复用,并且支持按需加载——写测试时加载 node 的 test runner Skill,写文档时加载 documentation Skill,而不是把所有东西都一次性丢给 AI。

Matteo 自己对这件事的定位很直白:

"就像有一个经验丰富的开发者和你结对编程,唯一的区别是他永远不会忘记你 2022 年提过的那个冷门 V8 flag。"


怎么用?

安装需要先有 skills CLI(由 Agent Skills 社区维护),然后一行命令搞定:

# 安装 fastify skill
pnpx skills add mcollina/skills --skill='fastify'

# 安装全部(注意上下文压力)
pnpx skills add mcollina/skills --skill='*'

也可以通过 Skills Hub 这样的可视化工具来管理,更直观。

值得注意的是,Matteo 自己也承认这套东西现在还不完美——**"激活不稳定"** 是当前 Skills 生态普遍存在的问题。有时候 AI 会自动加载,有时候需要你显式提示"使用 fastify skill"才生效。这是当前阶段的正常现象,不是 Matteo 这个仓库特有的问题。


这件事本身不算技术突破,但它的意义在于:Node.js 领域里最有深度的工程师之一,开始系统性地把自己的经验打包成 AI 可消费的格式。

对于普通开发者来说,这意味着什么?

如果你用 Fastify,加载 fastify skill 之后,AI 写出来的代码会更接近这个框架的设计意图,而不是"能跑就行"的风格。如果你在维护 Node.js 原生模块,nodejs-core skill 里的内容比绝大多数网上教程都要靠谱。

当然,也有一个现实:Skill 的价值高度依赖制作者的水平。 Matteo 的 Skills 之所以值得用,是因为他本人就是这些领域的权威。


参考资料

  • GitHub - mcollina/skills

  • My Personal Skills for AI-assisted Node.js Development - Adventures in Nodeland

热点推荐

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐