万籁俱寂,万字将成。
刘耀文
Stay hungry. Stay foolish.
© 2024-2026
Powered by Mix Space&
余白 / Yohaku
.
正在被0人看爆
关于
关于本站关于我
更多
时间线友链
联系
写留言发邮件 ↗
刘耀文
Stay hungry. Stay foolish.
链接
关于本站·关于我·时间线·友链·写留言·发邮件
© 2024-2026 Powered by Mix Space&
余白 / Yohaku
.
正在被0人看爆
赣ICP备2024031666号
RSS 订阅·站点地图·
··|
RSS 订阅·站点地图·|··|赣ICP备2024031666号
稍候片刻,月出文自明。

把经验写进仓库:关于 Skills 的一些想法

4
AI·GEN

关键洞察

把经验写进仓库:关于 Skills 的一些想法

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • 把经验写进仓库

    最近读 OpenAI 那篇讲 Skills 和 Agents SDK 的文章,脑子里一直在转一个很小的问题。

    我们到底是在使用 AI,还是在把自己的工作方式,一点点整理成 AI 也能接住的东西。

    以前总觉得,所谓“AI 提效”,核心是模型越来越强。它会写代码,会解释报错,会总结文档,也能把一段模糊的需求翻译成还算可用的实现。可真把它放进日常工程里,事情很快又会变得具体起来。

    你会发现,问题常常不是它不够聪明,而是它不知道你们平时到底怎么做事。

    同样是改完代码之后的“检查一下”,有人会顺手把 format、lint、test 全跑完,有人只会跑当前模块,有人记得补 typecheck,有人则默认 CI 会兜底。
    同样是准备提 PR,有人会把改动背景、影响范围和验证方式写得很清楚,有人只留下一个简短标题,像往河里扔下一颗石头,剩下的涟漪全交给 reviewer 自己理解。

    这些差别,看起来像是个人习惯。可如果往下想一层,它其实是一种没有被正式写下来的经验。

    而 Skills 有意思的地方就在这里。

    它不是让模型再多会一点东西,也不是再给 prompt 换一个更精致的名字。它更像是在说:如果一件事会一遍遍发生,如果它背后已经有了相对稳定的做法,那为什么不把它认真写下来,写进仓库,写成一种能被调用的能力。

    这件事让我有点触动。因为它不是在追求一种更炫的智能感,反而是在做一件很朴素的事:把原本只存在于人脑子里的工作习惯,慢慢整理成系统的一部分。

    Skill 像什么

    如果只从表面看,skill 很容易被理解成“提示词模板”。

    但我越来越觉得,它更像是一个很小的工作单元。
    它知道自己该在什么时候出现,知道自己要完成什么,也知道哪些地方该交给模型判断,哪些地方该交给脚本执行。

    OpenAI 的文章里提到,一个 skill 通常会有自己的说明文件,也可能带着脚本、参考资料,甚至一些辅助资源。换句话说,它并不是一句轻飘飘的“帮我做这个”,而是一套被稍微整理过的经验。

    我很喜欢这种感觉。

    因为很多时候,团队里的知识并不是没有,只是它们以一种很松散的形式存在着。它可能藏在某个资深工程师的习惯里,藏在某次 code review 的评论里,藏在一个只被提过一次的内部约定里。你问起来,大家都知道一点;真要写下来,又总觉得“这种事不是理所当然的吗”。

    可一旦要交给 Agent,很多“理所当然”就突然变得不再理所当然了。

    它不会天然知道,改了这几个目录意味着什么。
    它不会天然知道,某一类改动是必须完整验证的,另一类改动却只需要最小检查。
    它也不会知道,你们习惯怎样描述一次改动,怎样把上下文交代给下一个接手的人。

    于是 skill 的意义开始变得清楚起来。
    它不是替代经验,而是在保存经验。
    不是制造新的流程,而是把原来那些靠默契维持的东西,慢慢落成可以复用的形状。

    真正难的,不是写“做什么”,而是写“什么时候做”

    我觉得 OpenAI 那篇文章里最值得反复想的一点,是它对 skill description 的强调。

    一个 skill 是否真的有用,关键不是写得多完整,而是写得够不够准。
    尤其是那个“什么时候该触发”的边界。

    这件事听起来很细,可其实很像平时和人协作。
    真正让一段协作顺畅起来的,从来不只是步骤本身,而是时机。

    如果你只说“运行验证流程”,这当然没错,但几乎没什么帮助。
    因为接下来最重要的问题都还没回答:

    什么样的改动算需要验证?
    只是改了文档呢?
    只是重命名文件呢?
    如果动到了测试或者构建链路,是不是就应该升级为完整检查?
    这个动作是建议性的,还是必须性的?

    当这些边界没被说清楚时,一个 skill 就很容易变得像一件摆设。它存在,但不稳定;偶尔会被调用,偶尔又会被忽略。最后的问题不在模型,而在于这个能力没有真正定义好自己出现的时刻。

    我会觉得,写 skill 有点像在写一种很轻的制度。
    制度不是靠语气强硬,而是靠边界清楚。
    什么时候该发生,什么时候不该发生,什么属于例外,什么必须执行,这些东西一旦明确了,后面的流程反而会变简单。

    仓库里其实一直缺一种“写给 Agent 的文档”

    文章里还提到了 AGENTS.md。这个设定我也很喜欢。

    它有一点像过去我们写给新同事的 onboarding 文档,只不过这次读者不是人,而是 Agent。

    仓库有自己的脾气。
    目录结构是怎么分的,哪里是核心路径,哪些约定看起来不显眼却不能碰,某些模块的测试为什么要这么跑,某些 API 的行为到底应该信源码还是信文档,这些都是仓库内部的语言。

    平时这些东西靠人来理解,问题也不大。人会猜,会追问,会顺着上下文补全很多隐含信息。
    但 Agent 不太一样。它当然会推理,可它最怕的是那些所有人都默认存在、却没有人认真写下来的东西。

    所以 AGENTS.md 给我的感觉,不是又多了一份文档,而是终于出现了一种明确的载体,去承接那些“本来应该早就写清楚”的仓库共识。

    如果说 AGENTS.md 更像总说明,那 skill 就更像一个个局部工作流。
    前者回答“这里是一个什么样的地方”,后者回答“在这里,某件事该怎么做”。

    再往下,还有 GitHub Actions 这种更确定的自动化兜底。
    这样一层层看下来,会觉得这个结构其实很顺。

    人负责形成经验。
    文档负责表达经验。
    skill 负责调用经验。
    脚本和 CI 负责执行经验。

    这和我过去想象的“AI 改变工程”很不一样。它没有特别戏剧化,反而很像软件工程一直以来最熟悉的路径:把不稳定的手工操作,慢慢整理成稳定的系统行为。

    模型不需要什么都做

    这篇文章里还有一个我很认同的判断:模型不应该负责一切。

    这件事说出来很简单,但真正做的时候,太容易贪心了。
    因为模型看起来什么都能处理,于是我们会不自觉地把理解、判断、执行、格式化输出,全部揉成一团交给它。

    结果通常不会太好。

    需要理解上下文、做比较、做总结、做判断的事,模型很擅长。
    但需要按固定顺序执行命令、收集状态、输出可预期结果的事,本质上还是脚本更适合。

    这个边界一旦想清楚,很多设计问题就会顺下来。

    比如判断一个改动是不是行为变更,这种事要靠模型。它需要读 diff,理解意图,也理解周边上下文。
    但“先跑哪些命令、失败了该怎么汇总、从哪里收集 git 状态和分支信息”,这些就该尽量交给脚本。

    我一直觉得,好的系统不是把能力堆在一个点上,而是把职责分开。
    模型负责那些本来就不确定的部分。
    脚本负责那些应该尽量确定的部分。

    Skill 之所以让我觉得它更接近“工程”,也在这里。它没有把模型想象成一个全能的主体,而是愿意承认:真正稳定的工作流,往往来自不同能力的合作,而不是单一能力的膨胀。

    说到底,Skills 在整理的是“隐性经验”

    我后来越想越觉得,Skills 最值得珍惜的地方,可能不是它能提升多少效率,而是它逼着团队去面对一件平时不太愿意面对的事:我们的很多工作,其实建立在隐性经验上。

    这些经验平时并不显得稀缺。
    因为总有人知道。
    一个团队里,总会有一些人对仓库很熟,对流程很熟,对各种“虽然没写,但大家都这么做”的东西很熟。于是问题看起来总能被解决,流程看起来总能被跑通。

    可一旦团队变大,项目变复杂,或者引入 Agent,这些隐性的部分就会立刻暴露出来。

    因为 AI 不会自动继承团队默契。
    它也不会天然理解某些“本来不用说”的规则。

    于是很多以前能被熟人网络悄悄消化掉的问题,现在都必须被明说了:

    什么是必须做的?
    什么只是建议?
    哪些步骤必须自动化?
    哪些判断仍然需要人来做?
    哪些知识应该写进仓库,而不是留在聊天记录里?

    这让我觉得,Skills 表面上是在帮助 Agent,实际上也在帮助团队重新认识自己。
    你们到底是怎样工作的。
    哪些经验是可迁移的。
    哪些流程值得固化。
    哪些依赖于个人记忆的地方,早就该被替换掉了。

    从这个角度看,它不是一个单纯的新功能,而像一次很安静的整理。

    我会从什么地方开始

    如果真要在一个仓库里慢慢把 skill 建起来,我大概不会一上来就做一个很大的系统。

    我更愿意从那些已经足够重复、足够明确、而且失败成本又不低的事情开始。

    比如验证流程。
    这几乎是最自然的一类。改动之后该跑什么、顺序是什么、哪些情况需要附加检查、失败时怎么把结果说清楚,这些都很适合被整理成 skill。它高频、重复,而且一旦依赖记忆,就特别容易漏。

    再比如 PR 的整理工作。
    标题怎么起,改动怎么概括,影响范围怎么交代,验证方式怎么写得让 reviewer 不费力。这种事情本身不算难,但很消耗注意力。一个好的 draft 往往就能省掉很多来回解释。

    还有文档核对。
    OpenAI 在文章里提到,涉及平台或 API 行为时,他们会让 Agent 去查当前文档,而不是凭记忆回答。这个原则我很喜欢。因为变化快的东西最怕“我记得好像是这样”。把“先查文档再回答”变成一种默认动作,本质上是在给系统加一个很必要的约束。

    再往后,可能是发版前检查。
    这种流程不一定每天发生,但一旦出错,往往会让人很后悔。版本号、changelog、示例是否可运行、release note 草稿、breaking changes 的确认,这些都很适合被慢慢沉淀下来。

    它们有一个共同点:都不是创造性的工作,而是重复性的工作。
    也正因为如此,它们才更值得被写进仓库。

    我为什么会对这件事有一点点乐观

    这几年关于 AI 的讨论很多,热闹也很多。
    可越往后,我反而越容易被一些安静的东西打动。不是模型又刷新了哪个 benchmark,不是 Agent 又完成了多复杂的任务,而是像 Skills 这种,看起来没有那么耀眼,却很接近真实工作现场的设计。

    它让我觉得,AI 真正进入工程,不一定是靠一次 dramatic 的替代,而更可能是靠这种缓慢的渗透:先接住一个小流程,再接住一种工作习惯,再把一种原本只存在于经验里的做法,慢慢变成仓库的一部分。

    这件事的迷人之处在于,它不是在制造新的神话,而是在保存那些原本就有价值的东西。

    我们一直说,软件工程是在把手工经验系统化。
    某种程度上,Skills 只是把这句话继续往前推了一步。

    以前我们把经验写成文档,写成脚本,写成 CI。
    现在,我们开始尝试把经验写成 Agent 也能理解和使用的能力。

    我挺喜欢这种变化。

    因为它让我第一次觉得,Agent 不是突然闯进工程体系里的一个外来者。
    它更像一个新的参与者。
    而一个新的参与者,最重要的不是“它能做多少事”,而是“我们愿不愿意认真把自己的工作方式告诉它”。

    说到底,skill 不是在教模型怎么工作。
    它是在逼我们先想清楚,自己到底是怎么工作的。