品質ゲートでは測れないこと
Stage 1 / Stage 2 の品質ゲートは「出力が最低条件を満たすか」「以前より悪くなっていないか」を OK/NG の二値で返します。しかし「プロンプトを変えたらどれだけ良くなったか」という問いには答えられません。
改善量を測るには、点数が要ります。品質ゲートのように「通過した/しなかった」だけでは、軽微な改善も大幅な改善も同じ「通過」にまとめられてしまうためです。
ここで quality-eval(品質評価採点)が登場します。
評価軸(rubric)の定義
採点の軸は機能ごとに設計します。たとえば LP コピー生成タスクなら「具体性」「訴求力」「論理の流れ」の 3 軸、Q&A 応答なら「正確性」「簡潔さ」「丁寧さ」の 3 軸、といった形です。
# quality_axes.py(例)
AXES = {
"specificity": "具体的な数値・固有名詞を使っているか(1–10)",
"appeal": "読者の購買意欲を喚起するか(1–10)",
"logical_flow": "段落の流れに論理的な一貫性があるか(1–10)",
}
AI ジャッジには各軸を 1〜10 の整数で採点させ、採点理由も JSON で返させます。採点理由を記録しておくと、スコアが下がった原因を後から追えます。
2 つの採点モード
**絶対評価(absolute)**では、ゴールデンと生成結果を独立に採点します。それぞれのスコアを引き算した Δ(generated − golden)がプロンプト改善の正味の効果です。Δ > 0 なら改善、Δ < 0 なら悪化です。
ペアワイズ(pairwise)では、ゴールデンと生成結果を並べて「どちらが良いか」を AI に選ばせます。複数ケースで集計した勝率が改善の目安になります。ペアワイズは微妙な差を検出しやすい反面、どちらが「新しい」かが AI にわかると判定が偏る(Self-Preference Bias)リスクがあります。
繰り返し採点と信頼区間
1 回の採点で出た Δ や勝率は「偶然か、実力か」が区別できません。AI ジャッジは温度パラメータがある確率的なモデルなので、同じ入力でもスコアが揺れます。
--repeat N(N >= 2)を指定すると、各ケースを N 回採点して統計を取ります。温度を 0 にすると各回がほぼ同一になり意味がないため、未指定時は自動で 0.7 に引き上げます。
- 絶対評価: Δ の正規近似 95% 信頼区間(CI)を計算する
- ペアワイズ: 勝率の Wilson 95% CI を計算する
CI がゼロ差(絶対評価なら Δ=0、ペアワイズなら勝率 50%)を含まなければ 有意=✓ をレポートに付けます。有意マーカーのない改善は「誤差の範囲内かもしれない」と判断します。
Self-Preference Bias を避ける
生成モデルに自分の出力を採点させると、自分の回答に高い点を付けがちです(preference leakage)。これを避けるため、--judge-model オプションで生成モデルと異なるモデルを採点専用に指定します。
docker compose run --rm sim \
--quality-eval \
--repeat 5 \
--judge-model claude-opus-4-5
出力成果物
実行後に 2 つのファイルが生成されます。
quality_eval.md── 軸ごとの Δ・勝率・有意マーカーをまとめたレポートquality_eval.csv── 生スコア(repeat 列付き)
quality_eval.csv は後続のリリースゲートが「品質が有意に改善したか」を判定する第 3 シグナルとして読み込みます。
まとめ
- 品質ゲートの OK/NG では「どれだけ改善したか」は測れない。量を測るには採点が必要
- 絶対評価はΔで改善量を、ペアワイズは勝率で相対優位を見る
--repeat Nで繰り返し採点し、信頼区間で「誤差か実差か」を判別する--judge-modelで採点者を生成モデルと分離し、Self-Preference Bias を防ぐ- 生成された
quality_eval.csvはリリースゲートの第 3 シグナルとして使われる