开头
“Skill 写完了,能用,先这样吧。”——如果你也是这么想的,那这篇文章就是写给你看的。
最近我翻了不少关于 Skill 的热搜词:codex skill、agent skill、skill creator、如何写一个 skill、skill 和 agent 的区别……大家讨论的基本都是“怎么写 Skill”“写出来的 Skill 怎么用”。这些当然重要,但真正的分水岭不在这里。一个 Skill 写完只是它生命周期的第一天,往后的持续升级才是拉开差距的地方。那些长期好用的 Skill,没有一个是写完就不动的,它们在被反复打磨中变得越来越懂用户、越来越适配真实场景。
我讲一下为什么你写的 Skill 总是刚上线感觉很好、用两周就嫌弃,以及怎么给 Skill 搭一套“持续进化”的机制,让它越用越顺手。这篇内容适合正在做 Agent 开发、提示词工程,或者单纯想把自己常用的 Skill 打磨到极致的从业者,看完就能直接上手实践。
1. 内容整体设计与思路拆解:先说清楚 Skill 为什么容易“写完即死”
1.1 我在实际项目里踩过的坑
先交代一个背景。之前我在团队里负责 Agent 侧的 Skill 体系,前前后后写过十几个 Skill:有做日志分析的、有生成架构图的、有处理产品需求文档的。每个 Skill 刚交付的时候都挺惊艳,demo 演示同事纷纷点赞。但有意思的是,三个月后回头看,真正还在被高频使用的只剩两三个,其他都成了“僵尸 Skill”——躺在仓库里,没人调用,也没人维护。
为什么会这样?我复盘了很久,得出了一个扎心的结论:绝大部分 Skill 死于“静态化”。什么叫静态化?就是你写 Skill 的时候,把它当成了一个“固定答案手册”,而不是一个“动态适应系统”。你预设了用户会怎么提问、Agent 应该怎么处理、最终输出长什么样,但真实世界根本不按你的剧本走。用户问法千奇百怪、输入数据格式五花八门、Agent 模型的版本还在迭代。一个没有反馈机制、没有升级通道的 Skill,很快就跟真实需求脱节了。
另一个坑是“万能化”。很多人写 Skill 喜欢把所有可能的情况都塞进去,字段写一大堆,条件分支越加越多,最后 Skill 的体积膨胀到离谱,Agent 加载起来都费劲,而且指令之间还会互相打架。这不是升级,是给自己埋雷。
1.2 为什么“持续升级”才是 Skill 的核心竞争力
咱们把 Skill 和 Agent 的关系掰开揉碎讲一下。很多人问“Skill 和 Agent 的区别是什么”,我的理解很简单:Agent 是“执行者”,Skill 是“方法论”。Agent 负责理解意图、调度工具、推进流程,Skill 负责告诉它“这件事具体该怎么干”。既然是方法论,那就必须不断演化。就像你公司里的 SOP 手册,写完搁那儿吃灰三年,新员工照着做一定会出问题,因为业务早就变了。
放到 AI Agent 的场景里也是一样:模型在升级、工具在变、用户习惯在变、你所在领域的规则也在变。Skill 如果不能持续吸收这些变化,它的输出质量就会肉眼可见地滑坡。我在实践中越来越确信一句话:Skill 的价值不在于写完的那一刻有多完美,而在于它的迭代速度有多快。
基于这个思路,我在后文会带你搭一套 Skill 的持续升级闭环。这套闭环由四个部分组成:可演进的架构设计、反馈信号采集、评测机制和版本管理策略。每一部分我都会给出可以直接照做的落地方法。
2. 核心细节解析与实操要点:给 Skill 装上持续进化的“骨架”
2.1 一个有进化能力的 Skill,目录结构长什么样
先别急着谈升级,很多人的 Skill 从根上就不具备被升级的潜力,因为结构太乱。一个标准的 Skill,核心文件是SKILL.md,里面用 YAML frontmatter 声明name、description、instructions等元信息,正文部分则是给 Agent 的具体操作指南。但如果你写了半天只有这一个文件,后面想迭代会特别痛苦。
我的做法是这样规划一个 Skill 的目录:
my-skill/ ├── SKILL.md # 主文件:声明元信息、给出核心指令 ├── guides/ # 存放细分场景的操作手册 │ ├── web-scraping.md │ └──>description: > 适用于项目周报生成场景。当用户提供团队成员的每日进展文本、 项目排期表或 Jira 导出数据时,本 Skill 负责提炼关键进度、 识别延期风险并输出结构化周报。仅当用户明确要求生成本周报告 或项目进展总结时使用,日常闲聊不要调用。这段描述好在哪里?它给了 Agent 一个非常明确的“调用边界”。有边界才有安全感,Agent 在不确定的时候更容易做出正确选择。同时,描述里列出了具体的输入类型,这相当于告诉 Agent:喂,看到这类数据,你可以找我。实际测试下来,description 写得越具体,Skill 的调用准确率越高,误触发率越低。
3. 实操过程与核心环节实现:如何搭建 Skill 的持续升级闭环
3.1 第一步:让 Skill 学会“采集反馈”
没有反馈,就没有升级的素材。很多 Skill 之所以停滞,是因为开发者根本不知道它在真实场景里表现如何。你需要在 Skill 层面设计一套轻量的反馈采集机制。
具体怎么做?我常用的方法是在 Skill 的执行流程末尾加一个“总结步骤”。让 Agent 在每次执行完任务后,额外输出一段结构化的执行元信息,内容包括:本次输入类型样本、处理中遇到的异常情况、输出物生成的置信水平、以及哪些指令在这次执行中显得“多余或冲突”。这段元信息可以单独写入一个日志文件,或者通过 API 回传到你的后端。
举个例子,一个网页内容聚合 Skill,它在执行完任务后可以追加输出:
[done] input_type: url_list handled_items: 12 skipped_items: 2 skip_reasons: url_403, content_empty confidence: 0.85 instruction_feedback: guides/web-scraping.md 中的 2.3 节描述了对验证码场景的处理, 但在本次执行中未触发,可能需要验证该流程的优先级是否过高。这段输出就是你的“信号雷达”。采集到一定量之后,你就能非常清楚地看到:哪些输入是高频的、哪些异常是反复出现的、哪些指令是写了但压根没用的。我在维护一个文档生成 Skill 时就靠这个机制发现,用户最常输入的其实不是 Markdown 文本,而是 Word 文档转换需求,于是我把 Word 过滤与清洗的能力提到了更靠前的位置,使用体验立刻上升了一个档次。
3.2 第二步:建立“失败案例银行”
我喜欢把 Skill 在运行过程中暴露出来的典型失败案例收集到一个专门的目录里,叫它“失败案例银行”。每个案例包含三要素:触发场景、实际表现、归因分析。这个动作不是为了追责,而是为了让 Skill 的迭代变成“有据可依”的工程,而不是“拍脑袋改”。
举个例子,我之前维护过一个基于drawio的架构图生成 Skill。一开始它生成的图逻辑对,但布局很乱,线都缠在一起。用户虽然能看懂,但总说“图太丑了”,直接降低了使用频率。我把三次典型的布局混乱案例存进失败案例银行,定位到的原因是模板里没有对图层分组和连线锚点做出约束。下一轮升级时,我在模板里明确了“每个子系统用独立图层包裹,连线锚点默认取图形底边中点”的规则,输出质量立刻改善。
这个“银行”的另一个妙用是它可以反过来充当测试集。每当你对 Skill 做了结构性修改,就拿这些历史失败案例去跑一遍回归,确认它们都被修复且没有引入新问题。这是 Skill 升级能够长期保持正向循环的核心保障。
3.3 第三步:让 Skill 的升级有“评测护栏”
没有评测护栏的升级就像蒙眼开车,你不知道改完是变好了还是改坏了。这里我提供一个适合大多数 Skill 场景的简易评测方案。
每次调整完 Skill 后,准备一套固定的评测样本。样本分为三类,每类我习惯准备至少 5 个案例:普通案例(Standard)、边界案例(Boundary)、失败回归案例(Regression)。然后针对每个样本,让新版 Skill 和旧版 Skill 在相同输入下各跑一遍,对比输出质量。输出质量的评分可以从这些维度看:
| 评分维度 | 观察点 |
|---|---|
| 完整性 | 是否覆盖了用户要求的所有内容点 |
| 准确性 | 是否存在事实错误或逻辑漏洞 |
| 规范性 | 输出格式是否符合模板要求 |
| 体验度 | 语言是否通顺、结构是否易读、细节是否到位 |
实际操作的时候,不需要搞什么复杂的自动化评分,肉眼对比就够用。每个案例 1 分钟,一套样本跑下来也就十几分钟。这十几分钟能拦住绝大多数“负优化”。
而且这套评测样本要与时俱进。每当你从反馈里发现新的高频问题、新的复杂场景,就把它们补充进评测集。评测集越来越庞大,你的 Skill 升级就会越来越“稳”。我现在维护的每一个 Skill 都在仓库里放了一份评测清单,改动完第一件事不是上线,而是跑一遍评测。
3.4 第四步:用 Git 思维做 Skill 的版本管理
Skill 的升级离不开版本管理。我个人强烈建议用 Git 来管 Skill 的整个生命周期,即便你是个人开发者、没有团队协作需求。理由很简单:版本管理给你留了后悔药。
当一个 Skill 在频繁迭代时,很容易出现“改了三版后发现还是第二版好用”的情况。没有版本管理,你就只能凭记忆复刻;有了 Git,一切都有迹可循。我自己的习惯是:每完成一次有意义的调整就提交一次,提交信息按[skill-name] vX.Y.Z 简要变更说明的格式来写。另外,每个 Skill 的CHANGELOG.md要记录大版本变动,方便将来回顾整个演进路径。
这里说一个具体的版本哲学:小改进升 Patch 版本,能力增强升 Minor 版本,结构重构或指令逻辑大幅改动则升 Major 版本。这样的语义化版本配合评测数据集,能让你的 Skill 升级变得既灵活又可控。很多时候我发现某个大版本改动方向不对,直接git revert回到上一版,几分钟就恢复了,这比什么都重要。
4. 常见问题与排查技巧实录:Skill 迭代路上的避坑指南
4.1 为什么我的 Skill 越改越迟钝?
这是我在开发 Skill 过程中遇到频率最高的一个现象:Skill 的指令越来越多、越来越细,但实际效果却不如精简版。这个问题背后的原因其实并不复杂。Agent 的上下文窗口是有限的,你往 Skill 里塞了 80 条指令,Agent 真正执行时反而抓不住重点。
解决办法是“分层加载”,而不是“一股脑全塞”。让SKILL.md的主文件保持精简,只保留最高频的执行路径;低频的细节场景写到guides/子文件里,让 Agent 按需查阅。这样既保证了主流程的轻快,也保留了处理特殊情况的深度能力。我压过的一个经验值是:主文件的执行指令保持在 10 到 15 条左右,效果最理想,太多会稀释 Agent 的注意力,太少又显得粗糙。
排查路径也很直接:当你的 Skill 感觉变笨了,先别急着加指令,看一下它最近的执行日志里是不是有“指令冲突”或“指令被忽略”的记录。如果有,九成是主文件过载了。
4.2 用户反馈“没什么用”,是真没用还是调用姿势不对?
说实话,有一类“Skill 没用”的反馈跟 Skill 本身没关系,而是 Agent 根本没有正确调用它。这个问题的根源往往又回到description的写法上。如果你的 description 写得太抽象,Agent 在判断要不要调用时就会犹豫、就会误判。
遇到这种反馈,我的排查顺序是以下三步。第一步:翻日志,看这个 Skill 真实的调用频率和触发场景,确认 Agent 到底有没有用过它。第二步:如果调用频率低,立刻审视 description,把触发条件写得更明确,把典型输入样本直接写进描述里。第三步:如果调用频率高但用户还是说没用,那才是真正的能力问题,回到失败案例银行里找根因。
这里我还要补一个细节:排查时一定要区分“用户侧预期”和“Skill 实际交付物”之间的差距。很多用户说没用,其实是期待 Skill 做 A,你的 Skill 做的是 B。这时候要做的不是改技术,而是回到需求端重新对齐。开发 Skill 最忌讳自嗨,用户不需要的“强大能力”一文不值。
4.3 模型升级后 Skill 突然不好用了,怎么办?
这是所有 Skill 维护者迟早会遇到的问题。你什么都没改,但底层模型从某个版本升级到新版本之后,原来表现还行的 Skill 突然开始“不听话”了,输出风格变了、指令执行也不到位了。
我建议先别慌。模型升级导致 Skill 行为变化是正常的,因为模型对指令的“理解偏好”变了。这时候要做的是“适配性调整”,而不是“推翻重写”。我自己的流程是:先用固定评测集跑一遍新版模型下的 Skill,把所有表现异常的点记录下来,然后逐个判断是哪类指令被弱化了。如果是语气指令失效,就在模板里强化示例;如果是流程指令混乱,就检查是不是子步骤的边界不够清晰。整个过程通常一两个小时就能完成。
另外一个实用技巧是,在SKILL.md的 frontmatter 里记录它当时适配的模型版本范围,比如compatible_models: ["claude-sonnet-4-5", "gpt-4o"]。模型一升级,你就能快速圈定需要重点回归的 Skill 列表,不用普天同庆地全都测一遍。
4.4 常见问题速查表
| 现象 | 根因分析 | 解决建议 |
|---|---|---|
| Skill 输出总跑偏 | 指令优先级不明确 | 在主文件里用“首要原则”框住行为边界 |
| Agent 该调用时不调用 | description 触发条件模糊 | 重写 description,加入典型输入样例 |
| Skill 体积膨胀性能差 | guide 塞进主文件 | 分层拆分,主文件只留核心流程 |
| 改完不如改前 | 缺少评测回归 | 建立固定评测集,每次改动后跑一遍对比 |
| 模型升级后失灵 | 模型指令偏好变化 | 用评测集定位异常指令,做适配性微调 |
| 用户反馈不符合预期 | 需求对齐失真 | 回归用户真实场景,重新梳理预期交付物 |
5. 不同场景下的 Skill 升级策略与案例分析(增补章节)
5.1 工具型 Skill:重点迭代“边界覆盖度”
工具型的 Skill 很好理解,就是那种为了调用特定工具或环境而存在的,比如drawio skill、browser skill、gsap skill这类。它们升级的核心方向应该是“边界覆盖度”。什么意思?就是你得多问自己:用户还可能拿什么样的数据来用这个工具?工具的新版本有没有更新能力?
拿drawio skill举例。早期的版本可能只支持生成基础方框和连线,但实际用户常要画泳道图、时序图、云架构图,甚至需要导出成 PNG。你就要在迭代中不断扩展这些能力描述,同时配上对应的模板。每次升级都以“我在哪些场景下发现现有写法搞不定”为起点,而不是闭门造车地加功能。这类 Skill 还有一个升级重点,就是工具本身的版本升级。比如 drawio 的语法、图元、样式变量更新了,Skill 里的模板也要跟着适配,否则输出的图在最新版工具里打开会变形。
5.2 内容生成型 Skill:重点迭代“风格适应度”
内容生成型 Skill(比如写文案、做 PPT、写数学建模报告这类)面临的挑战不太一样:它们的核心不是“能不能生成”,而是“生成出来的东西像不像用户想要的”。这类 Skill 的升级,我会把重心放在风格适应和场景对齐上。
举个例子,一个 PPT Skill 如果只按固定模板输出,用户很快就会腻。因为它没有理解不同场景的不同审美——技术汇报、产品路演、学术答辩,风格是完全不同的。我在迭代 PPT Skill 时,会在guides/下维护多套风格指南,并在主流程中让 Agent 先判断场景再选择模板风格。此外,这类 Skill 还很依赖“反例”。我维护了一个“丑模板黑名单”目录,专门放用户明确吐槽过的设计风格和排版方式,然后在指令中禁止 Agent 触碰这些方案。反馈信号对这类 Skill 的迭代尤其重要,因为它强依赖用户的审美刻度,而审美又非常个体化。
5.3 分析型 Skill:重点迭代“推理链路质量”
分析型 Skill 常见于科研、日志分析、数据分析等场景。这种 Skill 的升级核心,不是堆更多知识,而是持续优化它的推理链路。日志分析就是一个很好的例子。第一版你可能只让它做日志格式解析和关键词提取,但实际用下来用户最需要的是“从日志中定位异常链路”。于是你就要在流程里增加异常链路追踪的推理步骤,把前后日志串联起来,并且补充更多网络拓扑和依赖关系的知识。
分析型 Skill 的升级还有一个关键动作:给 Agent 提供“专家思维链”。当你在失败案例中发现某个问题分析得不够深,不要只改指令,可以补一个完整的“分析示例”,展示从原始数据到结论的全过程。这等于手把手教 Agent 如何思考。我屡试不爽,因为模型从高质量的少样本示例中学习推理路径的能力真的非常强。
5.4 个人效率型 Skill:重点迭代“使用场景整合度”
最后说一类容易被忽略但使用频率最高的:个人效率型 Skill,比如日程管理、写作辅助、代码片段管理等。这类 Skill 的进化方向不是追求复杂,而是追求场景整合。什么意思?一个单独的“记录会议纪要” Skill 价值有限,但它如果能跟你的日历系统联动,自动识别待办事项并生成日程提醒,价值就会完全不同。
这种 Skill 的迭代,我建议从“用户实际工作流”里找机会。打开你的 Skill 调用记录,看看它被使用的上下文是什么,然后想想能不能让它在同一个上下文里完成更多事。我维护的一个workbuddy风格的效率 Skill 就是在一次迭代中把“信息收集”和“日程生成”两个动作合并了,使用满意度直接拉升。个人效率型 Skill 不需要惊艳的技术,但它必须越来越懂主人的习惯。
6. 把 Skill 升级变成一种习惯
讲到这里,核心的方法论已经全盘托出了。最后分享几个我在实操中的体会。
关于“Skill 写完就停止进化”这个问题,大家缺的往往不是能力,而是意识。你需要把 Skill 当作一个需要持续喂养的“活体”,而不是一个写完就可以交差的文件。每一条用户反馈、每一次失败案例、每一轮评测对比,都是喂给它的养分。而你要做的,就是建立一套稳定的“喂养机制”,让升级变成一种有节奏、有依据的习惯。
我还想在最后递给你的一个实用小技巧是:每周固定留出 30 分钟,跑一遍所有活跃 Skill 的评测集。这 30 分钟能让你及时发现性能退化,也能让你积累足够多的迭代信号。不要等到用户投诉了再去被动修,主动的节奏感会让你的 Skill 库始终保持健康和锋利。
写 Skill 是技术,养 Skill 是耐心。真正拉开差距的地方,恰恰在后半段。