feat(模型標籤閘門): 新增 model-tags.sh 與 reasoning-max 分級,SDLC 階段閘門改由能力標籤判定

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-24 16:05:06 +08:00
co-authored by Claude Opus 5
parent f2029d4cd0
commit 519f1163db
3 changed files with 190 additions and 11 deletions
+31 -8
View File
@@ -4,7 +4,8 @@
| 標籤 | 意義 |
| --- | --- |
| reasoning-high | 高階推理,適合規劃與分析 |
| reasoning-max | 頂級推理,各家當代最強一階;需求拆解、架構決策、跨檔案分析 |
| reasoning-high | 高階推理,足以判讀規格與寫實作 |
| coding | 程式碼產生與修改能力佳 |
| fast | 低延遲 |
| cheap | 低成本 |
@@ -15,25 +16,42 @@
| 模型 | 標籤 |
| --- | --- |
| claude-fable-5 | reasoning-high, coding, long-context, vision |
| claude-opus-5 | reasoning-high, coding, long-context, vision |
| claude-fable-5 | reasoning-max, reasoning-high, coding, long-context, vision |
| claude-opus-5 | reasoning-max, reasoning-high, coding, long-context, vision |
| claude-sonnet-5 | reasoning-high, coding, fast, long-context, vision |
| claude-haiku-4-5 | coding, fast, cheap, long-context, vision |
| gpt-5.x / o 系列(codex 預設) | reasoning-high, coding, long-context, vision |
| gpt-5.x / o 系列(codex 預設) | reasoning-max, reasoning-high, coding, long-context, vision |
| gpt-5.x-mini / codex-mini | coding, fast, cheap |
| gemini-3-pro | reasoning-high, coding, long-context, vision |
| gemini-3-pro | reasoning-max, reasoning-high, coding, long-context, vision |
| gemini-3-flash | coding, fast, cheap, long-context, vision |
| copilot 內建(gpt/claude 選項) | 依所選底層模型比照上表 |
標籤蘊含關係:`reasoning-max` 是 `reasoning-high` 的上位標籤。補表時,帶 `reasoning-max` 的模型**必須同時列出 `reasoning-high`**——比對是逐標籤字面比對,不推導上下位關係,漏列會讓該模型卡在只要求 `reasoning-high` 的階段。
## SDLC 階段需求
| 階段 | 必要標籤 |
| --- | --- |
| 規劃(plan) | reasoning-high |
| 分析(analyze) | reasoning-high |
| 規劃(plan) | reasoning-max |
| 分析(analyze) | reasoning-max |
| 實作(implement) | coding |
| 維護(maintain) | 任意 |
規劃與分析要求 `reasoning-max`,實作只要求 `coding`:需求拆解與架構決策一步走錯,後面整批工作包都跟著錯,成本遠高於實作階段的單點失誤。
### 判定方式(程式層,不由模型自評)
閘門一律由腳本判定,**模型不得自行宣稱具備標籤**:
| 工具 | 職責 |
| --- | --- |
| `jsc-cli/tools/model-tags.sh gate {階段} {模型 id}` | 查上面兩張表,印 `PASS`/`FAIL:{缺少的標籤}`/`UNKNOWN-MODEL`;exit code 0/1/2 |
| `jsc-cli/tools/model-tags.sh sync` | 把兩張表寫成 `$JSC_HOME/model-tags.tsv`,供 hook 讀取 |
| `jsc-hooks/hooks/sdlc-gate.sh lock {階段}` | 從 transcript 讀出**實際**模型 id,比對必要標籤;不符就拒絕上鎖並回報 |
| `jsc-hooks/hooks/sdlc-gate.sh check` | 每次送出提示時比對;不符即擋下該輪提示(exit 2) |
模型 id 一律取自 transcript 記錄的實際值,不採用模型自我回報——自我回報無法驗證,等同沒有閘門。
## 階段指定模型(角色式路由)
每個 SDLC 階段可以指定一個模型,並附上遞補模型。設定格式一行一階段:
@@ -55,6 +73,11 @@ stage=model[,fallback1[,fallback2...]]
遞補鏈語意:鏈上第一個模型優先;前面的模型不可用時依序後退到下一個。
指定模型優先於標籤比對:階段有指定模型時直接用指定鏈;只有階段沒有指定模型時,才用上表的必要標籤判定。
**標籤是閘門的唯一判準**:階段能不能跑,一律由「SDLC 階段需求」的必要標籤決定。指定模型鏈不參與放行判定,只有兩個用途:
1. 閘門擋下時,指出建議切換到哪一個模型(鏈上第一個滿足該階段必要標籤的模型)。
2. 同樣合格的模型有多個時,表達偏好順序。
因此「指定鏈上的模型」若不具備該階段必要標籤,照樣被擋;設定檔不能當成繞過閘門的後門。
表列以外的模型:依 `jsc-ask:ask` 規則詢問使用者或依供應商文件補表後再判定。