LLM Frontline
開発・エージェント

LLMアプリの評価(eval)の作り方|「動いた気がする」で止めないための実務手順

ミナト開発・API担当
・ 約11分で読めます
LLMアプリの評価(eval)の作り方|「動いた気がする」で止めないための実務手順

LLMを使った機能を作ると、いくつか試して「良さそう」と感じた時点で完成にしたくなります。ですが、その「動いた気がする」は評価ではありません。プロンプトを少し直す、モデルを新しくする、RAGの検索を変える。そのたびに品質が上がったのか下がったのか、感覚では追えなくなります。この記事では、LLMアプリの評価(eval)をどう作るかを、小さく始めて回し続ける手順として整理します。

なぜ「動いた気がする」は危ないか

手元で3件試してうまくいったとき、頭の中では合格にしています。ですが、その3件はたまたま素直な入力だったかもしれません。実運用では、言葉足らずの質問、想定外の言い回し、社内でしか通じない略語が混ざります。少数の成功体験は、失敗の分布を教えてくれません。

さらに厄介なのは、変更の影響が見えないことです。プロンプトを直してある質問が改善しても、別の質問がこっそり悪化する、ということは普通に起きます。評価データが無ければ、この「あちらを立てればこちらが立たず」を検知できません。評価とは、機能追加のたびに毎回同じ物差しを当てて、全体として良くなったかを確かめる仕組みです。

メモ

評価は完璧な採点表を作る作業ではありません。「変更前後で良くなったか悪くなったか」を繰り返し比べられれば、まず十分に役立ちます。精度を求めて着手が遅れるより、粗くても回し始めるほうが得られるものは多いです。

評価データは実運用に似せる

評価の質は、評価データが現実に似ているかでほぼ決まります。開発者が思いつく「きれいな質問」だけを並べると、本番で起きる失敗を素通りしてしまいます。

  1. 1

    実際の入力を集める

    可能なら本番やテスト運用のログから、実際に来た質問を拾います。ログが無い段階でも、想定ユーザーになりきって不完全な入力をわざと作ります。
  2. 2

    崩れた入力を混ぜる

    誤字、主語の抜け、二つの質問が一文に混ざったもの、社内固有語や略語を含むものを入れます。素直な例だけにしないのが要点です。
  3. 3

    境界と失敗例を入れる

    答えられない質問、範囲外の依頼、機密に触れる質問など、正しく断るべきケースも評価対象にします。
  4. 4

    件数より分布を意識する

    最初は10〜30件で構いません。数をそろえるより、実運用の入力の種類を代表しているかを優先します。

各ケースには、期待する結果(正解、または「満たすべき条件」)を添えておきます。ここが後の採点の基準になります。

指標はタスク型で変える

万能な単一指標はありません。何を「正解」とするかは、タスクの性質で変わります。

タスク型向いた採点
正解が一つに定まる分類、抽出、フラグ判定期待値との完全一致・部分一致
形式が決まっているJSON出力、定型フォーマットスキーマ検証、必須項目の有無
出力に幅がある要約、下書き、回答文ルーブリック(観点別の採点基準)
検索を伴うRAG、社内文書QA根拠の当否と回答の当否を分けて見る

一致判定で済むタスクは、機械的に採点できるので迷いません。難しいのは出力に幅があるタスクです。ここは「事実に反していないか」「依頼された観点を満たしているか」「言ってはいけないことを言っていないか」といった観点を分け、それぞれを段階(例: 満たす/一部/満たさない)で採点するルーブリックを先に決めます。採点基準を言葉にしておくと、人が採点しても、後述のLLM採点に任せても、ぶれが小さくなります。

ヒント

採点はできるだけ自動で処理できる形に寄せると、繰り返しが楽になります。抽出や分類は一致判定に、出力形式はスキーマ検証に落とし込む。少し設計を工夫するだけで、毎回の評価が数分で回せるようになります。

自動評価と人手レビューを併用する

自動評価は速くて安定していますが、測れるのは「形」に近い部分です。一致するか、形式が正しいか、禁止語が入っていないか。一方で、文章としての自然さや、微妙なニュアンスの誤りは、機械的な一致では拾いきれません。

現実的なのは併用です。まず自動で回せる部分を自動化し、機械では判断が難しい観点だけ人が見ます。人手レビューは全件でなくてよく、自動評価で差が出たケースや、点数が割れたケースを抜き出して確認すれば十分なことが多いです。人が見た結果は、後で述べるようにテストデータへ戻していきます。

あわせて読みたい

RAGとは何か|仕組み・向き不向き・導入判断の考え方

LLM-as-a-judgeの使いどころと落とし穴

出力の採点そのものを、別のLLMに任せる方法があります。いわゆるLLM-as-a-judgeです。ルーブリックと採点対象を渡し、「この基準で1〜5点で採点して」と頼むやり方で、人手採点をスケールさせる手段として使われます。有効ですが、いくつか落とし穴があります。

  1. 1

    人手採点とそろうか先に確かめる

    まず人が採点した少数のケースを用意し、LLM採点がその判断とどれくらい一致するかを見ます。ずれるなら採点プロンプトやルーブリックを直します。ここを飛ばして本採用しないことです。
  2. 2

    採点基準を具体的に渡す

    「良いかどうか」ではなく、何を満たせば何点かを明文化して渡します。基準が曖昧だと、採点自体がぶれます。
  3. 3

    絶対点より比較で使う

    1件ごとの絶対点は安定しにくい一方、AとBのどちらが良いかのペアワイズ比較は比較的安定します。モデルやプロンプトの新旧比較では、この使い方が向きます。
  4. 4

    判定の癖を意識する

    出力が長いほうを高く付ける、選択肢の順序に引っ張られる、といった偏りが出ることがあります。順序を入れ替えて確かめるなどの対策を取ります。

注意

LLM-as-a-judgeは人手判定の補完であって、置換ではありません。特に、合否が事業や安全に直結する判定(コンプライアンス、医療・法務に関わる出力など)は、自動採点だけで結論づけず、人の確認を残してください。採点する側のLLMも間違えます。

判定の仕組みとしては、採点用LLMに専用のツールや上位モデルを与える設計もあります。関数呼び出しの考え方はここでも共通です。

あわせて読みたい

LLMのTool Use(関数呼び出し)とは|仕組みと精度を上げるツール設計

失敗をテストに戻す継続的な評価

評価は一度作って終わりではありません。運用していると、評価データに無かった新しい失敗が必ず出てきます。この失敗を捨てずに、次のテストケースへ育てるループが肝心です。

  1. 1

    失敗トレースを残す

    本番で問題が起きたとき、そのときの入力・出力・検索結果などの経緯(トレース)を記録します。後から再現できる形で残すのが要点です。
  2. 2

    評価データへ追加する

    その失敗ケースを、期待する結果を添えて評価データセットに加えます。次からは、同じ失敗を毎回自動で検知できるようになります。
  3. 3

    再発を監視する

    修正後にそのケースが通ることを確認し、以降の変更でも回帰(先祖返り)していないかを見張ります。

このループが回り始めると、評価データセットは「自社で実際に起きた失敗の集まり」に育ちます。汎用ベンチマークの数字より、こちらのほうが自社の品質を正しく映します。

あわせて読みたい

ハルシネーション対策の実務|検証フローの作り方と運用のコツ

スコアはバージョンに紐づける

評価結果は、それ単体では意味を持ちません。「85点だった」ではなく、「どのプロンプトで、どのモデルで、どの評価データで85点だったか」までそろって初めて比較できます。

評価結果に紐づけて記録したい情報

  • プロンプトのバージョン(変更履歴が追えること)
  • 使用したモデル名とバージョン、主な設定(temperature等)
  • 評価データセットのバージョン(件数や内容の変更履歴)
  • RAGなら検索対象データやインデックスのバージョン
  • 採点方法(自動/人手/LLM採点)と、その採点基準

これらを紐づけておくと、「先週より点が下がったのはモデルを変えたからか、評価データを増やしたからか」を切り分けられます。紐づけが無いと、数字が動いても原因が分からず、評価が判断材料になりません。

RAGやエージェントでの難しさ

単発の入力と出力なら採点は比較的単純ですが、RAGやエージェントでは難しさが増します。

RAGでは、最終回答が間違っていたとき、原因が検索(必要な文書を引けなかった)なのか、生成(引けたのに読み違えた)なのか、切り分けが要ります。回答の当否だけでなく、根拠として使った文書が適切だったかを別に採点すると、どこを直すべきかが見えます。

エージェントでは、複数ステップを経て結果に至るため、最終結果だけでなく途中の道筋(どのツールをどの順で呼んだか)も評価対象になります。最終的に正解でも、無駄な手順や危うい操作を経ていれば、実務では問題です。まずは最終結果の評価から始め、必要に応じて途中経過の評価を足していくのが現実的です。

評価を作る前は、プロンプトを直すたびに『良くなった気がする』で進めていました。評価データを30件用意してからは、変更のたびに劣化が数字で見えるようになり、無用な手戻りが減りました。完璧な採点でなくても、同じ物差しがあるだけで判断が変わります。
LLM機能を運用するエンジニア

よくある質問

評価データは何件くらい用意すればよいですか
最初は10〜30件で十分に始められます。件数をそろえることより、実運用で来る入力の種類(崩れた質問や境界ケースを含む)を代表しているかが大切です。運用で見つかった失敗を足していけば、自然に増えていきます。
ベンチマークで高得点のモデルを選べば評価は不要ですか
いいえ。公開ベンチマークの数字と、自社タスクでの成否は別物です。ベンチマークは汎用的な能力の目安にはなりますが、自社の入力や要件での品質は、自社の評価データで測る必要があります。
LLM-as-a-judgeだけで人手レビューを無くせますか
完全には無くせません。LLM採点は人手をスケールさせる補完手段で、置換ではありません。まず人手採点と判定がそろうかを確かめ、合否が事業や安全に直結する判定には人の確認を残すのが安全です。
自動評価と人手評価、どちらから始めるべきですか
自動で採点できる部分(一致判定・形式検証)から始めると、繰り返しが楽で継続しやすいです。そのうえで、機械では判断しにくい観点だけ人手やLLM採点を足します。
特定の評価ツールを導入すべきですか
ツールは繰り返しや記録を楽にしますが、まずはスプレッドシートや小さなスクリプトでも始められます。評価データと採点基準という中身が先で、ツールは後から用途に合わせて選べば十分です。

まとめ

LLM評価を始めるときのチェックリスト

  • 実運用に似た入力(崩れた質問・境界ケース)で評価データを10〜30件用意した
  • タスク型に応じて採点方法を決めた(一致判定/スキーマ検証/ルーブリック)
  • 自動で採点できる部分を自動化し、難しい観点だけ人手で見る形にした
  • LLM-as-a-judgeを使うなら、人手採点と判定がそろうことを先に確認した
  • 運用で見つかった失敗を評価データへ戻すループを用意した
  • スコアをプロンプト・モデル・データのバージョンに紐づけて記録している

評価は、LLMアプリを「たまたま動くもの」から「変えても壊れていないと確認できるもの」へ引き上げる土台です。単一の万能指標は無く、完璧な採点表も要りません。まずは代表タスクを少数そろえ、変更の前後で同じ物差しを当てるところから始めてください。失敗を評価に戻し続ければ、その物差しは自社の品質を最もよく映す資産に育っていきます。

出典・参考

この記事をシェア

関連する記事