Skip to content

feat(eval): model-judgment eval harness — fixture defects + grader + ensemble-eval skill#19

Merged
kiki830621 merged 1 commit into
mainfrom
test/eval-harness
Jun 10, 2026
Merged

feat(eval): model-judgment eval harness — fixture defects + grader + ensemble-eval skill#19
kiki830621 merged 1 commit into
mainfrom
test/eval-harness

Conversation

@kiki830621

Copy link
Copy Markdown
Contributor

摘要

把測試金字塔的最後一塊做完:模型判斷品質(reviewer 抓不抓得到真缺陷、apply_fixes 改稿改得對不對)。確定性 surface 已全由 test/ 覆蓋(bats 59 + node 36);這塊非確定、貴、慢,不適合單元測試 → 走 eval harness:fixture 論文故意埋缺陷 → 跑 K 次真 ensemble → 容差斷言(每缺陷 ≥ minHits 次被抓到)。手動偶爾跑、絕不進 CI。

新增

檔案 內容
eval/fixtures/stats-paper/ 合成統計論文,埋 4 個缺陷:捏造文獻(Tanaka & Whitfield 2019,連期刊都是假的)、錯平均(paper 5.42 vs ground-truth 4.42)、錯 t 值(6.34 vs 2.79)、Abstract/Method 樣本數不一致(120 vs 102)。附 ground-truth analysis/results.csv + manifest.json(match patterns / fix checks)。
bin/pai-eval-grade eval 的確定性評分器 —— eval 裡唯一可單元測的部分,所以有單元測。detect = K 次 run 容差聚合(match_any/match_all 對同一 finding、integrity findings 排除於命中、minHits 預設過半);fix = 修稿驗證(planted 文字消失 + corrected 值出現)。
test/pai-eval-grade.test.mjs 11 個 regression(match 語意、容差聚合、裸 array、integrity 排除、caughtBy、fix 三態、用法錯誤)。CI 的 node glob 自動納入。
skills/ensemble-eval/SKILL.md dev 工具 skill:K 次真 ensemble → 存 findings → grade(+ --apply-fix 在 temp 複本上驗修稿)。

關鍵設計紀律(寫進 skill 鐵律)

  • reviewer context 必須中性:manifest/「eval」字眼絕不進 ensemble prompt —— 否則 reviewer 被 prime 去找碴,量到的是 prompted recall 不是 natural recall。
  • fixture 唯讀:apply-fix 只動 temp 複本。
  • 容差斷言:單次 miss 是雜訊,K 次 < minHits 才是訊號。
  • 絕不進 CI:每次 eval = K×5 agents。CI 只跑確定性 test/

End-to-end smoke 驗證(實跑 1 次真 ensemble)

academic profile、codex 關、中性 context、K=1 + --min-hits 1

5 agents 全完成(integrity 0)、42 findings、verdict FINDINGS

hallucinated-ref: hits=1 by=[reference-verifier, devils-advocate, writing] ✅
wrong-mean:       hits=1 by=[methodology, devils-advocate, writing, number-verifier] ✅
wrong-t:          hits=1 by=[methodology, devils-advocate, writing, number-verifier] ✅
n-inconsistency:  hits=1 by=[methodology, writing, number-verifier, devils-advocate] ✅
→ grader pass, exit 0

4/4 缺陷命中、每個被 3–4 個 lens 交叉證實。Bonus:DA 甚至指出假數字的「編造指紋」({5.42, 6.34, p<.001} 成套自洽、唯獨 d=0.55 是真實分析的殘留物,反推 t=2.78≈ground truth 2.79)—— 這不是埋的考點,是 ensemble 自己推理出來的。

驗證(確定性部分)

$ ./test/run.sh
shellcheck(3) ✓ | py_compile ✓ | bats 59/59 ✓ | node 8+11+17+11 ✓

版本

2.16.02.17.0(plugin.json + marketplace.json 同步)。CHANGELOG 已補 [2.17.0]

測試金字塔(本 PR 後,完整)

內容 在哪跑
單元(確定性) diff 建構、harness 接線、CSV/verdict 解析、迴圈狀態機、commit、eval 評分器 CI 每次 push
eval(模型品質) 偵測率(K 次容差)+ apply-fix 修稿 /ensemble-eval 手動

…ensemble-eval skill

測試金字塔最後一塊:模型判斷品質(reviewer 偵測率 + apply_fixes 修稿)。
確定性 surface 已全由 test/ 覆蓋;這塊走 eval —— 埋缺陷 fixture → K 次真
ensemble → 容差斷言。手動跑、絕不進 CI。

新增:
- eval/fixtures/stats-paper/ — 合成論文埋 4 缺陷(捏造文獻、錯平均 5.42/4.42、
  錯 t 6.34/2.79、N 120/102 不一致)+ ground-truth CSV + manifest。
- bin/pai-eval-grade — eval 的確定性評分器(detect K-run 容差聚合 /
  fix 修稿驗證;integrity findings 排除於命中)。test/pai-eval-grade.test.mjs(11)。
- skills/ensemble-eval/SKILL.md — dev 工具 skill。鐵律:fixture 唯讀、
  reviewer context 中性(不洩 eval 字眼防 prompted recall)、不進 CI。

End-to-end smoke(實跑 1 次真 ensemble,codex 關):5 agents 全完成、
42 findings、4/4 缺陷命中(各被 3-4 個 lens 交叉證實)、grader exit 0。

bump 2.16.0 → 2.17.0(plugin.json + marketplace.json)。
@kiki830621 kiki830621 merged commit 9abc498 into main Jun 10, 2026
1 check passed
@kiki830621 kiki830621 deleted the test/eval-harness branch June 10, 2026 07:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant