如何訓練 Skill 讓它自進化:從"能用"到"精準"的完整方法論

作者:AI智聞說
日期:2026年5月27日 下午9:11
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

訓練 Skill 需用數據驅動,透過寫初版 → 跑 Eval → 看數據 → 改進循環,將觸發率同輸出質量從約65%提升到95%,實現自進化。

整理版摘要

呢篇文章係作者分享點樣訓練 AI Skill,而唔係寫完就算。佢指出好多人寫完 Skill 試兩次就收工,結果觸發率低、輸出質量唔穩定。作者使用 Claude Code 嘅 skill-creator 工具,提出完整訓練循環:寫初版 → 跑 Eval 睇數據 → 改進 → 再跑 Eval。佢強調 Skill 要睇兩個核心指標:觸發率同輸出質量。最終結論係 Skill 唔係靜態文檔,而係需要持續迭代嘅「模型行為規範」,透過用戶反饋、定期回歸測試同 description 自動優化,可以做到自進化。

文章仲提供咗實戰案例,展示一個 code-review Skill 點樣由 v1 嘅 65% 觸發率同 C 級質量,經過三次迭代升到 v3 嘅 95% 同 A 級。作者亦講解咗管理多個 Skill 嘅常見問題,例如衝突、過時、邊界劃分,同埋 CLAUDE.md 同獨立 Skill 嘅分工。最後佢畀出收斂標準:觸發率 ≥ 90% 就停,輸出質量連續兩次冇提升就停,迭代通常 3-4 輪。

總括嚟講,呢篇文嘅核心係用數據驅動方式訓練 Skill,將 AI 嘅行為從「撞彩」變成「穩定可靠」,適合所有用緊 AI 輔助開發嘅人參考。

  • Skill 訓練係一個閉環:寫/改 → 跑 Eval → 睇數據 → 改進,直至觸發率 ≥ 90% 且輸出質量連續兩次冇提升先收手。
  • description 決定觸發率,要加正面觸發詞同負面排除詞;正文決定輸出質量,要畀具體規則、反面案例同邊界情況。
  • 用戶每次糾正 AI 嘅反饋都係訓練機會,應寫返入 Skill 令佢永久生效,實現自進化。
  • Skill 數量多咗之後要留意衝突同過時,用 description 劃清邊界,定期做「Skill 年檢」。
  • CLAUDE.md 放靜態事實(技術棧、目錄),獨立 Skill 放動態行為(流程、格式、檢查清單),兩者配合唔好溝埋。
值得記低
工具 github.com

skill-creator

Anthropic 開發嘅 skill-creator 工具,可以自動評估 Skill 觸發準確率同輸出質量,並支援 description 自動優化。需要從 GitHub 倉庫下載放到 ~/.claude/skills/ 目錄。

整理重點

寫咗 Skill 但 AI 唔跟?問題在於冇訓練

好多人寫 Skill 嘅方式係:寫一份 SKILL.md,試兩次「好像能用」,就收工。一個月後發現 AI 該觸發時唔觸發,唔該觸發時亂觸發,輸出質量時好時壞。

問題在於你冇用數據驅動去訓練佢

Skill 唔係寫完就結束嘅靜態文檔,而係一個需要持續訓練、度量、迭代嘅「模型行為規範」。好消息係 Claude Code 嘅 skill-creator 工具已經將成個訓練循環自動化咗——你只需要理解原理,然後讓工具幫你跑。

整理重點

兩個核心指標:觸發率同輸出質量

訓練 Skill 要優化嘅只有兩件事

  1. 1 觸發率:取決於 description 寫得好唔好。AI 根據 description 判斷「呢個 Skill 同當前任務相關嗎」。description 太模糊就會漏觸發或誤觸發。
  2. 2 輸出質量:取決於 SKILL.md 正文嘅規則寫得好唔好。規則太模糊 AI 會自由發揮,規則冇覆蓋嘅位 AI 會跟默認行為——未必係你想要嘅。
整理重點

訓練循環:4 步閉環

  1. 1 寫初版 Skill:description 以「Use when」開頭,正文寫 3-5 條核心規則加 1 個完整示例。
  2. 2 跑 Eval:用 skill-creator 自動生成測試查詢,評估觸發率同輸出質量。
  3. 3 睇數據定位問題:觸發率低就改 description;輸出質量差就改正文規則。
  4. 4 改進並重跑:根據診斷做針對性修改,再跑 Eval 睇數字有冇漲。

成個過程係一個反覆循環,直至滿意為止。

觸發率低常見原因:description 太寬泛、太窄、有歧義

輸出質量差常見原因:規則太模糊、缺少反面示例、缺少邊界情況

description 改良示例 yaml
# 改前
description: Use when 用戶完成代碼修改準備提交時,生成中文 commit message

# 改後
description: Use when 用戶說"提交"、"commit"、"寫 commit message"或完成一輪代碼修改後要求生成提交信息時。不適用於 PR 描述、changelog、release note。
整理重點

讓 Skill 自進化:3 個機制

  • 用戶反饋驅動迭代:每次糾正 AI 時,將反饋寫返入 Skill 正文,實現「反饋 → 記憶 → 寫回 Skill → 永久生效」。
  • 定期跑 Eval 回歸測試:每兩週跑一次,因為項目可能演變、新 Skill 可能衝突、AI 模型更新可能改變行為。
  • description 自動優化:skill-creator 可以自動生成多個 description 版本,測試邊個分數最高,觸發率可從 ~70% 提升到 ~90%。

用戶反饋係最好嘅訓練數據——每次糾正 AI 都係一次訓練機會

整理重點

實戰案例:code-review Skill 嘅 3 次進化

以作者自己嘅 code-review Skill 為例,從 v1 到 v3 觸發率由 65% 升到 95%,輸出質量由 C 升到 A。

v1 問題:description 太模糊,規則太抽象

v2 改善:加咗具體觸發詞同排除場景,規則從抽象變具體

v3 最終版:加咗鐵律(防止偷懶)、反面案例(防止廢話輸出)、description 經過自動優化

v3 最終版 code-review 部分內容 yaml
description: Use when 用戶在代碼修改完成後要求審查質量(觸發詞:review、檢查、看看有沒有問題、幫我過一遍),或在 /commit 之前自動觸發。不適用於:功能需求討論、架構設計、寫新代碼。

## 鐵律
- 每次 review 必須至少指出一個改進點。如果真的沒問題,說明為什麼沒問題。
- 不要只說"看起來沒問題"——這等於沒 review。

## 檢查項(按優先級)
1. 安全:硬編碼密鑰?SQL 注入?XSS?未驗證的用戶輸入?
2. 錯誤處理:Promise 有 catch?外部 API 調用有超時?錯誤信息對用戶友好?
3. 類型安全:有 any?類型斷言有根據?泛型用對了?
4. 邏輯:邊界值測試了?空值處理了?併發安全?
5. 可讀性:命名錶達意圖?嵌套 ≤ 3 層?函數 ≤ 30 行?

## 反面案例
- ❌ "代碼看起來還行" → 沒有價值
- ❌ "建議加註釋" → 太模糊
- ❌ 列出 20 個低優先級問題 → 信息過載
整理重點

多 Skill 管理同收斂標準

  • 多個 Skill 同時觸發:喺 description 明確劃分邊界,加「不適用於」排除詞。
  • Skill 過時:每月做一次「Skill 年檢」,檢查是否同當前項目匹配。
  • 唔確定應唔應該新建 Skill:如果你在不同會話重複同一條糾正指令,就值得寫成 Skill;一次性嘅唔需要。
  • CLAUDE.md vs 獨立 Skill:CLAUDE.md 放靜態事實(技術棧、目錄),Skill 放動態行為(流程、輸出格式、檢查清單)。

寫咗個 Skill,AI 有時用、有時唔用,用咗效果都係一般?問題唔係喺 Skill 本身,而係你冇訓練佢。呢篇會講一套完整嘅 Skill 訓練循環:寫初版 → 跑 Eval → 睇數據 → 改進 → 再跑 Eval,令到 Skill 由「用得」進化到「精準」。

圖片

寫喺前面

大多數人寫 Skill 嘅方式係咁樣:

1
寫一份 SKILL.md
2
試咗兩次,「好似用得」
3
收工

一個月之後發現:有時 AI 應該觸發嘅時候冇觸發,唔應該觸發嘅時候亂觸發。輸出質量時好時壞,全靠運氣。

問題喺邊?你冇用數據驅動咁訓練佢。

Skill 唔係寫完就完事嘅靜態文件。佢係一個需要持續訓練、度量、迭代嘅「模型行為規範」。好消息係,Claude Code 嘅 skill-creator 工具已經將成個訓練循環自動化咗——你只需要理解原理,然後叫工具幫你搞掂。

圖片

一、Skill 嘅兩個核心指標

訓練 Skill 要優化嘅只有兩件事:

1. 觸發率(Triggering Accuracy)

「應該觸發嘅時候有冇觸發?唔應該觸發嘅時候冇亂觸發?」

呢個取決於 description 字段寫得好唔好。AI 根據 description 判斷「呢個 Skill 同當前任務相關嗎?」。description 寫得模糊,就會漏觸發或者誤觸發。

2. 輸出質量(Output Quality)

「觸發之後,AI 跟住 Skill 做嘢嘅效果好唔好?」

呢個取決於 SKILL.md 正文嘅規則寫得好唔好。規則太模糊 AI 會自由發揮,規則冇覆蓋到嘅地方 AI 會跟住自己嘅默認行為嚟——未必係你想要嘅。

訓練嘅目標:將觸發率由 ~65% 拉到 95%,將輸出質量由「勉強用得」拉到「穩定可靠」。

二、訓練循環:4 步閉環

成個訓練過程係一個循環,重複跑直到滿意:




寫/改 Skill → 跑 Eval → 睇數據 → 改進 → 再跑 Eval → ...

第 1 步:寫初版 Skill

初版唔使追求完美,能夠表達核心意圖就得。重點關注:


description 寫清楚「幾時用」(以「Use when」開頭)

正文寫 3-5 條核心規則

畀 1 個完整示例



---
name: commit-message-zh
description: Use when 用戶完成代碼修改準備提交時,生成中文 commit message
---
 
# 中文 Commit Message
 
## 規則
1. commit message 用中文
2. 格式:類型(範圍): 描述
3. 類型包括:feat/fix/refactor/docs/test/chore
4. 描述唔超過 50 字
5. 唔好寫「更新咗代碼」呢類廢話,要寫具體改咗啲乜
 
## 示例
- feat(auth): 添加 GitHub OAuth 登錄
- fix(payment): 修復月度訂閲扣費金額計算錯誤
- refactor(api): 將 user 路由拆分為獨立文件

第 2 步:跑 Eval——叫 skill-creator 幫你測

呢一步係關鍵。用 skill-creator 跑評估(需要先安裝:從 github.com/anthropics/skills 倉庫把 skill-creator 目錄放到 ~/.claude/skills/ 下):




幫我評估 commit-message-zh 呢個 skill 嘅觸發準確率同輸出質量

skill-creator 會自動做呢啲嘢(以下係簡化示意,實際輸出包含更多細節):

觸發率測試:

1
生成 20 個模擬查詢(10 個應該觸發、10 個唔應該觸發)
2
逐個測試 Skill 嘅 description 能否正確判斷
3
輸出觸發率分數



觸發率評估結果:
- 應觸發嘅 10 個查詢:8/10 正確觸發 ✓
- 唔應觸發嘅 10 個查詢:9/10 正確未觸發 ✓
- 綜合觸發率:85%
 
誤判案例:
- 「幫我寫個 PR 描述」 → 錯誤觸發(PR 描述 ≠ commit message)
- 「提交代碼」 → 未觸發(應該觸發)

輸出質量測試:

1
用 3-5 個真實場景測試 Skill 嘅輸出
2
對比「有 Skill」同「冇 Skill」嘅輸出差異
3
評分

第 3 步:睇數據,定位問題

根據 Eval 結果,問題通常分為兩類:

觸發率低?→ 改 description

常見原因:


太寬泛:「Use when writing commit messages」(寫啲乜都可能觸發)

太窄:「Use when using git commit -m」(只有精確匹配先會觸發)

有歧義:「Use when committing code」(PR 描述都算「committing」嗎?)

輸出質量差?→ 改正文規則

常見原因:


規則太模糊:「寫好 commit message」(乜嘢叫「好」?)

缺少反面示例:AI 唔知道乜嘢唔應該做

缺少邊界情況:多文件修改時點寫?破壞性變更點標註?

第 4 步:改進同重跑

根據第 3 步嘅診斷,做針對性修改。然後再跑一次 Eval,睇數字有冇升。

例如觸發率由 85% 要拉到 95%,description 改成:




# 改前
description: Use when 用戶完成代碼修改準備提交時,生成中文 commit message
 
# 改後
description: Use when 用戶話「提交」、「commit」、「寫 commit message」或完成一輪代碼修改後要求生成提交信息時。唔適用於 PR 描述、changelog、release note。

關鍵改動:加咗正面觸發詞 + 加咗負面排除詞。咁樣 AI 就唔會將「寫 PR 描述」誤判為需要呢個 Skill。

三、令 Skill 自進化:3 個機制

訓練一次只係起點。真正厲害嘅係令 Skill 持續自動進化

機制 1:用戶反饋驅動迭代

每次 Skill 嘅輸出唔符合你嘅預期時,直接話畀 AI 知:

「呢個 commit message 唔啱,多文件修改時應該寫最主要嘅改動,唔好列曬所有文件」

AI 會自動將呢條反饋存入記憶。下次再遇到同樣情況,行為就會改變。

但更進一步——將呢條反饋寫返入 Skill 本身




## 邊界情況
- 多文件修改:只描述最主要嘅改動意圖,唔逐一列舉文件名
- 修改超過 5 個文件:用「重構 xx 模塊」代替逐一描述

反饋 → 記憶 → 寫返入 Skill → 永久生效。呢個就係自進化。

機制 2:定期跑 Eval 回歸測試

每兩星期跑一次 Eval。原因:


你嘅項目在演變,規範可能已經變咗

你裝咗新嘅 Skill,可能同舊嘅衝突

AI 模型更新後行為可能變化

當佢係「單元測試」——代碼改咗要跑測試,Skill 改咗都要跑 Eval。

機制 3:description 自動優化

skill-creator 有一個殺手級功能:自動優化 description 嘅觸發準確率




幫我優化 commit-message-zh 嘅 description,提高觸發準確率

它會:

1
生成 20 個測試查詢
2
跑當前 description 嘅觸發率(baseline)
3
自動改寫 description(加觸發詞、加排除詞、調措辭)
4
再跑一次測試
5
對比 before/after,揀分數更高嘅版本

根據社區實測分享(Reddit、Medium 上多位開發者嘅反饋),觸發率由 ~70% 提升到 ~90% 係可以預期嘅。

四、實戰案例:一個 Skill 嘅 3 次進化

以我自己嘅 code-review Skill 為例:

v1:初版(第一次跑 Eval 結果:觸發率 65%,輸出質量 C)




---
name: code-review
description: Use when reviewing code
---
# Code Review
- 檢查安全性
- 檢查性能
- 檢查可讀性

問題:description 太模糊(「reviewing code」太寬泛),規則太抽象(「檢查安全性」具體查啲乜?)。

v2:跑 Eval 後優化(觸發率 82%,輸出質量 B)




---
name: code-review
description: Use when 用戶話「review」、「檢查代碼」、「睇下有冇問題」,或在 git commit/push 之前要求審查代碼質量。唔適用於功能討論或架構設計。
---
# Code Review
 
## 檢查項(按優先級)
1. 安全:硬編碼密鑰?SQL 注入?未轉義用戶輸入?
2. 錯誤處理:Promise 有 catch 嗎?邊界值處理咗未?
3. 類型安全:有 any 嗎?類型斷言合理嗎?
4. 可讀性:命名能表達意圖嗎?嵌套超過 3 層未?
5. 重複:有可提取嘅公共邏輯嗎?
 
## 輸出格式
- 每個問題標明嚴重程度:🔴高 🟡中 🟢低
- 畀出具體修復建議,唔只係指出問題

改進:description 加咗具體觸發詞同排除場景,規則由抽象變具體。

v3:用戶反饋 + 自動優化後(觸發率 95%,輸出質量 A)




---
name: code-review
description: Use when 用戶在代碼修改完成後要求審查質量(觸發詞:review、檢查、睇下有冇問題、幫我過一遍),或在 /commit 之前自動觸發。唔適用於:功能需求討論、架構設計、寫新代碼。
---
# Code Review
 
## 鐵律
- 每次 review 必須至少指出一個改進點。如果真係冇問題,解釋點解冇問題。
- 唔好淨係話「睇落冇問題」——呢個等於冇 review。
 
## 檢查項(按優先級)
1. **安全**:硬編碼密鑰?SQL 注入?XSS?未驗證嘅用戶輸入?
2. **錯誤處理**:Promise 有 catch?外部 API 調用有超時?錯誤信息對用戶友好?
3. **類型安全**:有 any?類型斷言有根據?泛型用啱咗?
4. **邏輯**:邊界值測試咗?空值處理咗?併發安全?
5. **可讀性**:命名錶達意圖?嵌套 ≤ 3 層?函數 ≤ 30 行?
 
## 輸出格式
- 嚴重程度:🔴必須修 🟡建議修 🟢錦上添花
- 每個問題:位置 + 問題描述 + 修復建議 + 修復代碼
 
## 反面案例(唔好咁樣輸出)
- ❌ 「代碼睇落仲得」 → 冇價值
- ❌ 「建議加註釋」 → 太模糊,具體邊度加啲乜註釋?
- ❌ 列出 20 個低優先級問題 → 信息過載,先講最重要嘅 3 個

改進:加咗鐵律(防止偷懶)、加咗反面案例(防止廢話輸出)、description 經過自動優化觸發率到 95%。

五、Skill 數量多咗之後嘅管理

當你有 10+ 個 Skill 時,新問題出現:Skill 之間互相衝突或搶觸發

問題 1:多個 Skill 同時觸發

例如你有 code-review 和 security-review 兩個 Skill,用戶話「幫我檢查下呢段代碼」——兩個都想觸發。

解決方案: 喺 description 裏面明確劃分邊界:




# code-review
description: ... 唔適用於專門嘅安全審查(安全審查用 /security-review)
 
# security-review  
description: Use when 用戶明確要求安全審查、滲透測試、威脅建模...

問題 2:Skill 過時咗

項目由 REST 搬咗去 tRPC,但你嘅 api-design Skill 裏面仲寫緊 REST 嘅規範。

解決方案: 每月做一次「Skill 年檢」:




幫我檢查所有 Skill,睇嚇邊啲同當前項目嘅技術棧/規範已經唔匹配

問題 3:唔確定應唔應該新建 Skill

判斷標準:你係咪喺唔同會話中重複畀 AI 同一條糾正指令?

如果你發現自己重複話「唔啱,我哋項目應該咁樣做」——就值得寫成 Skill。一次性嘅、只係喺特定調試場景出現嘅指令就唔需要。

問題 4:乜嘢內容應該寫喺 CLAUDE.md,乜嘢應該寫成獨立 Skill

分層策略:


CLAUDE.md:放「係啲乜」——項目技術棧、目錄結構、常用命令、團隊規範等靜態事實

Skill:放「點樣做」——具體工作流程、輸出格式、檢查清單、邊界情況處理等動態行為規範

舉例:


「我哋用 vitest 做測試」 → 寫喺 CLAUDE.md

「寫測試時用 AAA 模式、describe 對應一個函數、mock 盡量少用」 → 寫成 test-conventions Skill

CLAUDE.md 畀 AI 背景知識,Skill 畀 AI 執行手冊。兩者配合,唔好撈亂。

六、幾時停止迭代

唔係無限跑 Eval 就係好嘅。收斂標準:

觸發率 ≥ 90% 就可以停。 100% 唔現實——有些邊界查詢本來就有歧義(「幫我睇下呢段代碼」到底係 review 定係解釋?),追求 100% 反而會令 description 變得過度具體、喪失泛化能力。

輸出質量連續 2 次 Eval 冇提升就停。 說明當前規則已經到達咗呢個 Skill 能覆蓋嘅上限。再想提升一係拆成多個 Skill,一係接受現狀。

一個 Skill 嘅迭代輪數通常唔超過 3-4 輪。 如果 4 輪仲未收斂,好大機會係 Skill 嘅定義範圍太大——拆成 2 個更窄嘅 Skill 比硬優化一個闊 Skill 效果更好。

七、總結:Skill 訓練嘅核心心法

1
Skill 唔係文件,係模型 — 需要訓練、測試、迭代
2
description 決定「用唔用」,正文決定「用得好唔好」 — 兩者分開優化
3
數據驅動,唔靠感覺 — 跑 Eval 睇觸發率,唔好「試咗兩次覺得得」
4
用戶反饋係最好嘅訓練數據 — 每次糾正 AI 都係一次訓練機會
5
定期回歸測試 — 項目在變、模型在變,Skill 都要跟住變

最小行動:揀你用得多嘅一個 Skill,跑一次 幫我評估 xx skill 的觸發率和輸出質量。睇下數據,你會驚訝咁發現改進空間有幾大。

掃碼關注「AI智聞說」,每日3分鐘掌握AI新知識


寫了個 Skill,AI 有時候用、有時候不用、用了效果也一般?問題不在 Skill 本身,在於你沒有訓練它。這篇講一套完整的 Skill 訓練循環:寫初版 → 跑 Eval → 看數據 → 改進 → 再跑 Eval,讓 Skill 從"能用"進化到"精準"。

圖片

寫在前面

大多數人寫 Skill 的方式是這樣的:

1
寫一份 SKILL.md
2
試了兩次,"好像能用"
3
收工

一個月後發現:有時候 AI 該觸發的時候沒觸發,不該觸發的時候亂觸發。輸出質量時好時壞,全看運氣。

問題在哪?你沒有用數據驅動地訓練它。

Skill 不是寫完就結束的靜態文檔。它是一個需要持續訓練、度量、迭代的"模型行為規範"。好消息是,Claude Code 的 skill-creator 工具已經把整個訓練循環自動化了——你只需要理解原理,然後讓工具幫你跑。

圖片

一、Skill 的兩個核心指標

訓練 Skill 要優化的只有兩件事:

1. 觸發率(Triggering Accuracy)

"該觸發的時候觸發了嗎?不該觸發的時候沒亂觸發嗎?"

這取決於 description 字段寫得好不好。AI 根據 description 判斷"這個 Skill 跟當前任務相關嗎"。description 寫得模糊,就會漏觸發或誤觸發。

2. 輸出質量(Output Quality)

"觸發之後,AI 按 Skill 幹活的效果好不好?"

這取決於 SKILL.md 正文的規則寫得好不好。規則太模糊 AI 會自由發揮,規則沒覆蓋到的地方 AI 會按自己的默認行為來——未必是你想要的。

訓練的目標:把觸發率從 ~65% 拉到 95%,把輸出質量從"勉強能用"拉到"穩定可靠"。

二、訓練循環:4 步閉環

整個訓練過程是一個循環,反覆跑直到滿意:




寫/改 Skill → 跑 Eval → 看數據 → 改進 → 再跑 Eval → ...

第 1 步:寫初版 Skill

初版不用追求完美,能表達核心意圖就行。重點關注:


description 寫清楚"什麼時候用"(以 "Use when" 開頭)

正文寫 3-5 條核心規則

給 1 個完整示例



---
name: commit-message-zh
description: Use when 用戶完成代碼修改準備提交時,生成中文 commit message
---
 
# 中文 Commit Message
 
## 規則
1. commit message 用中文
2. 格式:類型(範圍): 描述
3. 類型包括:feat/fix/refactor/docs/test/chore
4. 描述不超過 50 字
5. 不要寫"更新了代碼"這種廢話,要寫具體改了什麼
 
## 示例
- feat(auth): 添加 GitHub OAuth 登錄
- fix(payment): 修復月度訂閲扣費金額計算錯誤
- refactor(api): 將 user 路由拆分為獨立文件

第 2 步:跑 Eval——讓 skill-creator 幫你測

這一步是關鍵。用 skill-creator 跑評估(需要先安裝:從 github.com/anthropics/skills 倉庫把 skill-creator 目錄放到 ~/.claude/skills/ 下):




幫我評估 commit-message-zh 這個 skill 的觸發準確率和輸出質量

skill-creator 會自動做這些事(以下為簡化示意,實際輸出包含更多細節):

觸發率測試:

1
生成 20 個模擬查詢(10 個應該觸發、10 個不應該觸發)
2
逐個測試 Skill 的 description 能否正確判斷
3
輸出觸發率分數



觸發率評估結果:
- 應觸發的 10 個查詢:8/10 正確觸發 ✓
- 不應觸發的 10 個查詢:9/10 正確未觸發 ✓
- 綜合觸發率:85%
 
誤判案例:
- "幫我寫個 PR 描述" → 錯誤觸發(PR 描述 ≠ commit message)
- "提交代碼" → 未觸發(應該觸發)

輸出質量測試:

1
用 3-5 個真實場景測試 Skill 的輸出
2
對比"有 Skill"和"沒 Skill"的輸出差異
3
評分

第 3 步:看數據,定位問題

根據 Eval 結果,問題通常歸為兩類:

觸發率低?→ 改 description

常見原因:


太寬泛:"Use when writing commit messages"(寫什麼都可能觸發)

太窄:"Use when using git commit -m"(只有精確匹配才觸發)

有歧義:"Use when committing code"(PR 描述也算"committing"嗎?)

輸出質量差?→ 改正文規則

常見原因:


規則太模糊:"寫好 commit message"(什麼叫"好"?)

缺少反面示例:AI 不知道什麼不該做

缺少邊界情況:多文件修改時怎麼寫?破壞性變更怎麼標註?

第 4 步:改進並重跑

根據第 3 步的診斷,做針對性修改。然後再跑一次 Eval,看數字有沒有漲。

比如觸發率從 85% 要拉到 95%,description 改成:




# 改前
description: Use when 用戶完成代碼修改準備提交時,生成中文 commit message
 
# 改後
description: Use when 用戶說"提交"、"commit"、"寫 commit message"或完成一輪代碼修改後要求生成提交信息時。不適用於 PR 描述、changelog、release note。

關鍵改動:加了正面觸發詞 + 加了負面排除詞。這樣 AI 就不會把"寫 PR 描述"誤判為需要這個 Skill。

三、讓 Skill 自進化:3 個機制

訓練一次只是起點。真正厲害的是讓 Skill 持續自動進化

機制 1:用戶反饋驅動迭代

每次 Skill 的輸出不符合你的預期時,直接告訴 AI:

"這個 commit message 不對,多文件修改時應該寫最主要的改動,不要列所有文件"

AI 會自動把這條反饋存入記憶。下次再遇到同樣情況,行為就會改變。

但更進一步——把這條反饋寫回 Skill 本身




## 邊界情況
- 多文件修改:只描述最主要的改動意圖,不逐一列舉文件名
- 修改超過 5 個文件:用"重構 xx 模塊"代替逐一描述

反饋 → 記憶 → 寫回 Skill → 永久生效。這就是自進化。

機制 2:定期跑 Eval 迴歸測試

每兩週跑一次 Eval。原因:


你的項目在演變,規範可能已經變了

你裝了新的 Skill,可能跟舊的衝突

AI 模型更新後行為可能變化

把它當成"單元測試"——代碼改了要跑測試,Skill 改了也要跑 Eval。

機制 3:description 自動優化

skill-creator 有一個殺手級功能:自動優化 description 的觸發準確率




幫我優化 commit-message-zh 的 description,提高觸發準確率

它會:

1
生成 20 個測試查詢
2
跑當前 description 的觸發率(baseline)
3
自動改寫 description(加觸發詞、加排除詞、調措辭)
4
再跑一遍測試
5
對比 before/after,選分數更高的版本

根據社區實測分享(Reddit、Medium 上多位開發者的反饋),觸發率從 ~70% 提升到 ~90% 是可預期的。

四、實戰案例:一個 Skill 的 3 次進化

以我自己的 code-review Skill 為例:

v1:初版(第一次跑 Eval 結果:觸發率 65%,輸出質量 C)




---
name: code-review
description: Use when reviewing code
---
# Code Review
- 檢查安全性
- 檢查性能
- 檢查可讀性

問題:description 太模糊("reviewing code"太寬泛),規則太抽象("檢查安全性"具體查什麼?)。

v2:跑 Eval 後優化(觸發率 82%,輸出質量 B)




---
name: code-review
description: Use when 用戶說"review"、"檢查代碼"、"看看有沒有問題",或在 git commit/push 之前要求審查代碼質量。不適用於功能討論或架構設計。
---
# Code Review
 
## 檢查項(按優先級)
1. 安全:硬編碼密鑰?SQL 注入?未轉義用戶輸入?
2. 錯誤處理:Promise 有 catch 嗎?邊界值處理了嗎?
3. 類型安全:有 any 嗎?類型斷言合理嗎?
4. 可讀性:命名能表達意圖嗎?嵌套超過 3 層了嗎?
5. 重複:有可提取的公共邏輯嗎?
 
## 輸出格式
- 每個問題標明嚴重程度:🔴高 🟡中 🟢低
- 給出具體修復建議,不只是指出問題

改進:description 加了具體觸發詞和排除場景,規則從抽象變具體。

v3:用戶反饋 + 自動優化後(觸發率 95%,輸出質量 A)




---
name: code-review
description: Use when 用戶在代碼修改完成後要求審查質量(觸發詞:review、檢查、看看有沒有問題、幫我過一遍),或在 /commit 之前自動觸發。不適用於:功能需求討論、架構設計、寫新代碼。
---
# Code Review
 
## 鐵律
- 每次 review 必須至少指出一個改進點。如果真的沒問題,說明為什麼沒問題。
- 不要只說"看起來沒問題"——這等於沒 review。
 
## 檢查項(按優先級)
1. **安全**:硬編碼密鑰?SQL 注入?XSS?未驗證的用戶輸入?
2. **錯誤處理**:Promise 有 catch?外部 API 調用有超時?錯誤信息對用戶友好?
3. **類型安全**:有 any?類型斷言有根據?泛型用對了?
4. **邏輯**:邊界值測試了?空值處理了?併發安全?
5. **可讀性**:命名錶達意圖?嵌套 ≤ 3 層?函數 ≤ 30 行?
 
## 輸出格式
- 嚴重程度:🔴必須修 🟡建議修 🟢錦上添花
- 每個問題:位置 + 問題描述 + 修復建議 + 修復代碼
 
## 反面案例(不要這樣輸出)
- ❌ "代碼看起來還行" → 沒有價值
- ❌ "建議加註釋" → 太模糊,具體哪裏加什麼註釋?
- ❌ 列出 20 個低優先級問題 → 信息過載,先說最重要的 3 個

改進:加了鐵律(防止偷懶)、加了反面案例(防止廢話輸出)、description 經過自動優化觸發率到 95%。

五、Skill 數量多了之後的管理

當你有 10+ 個 Skill 時,新問題出現:Skill 之間互相沖突或搶觸發

問題 1:多個 Skill 同時觸發

比如你有 code-review 和 security-review 兩個 Skill,用戶說"幫我檢查下這段代碼"——兩個都想觸發。

解決方案: 在 description 裏明確劃分邊界:




# code-review
description: ... 不適用於專門的安全審查(安全審查用 /security-review)
 
# security-review  
description: Use when 用戶明確要求安全審查、滲透測試、威脅建模...

問題 2:Skill 過時了

項目從 REST 遷到 tRPC 了,但你的 api-design Skill 裏還寫着 REST 的規範。

解決方案: 每月做一次"Skill 年檢":




幫我檢查所有 Skill,看哪些跟當前項目的技術棧/規範已經不匹配了

問題 3:不確定該不該新建 Skill

判斷標準:你是否在不同會話中重複給 AI 同一條糾正指令了?

如果你發現自己反覆說"不對,我們項目應該這樣做"——就值得寫成 Skill。一次性的、只在特定調試場景出現的指令不需要。

問題 4:什麼內容該寫在 CLAUDE.md,什麼該寫成獨立 Skill

分層策略:


CLAUDE.md:放"是什麼"——項目技術棧、目錄結構、常用命令、團隊規範等靜態事實

Skill:放"怎麼做"——具體工作流程、輸出格式、檢查清單、邊界情況處理等動態行為規範

舉例:


"我們用 vitest 做測試" → 寫在 CLAUDE.md

"寫測試時用 AAA 模式、describe 對應一個函數、mock 儘量少用" → 寫成 test-conventions Skill

CLAUDE.md 給 AI 背景知識,Skill 給 AI 執行手冊。兩者配合,不要混在一起。

六、什麼時候停止迭代

不是無限跑 Eval 就是好的。收斂標準:

觸發率 ≥ 90% 就可以停。 100% 不現實——有些邊界查詢本來就有歧義("幫我看看這段代碼"到底是 review 還是解釋?),追求 100% 反而會讓 description 變得過度具體、喪失泛化能力。

輸出質量連續 2 次 Eval 沒有提升就停。 說明當前規則已經到達了這個 Skill 能覆蓋的上限。再想提升要麼拆成多個 Skill,要麼接受現狀。

一個 Skill 的迭代輪數通常不超過 3-4 輪。 如果 4 輪還不收斂,大概率是 Skill 的定義範圍太大了——拆成 2 個更窄的 Skill 比硬優化一個寬 Skill 效果更好。

七、總結:Skill 訓練的核心心法

1
Skill 不是文檔,是模型 — 需要訓練、測試、迭代
2
description 決定"用不用",正文決定"用得好不好" — 兩者分開優化
3
數據驅動,不靠感覺 — 跑 Eval 看觸發率,別"試了兩次感覺行"
4
用戶反饋是最好的訓練數據 — 每次糾正 AI 都是一次訓練機會
5
定期迴歸測試 — 項目在變、模型在變,Skill 也要跟着變

最小行動:挑你用得最多的一個 Skill,跑一次 幫我評估 xx skill 的觸發率和輸出質量。看看數據,你會驚訝地發現改進空間有多大。

掃碼關注「AI智聞說」,每天3分鐘掌握AI新知識