name: skill-evaluator-srl description: 對 Skill 進行質量評估打分的 Skill,輸出評分報告與改進建議。評估 skill、skill 評分、SRL 評估、skill 質量、檢查 skill、skill review、skill score
本 Skill 基於 SRL (Skill Reliability Level) 框架,對目標 Skill 進行評估打分。
核心架構:AI 評審 + 指令碼計算
AI 閱讀 Skill 全部內容
→ AI 對五維度逐項評分(輸出結構化 JSON)
→ Python 指令碼加權計算 + 等級對映 + 報告生成
核心理念:Skill 的置信度 = 輸出中可被外部驗證的客觀事實佔比。可驗證的外部事實越多,置信度越高;模型自主推理越多,幻覺累積風險越高。
SKILL.md_meta.json 獲取元資訊通過閱讀上述檔案,形成對 Skill 的完整理解: - 這個 Skill 做什麼?解決什麼問題? - 它的工作流有多少步驟/階段? - 它依賴哪些外部系統(CLI/API/DB/網頁/AI推理)? - 它有哪些指令碼?指令碼做什麼? - 它的錯誤處理策略是什麼?
在進入階段 2 之前,先判斷目標 Skill 是否提供了足夠資訊進行有意義的評估:
拒絕評估條件(滿足任一則停止): - SKILL.md 不存在 - SKILL.md 總行數 < 10 行(排除空行和 frontmatter) - SKILL.md 中沒有任何可識別的工作流/階段/步驟描述
觸發時的行為:
⚠️ 資訊不足,無法進行有意義的 SRL 評估。
原因: [具體原因,如"SKILL.md 僅有 5 行有效內容"]
建議:
- 補充 SKILL.md 中的工作流描述(階段劃分、步驟說明、錯誤處理策略等)
- 最低要求: 至少描述 Skill 的目標、工作流步驟、依賴的資料來源
停止評估,不輸出任何評分。
降級評估條件(不拒絕但標註不確定性): - SKILL.md 有效行數 < 50 行 - 沒有 scripts/ 目錄(無法評估指令碼質量) - 沒有 references/ 目錄(缺少上下文輔助) - 評估目標是 skill-evaluator-srl 自身(自評場景,存在迴圈論證風險)
降級時的行為:
- 繼續評估,但在報告開頭新增警告:⚠️ 目標 Skill 提供的資訊有限(有效行數 X 行),以下評估的置信度較低。
- 如果是自評場景,額外新增警告:⚠️ 這是自評場景(評估工具評估自身),失敗語義清晰度等維度可能因迴圈論證而偏高。
- 在階段 3 的 JSON 輸出中新增頂層欄位 "evaluation_confidence": "low"(正常評估時為 "normal")
基於對 Skill 內容的深度理解,逐一評估以下 5 個維度 + 3 個修正因子。
評分方法:先提取事實,再基於事實打分
每個維度的評審分兩步走: 1. 回答錨定問題:先回答一組客觀事實問題(列出具體行號、命令、數量等),這些答案可被複核 2. 基於答案打分:根據錨定問題的答案,參照評分公式/參考表給出子項分數
評分原則:
- 每個維度 0-100 分
- 每個維度包含 2-4 個子項,子項分數總和應等於維度總分
- 每個維度必須給出至少 2 條具體證據(引用 SKILL.md 中的具體行號或指令碼中的具體程式碼位置)
- 評分要基於實際閱讀到的內容,不可腦補 Skill 沒寫的能力
- evidence 格式示例:"SKILL.md:47 使用 python3 srl_analyzer.py 執行指令碼"、"scripts/analyzer.py:135 呼叫 subprocess.run()"
證據分層規則(重要): 評分時必須區分以下三個層級,並按層級賦予不同權重: - L1 規則宣告:SKILL.md 中寫了"應該做 X"→ 可計入評分,但最高只能達到該子項滿分的 60% - L2 規則實現:指令碼程式碼中實際實現了該規則(如 try-except、validate_input)→ 可達滿分的 80% - L3 規則驗證:有測試用例或實際執行記錄證明規則生效→ 可達滿分的 100%
例如:"SKILL.md 說應該拒絕評估" = L1,"指令碼程式碼中有 if lines < 10: exit(1)" = L2,"測試了一個 3 行的 Skill 確實被拒絕" = L3。
步驟計數規則(用於幻覺暴露面維度的 Q1/Q2):
- 步驟 = SKILL.md 中明確標註的階段(如"階段 0"、"階段 1"),不包括階段內部的子步驟
- 如果 SKILL.md 沒有明確的階段標記,則按頂層 ### 標題計數
- 必須在 Q1 回答中列出每個步驟的行號和簡述,確保計數口徑透明
單維度資訊不足宣告:
如果某個維度的錨定問題全部回答為"無"或"未提及",不要強行給出評分。而是:
- 該維度評分設為 0
- evidence 中寫明 "資訊不足: SKILL.md 中未找到與此維度相關的任何描述"
- 在 improvement_suggestions 中標註需要補充哪些資訊
評估 Skill 工作流中,有多少步驟依賴可被外部驗證的工程化手段。
Q1 錨點盤點: 列出 SKILL.md 和指令碼中所有工程錨點(CLI/Shell 命令、API/DB 呼叫、MCP 工具、檔案系統操作),每個標註行號和內容。 Q2 覆蓋率: 上述錨點覆蓋了總共 N 個階段中的幾個?哪些階段沒有任何工程錨點? Q3 驗證閉環: 是否存在"執行操作 → 寫入檔案 → 讀取確認"或"呼叫 API → 校驗返回值"的驗證閉環?列出所有閉環。
| 子項 | 滿分 | 計算方式 |
|---|---|---|
| anchor_coverage | 40 | 先算: 覆蓋率 = 有錨點的階段數 / 總階段數(如 3/6=50%)。再查表: 覆蓋率≥80%→33-40分, 60-79%→22-32分, 40-59%→12-21分, 20-39%→5-11分, <20%→0-4分。注意: 嚴格按算出的百分比查表,不可跨區間。 |
| anchor_intensity | 30 | 密度 = 錨點總數 / 總階段數。密度≥3→25-30, 2-2.9→18-24, 1-1.9→10-17, 0.5-0.9→4-9, <0.5→0-3 |
| verification_loop | 30 | 有完整的驗證閉環(操作→確認)≥2處→22-30, 1處→12-21, 有錨點但無閉環→4-11, 無錨點→0-3 |
設計說明:不再按錨點型別(CLI/API/MCP)分別計分。一個純 CLI Skill 只要覆蓋率高、密度大、有驗證閉環,同樣可以得滿分。
評估純 AI 推理且無外部驗證的步驟佔比。分數越高 = 暴露面越小 = 越好。
Q1 步驟盤點: 按上述「步驟計數規則」列出 SKILL.md 中所有階段(行號+編號+簡述),標記每步屬於哪類:
- [工程] = 該步有 CLI/API/DB/檔案系統 等外部驗證手段
- [AI] = 該步純靠 AI 推理,無外部驗證
- [混合] = 該步有 AI 推理但結果會被後續工程步驟驗證
Q2 統計: 工程步驟 X 個,AI 步驟 Y 個,混合步驟 Z 個,總步驟 N 個。純 AI 佔比 = Y / N = ?%
Q3 輸出格式: 最終輸出是什麼格式?結構化資料(JSON/表格)?Markdown 報告?自由文本?
| 子項 | 滿分 | 計算方式 |
|---|---|---|
| speculative_ratio | 40 | 純AI佔比 <10%→35-40, 10-25%→25-34, 25-40%→15-24, 40-60%→8-14, >60%→0-7 |
| external_validation | 30 | 混合步驟佔比(有驗證配套的AI步驟)。≥50%→22-30, 20-49%→12-21, <20%→0-11 |
| output_determinism | 30 | 純結構化輸出(所有欄位確定性,無自由文本欄位)→22-30; 結構化為主但含自由文本欄位(如 evidence 為自由文本)→12-21; 自由文本為主→0-11 |
評估 Skill 遇到錯誤時,是停下來報錯還是腦補繼續跑。
Q1 錯誤處理盤點: 在 SKILL.md 和指令碼中,找出所有錯誤處理相關的描述或程式碼(行號+內容摘要)。分為:
- [停止型] = 檢測到錯誤後停止執行並通知使用者(如"如果失敗,停止並報告")
- [降級型] = 檢測到錯誤後切換備用方案並標註(如"如果主源失敗,用備源並標記低置信度")
- [模糊型] = 提到了錯誤但處理不明確(如"如果出錯,嘗試其他方法")
Q2 置信度機制: Skill 中是否有明確的置信度/不確定性標註機制?找出相關描述(行號+內容)。如果沒有,寫"無"。
Q3 "我不知道": Skill 是否有明確指導在資訊不足時拒絕輸出?找出相關描述(行號+內容)。如果沒有,寫"無"。
| 子項 | 滿分 | 計算方式 |
|---|---|---|
| error_handling_strategy | 40 | 停止型≥3處→30-40, 停止型1-2處+降級型→20-29, 僅模糊型→10-19, 無→0-9 |
| confidence_degradation | 30 | 有明確的高/中/低分級→22-30, 偶爾標註不確定→10-21, 無→0-9 |
| idk_capability | 30 | 有明確拒絕輸出的指導→22-30, 有"待驗證"標註→10-21, 無→0-9 |
評估 Skill 輸出的資訊是否可追溯到可驗證的資料來源。
Q1 資料來源盤點: 列出 Skill 依賴的所有資料來源,每個標註型別:
- [強溯源] = 官方 API / CLI 輸出 / 資料庫查詢(有明確契約)
- [中溯源] = 第三方聚合 API(有介面但不完全可控)
- [弱溯源] = 網頁爬取(結構可能變化)
- [無溯源] = AI 自主推理(模型"知識")
Q2 溯源統計: 強溯源 A 個,中溯源 B 個,弱溯源 C 個,無溯源 D 個。加權比例 = (A×1.0 + B×0.6 + C×0.3 + D×0) / (A+B+C+D) = ?
Q3 引用標註: Skill 是否要求在輸出中標註資料來源?找出相關描述(行號+內容)。
Q4 獨立驗證: 使用者拿到 Skill 的輸出後,能否獨立驗證其準確性?需要什麼資訊?
| 子項 | 滿分 | 計算方式 |
|---|---|---|
| source_classification | 40 | 加權比例 ≥0.8→35-40, 0.6-0.79→25-34, 0.4-0.59→15-24, 0.2-0.39→5-14, <0.2→0-4 |
| citation_annotation | 30 | 有明確的來源標註要求→20-30(按嚴格程度), 偶爾提到→8-19, 無→0-7 |
| independent_verifiability | 30 | 使用者可完全獨立驗證→22-30, 大部分可驗證→12-21, 少量可驗證→4-11, 無法驗證→0-3 |
推斷 Skill 的同輸入同輸出穩定性。
Q1 資料來源確定性: 基於維度4的資料來源盤點,判斷 Skill 屬於哪個 Tier: - Tier 1: 主要強溯源,幾乎無弱/無溯源 - Tier 2: 混合,有一定弱溯源 - Tier 3: 主要弱溯源或無溯源
Q2 狀態管理: Skill 中是否有以下狀態持久化機制?逐項回答有/無+行號: - checkpoint/進度儲存? - 中間結果寫入檔案? - 資料庫記錄? - 如果全無,狀態如何在步驟間傳遞?(純上下文?)
Q3 隨機源: 列出所有可能導致"同輸入不同輸出"的因素(如:依賴搜尋引擎結果、網頁內容變化、AI 推理隨機性等)。
| 子項 | 滿分 | 計算方式 |
|---|---|---|
| tier_determinism | 40 | Tier 1→30-40, Tier 2→15-29, Tier 3→0-14 |
| state_management | 30 | 有完整持久化(checkpoint+檔案寫入)→22-30, 有部分→10-21, 純上下文→0-9 |
| step_determinism | 30 | 隨機源≤1個→22-30, 2-3個→10-21, ≥4個→0-9 |
基於維度 5 Q1 的回答,確定 Skill 的 Tier 分類:
| Tier | 特徵 | 典型資料來源 |
|---|---|---|
| Tier 1 確定性 | 主要使用 CLI/API/DB,幾乎無網頁爬取 | GitHub API, PostgreSQL, 檔案系統 |
| Tier 2 半確定性 | 混合使用 API 和網頁,有快取機制 | 天氣API, 電商頁面, 第三方聚合 |
| Tier 3 非確定性 | 主要依賴開放網際網路搜尋或 AI 推理 | 搜尋引擎, 使用者生成內容, AI 生成 |
這三個維度不直接參與加權,但會修正上述五維評分。每個修正因子也通過錨定問題評審。
錨定問題: - Q1: 列出 Skill 依賴的所有外部系統/介面(包括 AI 模型本身)。每個標註:最近一次已知的 breaking change 是什麼時候?(如果不確定寫"未知") - Q2: 6 個月後這個 Skill 有多大機率還能正常工作?列出最可能失效的環節(包括 AI 模型升級可能導致的評分傾向變化)。 - Q3: Skill 中是否有快取/版本鎖定/重新整理機制?找出相關描述(行號+內容)。
評分: 0-100。連續修正:修正量 = max(0, (50 - 時效性評分) / 50) × 20%,即評分 50 時不修正,0 時扣減 20%,線性插值。
錨定問題: - Q1: Skill 或指令碼中是否有輸入校驗?列出所有校驗邏輯(行號+校驗內容)。 - Q2: 如果某個中間步驟失敗,Skill 是否能跳過/回退/降級?找出相關描述。 - Q3: Skill 是否處理了邊界條件(空輸入、超長輸入、格式錯誤等)?
評分: 0-100。連續修正:修正量 = max(0, (50 - 魯棒性評分) / 50) × 10%,即評分 50 時不修正,0 時扣減 10%,線性插值。
發現更多技能外掛,請訪問7w4.net。
錨定問題: - Q1: Skill 的步驟鏈路有多長(多少個有依賴關係的步驟)? - Q2: 是否有步驟的輸出是下一步的唯一輸入(緊耦合)?列出這樣的步驟對。 - Q3: 鏈路中是否有中間檢查點可以獨立驗證正確性?
評分: 0-100。連續修正:修正量 = max(0, (50 - 級聯穩定性評分) / 50) × 20%,即評分 50 時不修正,0 時扣減 20%,線性插值。
重要:每個維度必須包含 anchoring_answers 欄位,完整記錄錨定問題的回答過程,確保評分推導可複核:
{
"skill_name": "skill 名稱",
"skill_path": "/path/to/skill",
"description": "skill 簡短描述",
"tier": 2,
"dimensions": {
"anchor_density": {
"score": 70,
"sub_scores": {
"anchor_coverage": 30,
"anchor_intensity": 22,
"verification_loop": 18
},
"anchoring_answers": {
"Q1_anchor_list": [
{"type": "CLI", "location": "SKILL.md:47", "content": "python3 srl_analyzer.py"},
{"type": "檔案系統", "location": "SKILL.md:50", "content": "讀取 _meta.json"}
],
"Q2_coverage": "2/5 階段有錨點 = 40%",
"Q3_verification_loops": [
"JSON輸出 → validate_input() 校驗"
]
},
"evidence": [
"SKILL.md:47 使用 python3 srl_analyzer.py 執行指令碼",
"scripts/xxx.py:135 呼叫 subprocess 執行 CLI 命令"
]
},
"hallucination_exposure": {
"score": 65,
"sub_scores": {
"speculative_ratio": 25,
"external_validation": 20,
"output_determinism": 20
},
"evidence": ["..."]
},
"failure_transparency": {
"score": 55,
"sub_scores": {
"error_handling_strategy": 20,
"confidence_degradation": 18,
"idk_capability": 17
},
"evidence": ["..."]
},
"traceability": {
"score": 60,
"sub_scores": {
"source_classification": 25,
"citation_annotation": 18,
"independent_verifiability": 17
},
"evidence": ["..."]
},
"reproducibility": {
"score": 50,
"sub_scores": {
"tier_determinism": 20,
"state_management": 15,
"step_determinism": 15
},
"evidence": ["..."]
}
},
"corrections": {
"timeliness": 70,
"robustness": 60,
"cascade_stability": 55
},
"improvement_suggestions": [
"🔧 [失敗語義清晰度] 當前 55/100 → 在階段 X 的 API 呼叫後新增 HTTP 狀態碼檢查,非 200 時停止執行並報告",
"🔧 [可重現性] 當前 50/100 → 新增 checkpoint 檔案將中間狀態寫入磁碟,減少對長上下文的依賴"
],
"metadata": {
"total_files": 8,
"total_lines": 500,
"skill_md_lines": 200,
"total_phases": 5,
"total_steps": 20,
"has_scripts": true,
"has_references": true,
"script_files": ["scripts/xxx.py"]
}
}
在輸出 JSON 前進行自檢,並在 JSON 頂層新增 "quality_checks" 欄位記錄檢查結果:
- [ ] 每個維度的 score 等於其 sub_scores 所有子項之和
- [ ] 所有分數在 0-100 範圍內
- [ ] 每個維度至少有 2 條 evidence
- [ ] 每個維度包含 anchoring_answers 欄位
- [ ] improvement_suggestions 按維度得分從低到高排序,為最低的 3 個維度各給 1-2 條建議
- [ ] 建議必須是具體可執行的(不是"改進錯誤處理",而是"在第X步的API呼叫後新增返回值檢查")
在 JSON 頂層新增:
"quality_checks": {
"sub_scores_sum_match": true,
"scores_in_range": true,
"evidence_count_ok": true,
"anchoring_answers_present": true,
"all_passed": true
}
自檢失敗時的處理:
如果自檢發現 sub_scores 求和不等於 score,或分數超出範圍:
1. 優先自行修正:調整 sub_scores 使其求和等於 score,或將越界分數鉗位到 0-100
2. 修正後再輸出:不要輸出已知錯誤的 JSON
3. 如果無法自行修正(如發現邏輯矛盾無法調和):直接輸出當前 JSON 並在 improvement_suggestions 首條新增 "⚠️ 評分自檢未通過: [具體問題],建議人工複核",讓指令碼的 validate_input() 做最終攔截
# 方式一:通過 stdin(路徑使用本 Skill 目錄的絕對路徑)
echo '<JSON資料>' | python3 <本Skill的scripts目錄絕對路徑>/srl_analyzer.py
# 方式二:通過檔案
python3 <本Skill的scripts目錄絕對路徑>/srl_analyzer.py --input /tmp/srl-eval-input.json
# 檢視輸入 JSON Schema 說明
python3 <本Skill的scripts目錄絕對路徑>/srl_analyzer.py --schema
# 示例(假設 Skill 位於專案 .claude/skills/ 下):
# python3 /absolute/path/to/.claude/skills/skill-evaluator-srl/scripts/srl_analyzer.py --input /tmp/srl-eval-input.json
Markdown/JSON 報告生成
[ ] 獲取指令碼輸出的報告
.srl-report.md.srl-report.json# 生成 Markdown 報告
echo '<JSON>' | python3 <本Skill的scripts目錄絕對路徑>/srl_analyzer.py > /path/to/target-skill/.srl-report.md
# 生成 JSON 報告
echo '<JSON>' | python3 <本Skill的scripts目錄絕對路徑>/srl_analyzer.py --json > /path/to/target-skill/.srl-report.json
如果是批次評估模式:
- [ ] 逐個 Skill 執行階段 1-4
- [ ] 彙總所有結果,生成排名表
- [ ] 傳入 JSON 陣列給指令碼使用 --batch 模式