AI実践

AIの出力品質を、
「なんとなく」で語らない

朝刊エージェントに評価ハーネスを組み込んだ
重複率・カテゴリ精度・見出し忠実性。毎朝のAI出力を3つの指標で測りはじめたら、改善の議論が変わった。

2026年6月 読了 約12分 LLMの出力品質に悩む方向け

この記事のポイント

  • AI出力の体感レビューをやめ、重複率・カテゴリ精度・見出し忠実性の3指標で毎配信を採点する評価ハーネスを作った
  • コードで測れる指標はコードで(無料)、意味判断だけLLM-as-Judgeに集約して1配信あたり実測 約$0.003。評価にもコスト設計がいる
  • 前提になるのは「配信ごとに入力と出力を丸ごとアーカイブする」こと。記録があれば、指標は後からいくらでも足せる
SECTION 1

「今朝の紙面、ちょっと微妙だったな」をどうするか

自作の朝刊エージェントが毎朝6:30にニュースメールを届けてくれるようになって、2ヶ月半が経った。動き続けるシステムには、動き続けるシステム特有の悩みが出てくる。

「今朝の紙面、ちょっと微妙だったな」——これだ。

昨日載った記事がまた載っている。金融の記事がAIカテゴリに入っている。見出しが元記事の内容と微妙に違う。どれも毎回ではない。でも、たまにある。

問題は、その「たまに」を体感でしか把握していなかったことだ。プロンプトを直して「直った気がする」と思っても、それは今日の紙面がたまたま良かっただけかもしれない。逆に悪化していても、数日は気づけない。LLMの出力は毎回違うので、1回の観察では何も言えないのだ。

コードの品質ならテストを書く。ではLLMの出力品質には何を書くか。答えは評価ハーネス——出力を継続的に採点する仕組みだった。機械学習の世界で「evals」と呼ばれているものを、個人開発のスケールに落として組み込んでみた。

SECTION 2

評価の前に、記録——実行アーカイブという土台

評価ハーネスを作ろうとして最初に気づいたのは、評価したくても材料が残っていないことだった。配信されたメールは残っている。でも「そのときLLMに何を入力したか」が残っていなければ、出力の良し悪しは判定できない。見出しが元記事に忠実かどうかは、元記事がないと確かめようがない。

そこでまず、配信のたびに以下を丸ごとS3にアーカイブするようにした。

1配信分の実行アーカイブ(RunArchive)

  • 収集ソースの生データ — LLMに渡したRSS・Webページ本文そのもの
  • 紙面に載った記事 — 集約・重複除去後の最終出力
  • 注目記事(picks) — 編集長コメント付きのピックアップ
  • 実行時点のトピック定義 — カテゴリ精度を判定する基準
  • エージェント別の実行統計 — トークン数・実行時間

ポイントは、これが入力と出力のペアだということ。これがあれば「同じ入力でプロンプトだけ変えたらどうなるか」というA/B再実行もできるし、良い配信・悪い配信の実例を集めてゴールデンセット(正解データ集)の原料にもなる。

コストはほぼゼロだ。1配信分のJSONはたかが知れていて、S3の保存料は誤差の範囲。後から「あのとき記録しておけば」と思っても、過去のデータは二度と手に入らない。記録だけは、評価の設計が固まる前から始めておく価値がある。

SECTION 3

指標①: 重複率はコードで測る(無料)

最初の指標は重複率。「同じ記事が同じ紙面や直近の配信に2回載っていないか」だ。一番目につく品質問題で、新聞としては一番恥ずかしいやつでもある。

これはLLMに聞くまでもなく、コードで判定できる。

URL正規化による突き合わせ

トラッキングパラメータ等を除去したURLで一致を見る。完全一致の再掲はこれで捕まる。

タイトルのbigram類似度

URLが違っても同じニュースはある(配信元違い・続報など)。タイトルを2文字ずつの断片(bigram)に分解し、断片集合の重なり(Jaccard係数)が閾値0.75以上なら同一候補と判定する。

bigram類似はたいそうな機械学習ではない。文字列処理だけの素朴な手法だ。でも日本語ニュースタイトルの「同じ話題の言い換え」を拾うには十分で、なにより実行コストがゼロ円。毎配信どころか、過去全配信に対して何度でも走らせられる。

「AIの評価」と聞くとAIで評価したくなるが、コードで測れる指標から先に作る。

決定的で、無料で、毎回同じ基準で測れる。LLMを使う評価は、コードで測れないものだけに取っておく。

SECTION 4

指標②③: 意味の判断はLLM-as-Judgeで測る($0.003)

残る2つの指標は、文字列処理では測れない。

カテゴリ精度

記事が正しいトピック(AI・金融・ゲーム・論文・政治行政)に分類されているか。「半導体企業の決算」はAIか金融か——意味の理解が要る。

見出し忠実性

生成された見出し・要約が、収集ソースの原文に書いてあることから逸脱していないか。つまりハルシネーション検出。アーカイブに原文があるから判定できる。

こういう「意味の判断」には、LLMに審判をさせるLLM-as-Judgeという手法を使う。生成とは別のLLM呼び出しで「この分類は適切か」「この見出しは原文に忠実か」を判定させ、判定理由つきの構造化JSONで返させる。

ここで気をつけたのが評価自体のコストだ。品質を測るために本体より高い金を払っていたら本末転倒だから、judgeにも生成と同じコスト設計を適用した。

1

判定は1配信分を1呼び出しに集約する

記事1件ずつjudgeを呼ぶと呼び出し数×固定オーバーヘッドがかさむ。紙面1日分をまとめて渡し、全記事の判定を一度に返させる。

2

judgeは小さいモデル(Haiku)で十分

「分類が合っているか」「原文にない話を足していないか」は、生成より判定のほうが簡単なタスク。原文の引用も上限1,200字に切り詰めて渡す。

3

出力はJSONスキーマで強制する

judgeの返答が毎回違う形式だと集計できない。structured outputsでverdictの形を固定し、パース失敗のリトライコストも消す。

結果、judgeのコストは実測で1配信分あたり約$0.003。配信本体が$0.02前後なので、評価は本体の15%程度。これなら気兼ねなく回せる。

SECTION 5

評価は意思決定を変える——web_search拡大の判断材料

評価ハーネスを作って早々に、実用の場面が来た。

このシステムは記事の収集経路が2つある。RSS・Webページの並列フェッチ(無料)と、鮮度を補強するためのweb_search(1検索$0.01、現在は一部トピックのみ・回数上限つき)。当然「検索をもっと増やせば紙面は良くなるのでは?」という誘惑がある。でも検索は従量課金だ。勘で増やしたくない。

そこで紙面の各記事にorigin(収集経路)タグを付け、評価ハーネスに「web_search由来の記事がどれだけ紙面に貢献しているか」を集計するレポートを足した。

ある朝刊のorigin寄与レポート(実測値)

紙面に占める検索由来

1 / 4記事

注目記事に占める検索由来

1 / 2件

検索由来の平均スコア

4.0

フェッチ由来の平均スコア

3.7

スコアはLLMが編集時に付ける重要度(1〜5)。検索由来の記事は数こそ少ないが、スコアが高く、注目記事にも選ばれている(※まだ数日分・サンプル数が小さい点に注意)。

まだ数日分のデータだが、すでに「検索由来は1件でも紙面の上位に食い込む傾向がある」ことが見えはじめている。このまま蓄積すれば、「$0.01/検索を追加で払う価値があるか」を数字で判断できる

体感レビューの時代には、この問いは「なんとなく検索があったほうが良い気がする」で止まっていた。評価の仕組みは品質チェックのためだけでなく、次の投資判断の材料を生むためにある——作ってみて一番実感したのはここだった。

SECTION 6

個人開発の評価ハーネス、4つの設計原則

企業のML基盤のような大掛かりなものは要らない。個人開発のスケールで効いた設計原則を4つにまとめる。

1

アーカイブが先、指標は後

入力と出力のペアさえ残っていれば、指標は後からいくらでも追加できる。実際、origin寄与レポートは評価ハーネスの初版完成後に思いついて、その日のうちに足せた。

2

コードで測れるものをLLMに聞かない

重複・件数・日付・形式チェックは決定的なコードで。無料で何度でも走り、基準もぶれない。LLM-as-Judgeは意味判断専用。

3

評価は配信を止めない場所に置く

評価ハーネスは本番パイプラインの外のスクリプトとして実装し、手元から任意のタイミングで全アーカイブに対して実行する。評価の失敗が朝刊の配信に影響しない。

4

評価のコストも設計する

評価にも本体と同じコスト設計を効かせる(手法は指標②③で前述)。1配信$0.003なら習慣になり、$0.3なら「たまにやる儀式」になって続かない。

運用コストの削減で使った考え方(別記事)と、根っこは同じだ。LLMにしかできない仕事だけをLLMに渡し、残りは全部コードでやる。生成でも評価でも、この原則は変わらなかった。

SECTION 7

測れないものは、改善できない

評価ハーネスができて変わったのは、数字が出ることそのものより、改善の議論の土台ができたことだ。

「最近重複が多い気がする」は「直近7配信の重複率は0%、ただし6/10は際どい類似ペアが1組」になった。「見出しが盛ってる気がする」は、忠実性judgeの判定理由つきで具体的な1件を指せるようになった。プロンプトを変えるときは、変更前後で同じアーカイブに対して評価を走らせれば、良くなったか悪くなったかが分かる。

ソフトウェア開発でテストコードが果たしている役割を、LLMシステムでは評価ハーネスが果たす。そして面白いことに、テスト文化で言われてきた格言がほぼそのまま通用する。後から書くのは大変、先に仕込めば資産になる。全部を自動化しなくても、回帰だけは機械に見張らせる。

次にやりたいのは2つ。プロンプト変更時に過去アーカイブで差分評価する回帰テストの定型化と、judgeの判定が自分の感覚とズレていないかを確かめる「judgeの評価」だ。審判を雇ったら、審判の精度も見なければいけない。この再帰がevalsの沼であり、面白さでもある。

本稿の数値について

judgeコスト(約$0.003/配信分)・origin寄与レポートの数値は、自分の構成(Haiku 4.5・日本語ニュース・1配信あたり数記事)での実測値です。レポート例は2026年6月10日朝刊分。評価対象の規模やモデルによって数値は変わります。

LLM evals LLM-as-Judge 品質評価 AIエージェント運用 個人開発

著者: しきぴょんた / 2026年6月

連作: 朝刊エージェント(全4回)

  1. 1.朝刊エージェントを3日で作った
  2. 2.朝刊エージェントの現在地
  3. 3.1回$0.20の朝刊が、$0.02になるまで
  4. 4.AIの出力品質を「なんとなく」で語らない(この記事)