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

LLMを使った機能を作ると、いくつか試して「良さそう」と感じた時点で完成にしたくなります。ですが、その「動いた気がする」は評価ではありません。プロンプトを少し直す、モデルを新しくする、RAGの検索を変える。そのたびに品質が上がったのか下がったのか、感覚では追えなくなります。この記事では、LLMアプリの評価(eval)をどう作るかを、小さく始めて回し続ける手順として整理します。
なぜ「動いた気がする」は危ないか
手元で3件試してうまくいったとき、頭の中では合格にしています。ですが、その3件はたまたま素直な入力だったかもしれません。実運用では、言葉足らずの質問、想定外の言い回し、社内でしか通じない略語が混ざります。少数の成功体験は、失敗の分布を教えてくれません。
さらに厄介なのは、変更の影響が見えないことです。プロンプトを直してある質問が改善しても、別の質問がこっそり悪化する、ということは普通に起きます。評価データが無ければ、この「あちらを立てればこちらが立たず」を検知できません。評価とは、機能追加のたびに毎回同じ物差しを当てて、全体として良くなったかを確かめる仕組みです。
メモ
評価データは実運用に似せる
評価の質は、評価データが現実に似ているかでほぼ決まります。開発者が思いつく「きれいな質問」だけを並べると、本番で起きる失敗を素通りしてしまいます。
- 1
実際の入力を集める
可能なら本番やテスト運用のログから、実際に来た質問を拾います。ログが無い段階でも、想定ユーザーになりきって不完全な入力をわざと作ります。 - 2
崩れた入力を混ぜる
誤字、主語の抜け、二つの質問が一文に混ざったもの、社内固有語や略語を含むものを入れます。素直な例だけにしないのが要点です。 - 3
境界と失敗例を入れる
答えられない質問、範囲外の依頼、機密に触れる質問など、正しく断るべきケースも評価対象にします。 - 4
件数より分布を意識する
最初は10〜30件で構いません。数をそろえるより、実運用の入力の種類を代表しているかを優先します。
各ケースには、期待する結果(正解、または「満たすべき条件」)を添えておきます。ここが後の採点の基準になります。
指標はタスク型で変える
万能な単一指標はありません。何を「正解」とするかは、タスクの性質で変わります。
| タスク型 | 例 | 向いた採点 |
|---|---|---|
| 正解が一つに定まる | 分類、抽出、フラグ判定 | 期待値との完全一致・部分一致 |
| 形式が決まっている | JSON出力、定型フォーマット | スキーマ検証、必須項目の有無 |
| 出力に幅がある | 要約、下書き、回答文 | ルーブリック(観点別の採点基準) |
| 検索を伴う | RAG、社内文書QA | 根拠の当否と回答の当否を分けて見る |
一致判定で済むタスクは、機械的に採点できるので迷いません。難しいのは出力に幅があるタスクです。ここは「事実に反していないか」「依頼された観点を満たしているか」「言ってはいけないことを言っていないか」といった観点を分け、それぞれを段階(例: 満たす/一部/満たさない)で採点するルーブリックを先に決めます。採点基準を言葉にしておくと、人が採点しても、後述のLLM採点に任せても、ぶれが小さくなります。
ヒント
自動評価と人手レビューを併用する
自動評価は速くて安定していますが、測れるのは「形」に近い部分です。一致するか、形式が正しいか、禁止語が入っていないか。一方で、文章としての自然さや、微妙なニュアンスの誤りは、機械的な一致では拾いきれません。
現実的なのは併用です。まず自動で回せる部分を自動化し、機械では判断が難しい観点だけ人が見ます。人手レビューは全件でなくてよく、自動評価で差が出たケースや、点数が割れたケースを抜き出して確認すれば十分なことが多いです。人が見た結果は、後で述べるようにテストデータへ戻していきます。
あわせて読みたい
RAGとは何か|仕組み・向き不向き・導入判断の考え方
LLM-as-a-judgeの使いどころと落とし穴
出力の採点そのものを、別のLLMに任せる方法があります。いわゆるLLM-as-a-judgeです。ルーブリックと採点対象を渡し、「この基準で1〜5点で採点して」と頼むやり方で、人手採点をスケールさせる手段として使われます。有効ですが、いくつか落とし穴があります。
- 1
人手採点とそろうか先に確かめる
まず人が採点した少数のケースを用意し、LLM採点がその判断とどれくらい一致するかを見ます。ずれるなら採点プロンプトやルーブリックを直します。ここを飛ばして本採用しないことです。 - 2
採点基準を具体的に渡す
「良いかどうか」ではなく、何を満たせば何点かを明文化して渡します。基準が曖昧だと、採点自体がぶれます。 - 3
絶対点より比較で使う
1件ごとの絶対点は安定しにくい一方、AとBのどちらが良いかのペアワイズ比較は比較的安定します。モデルやプロンプトの新旧比較では、この使い方が向きます。 - 4
判定の癖を意識する
出力が長いほうを高く付ける、選択肢の順序に引っ張られる、といった偏りが出ることがあります。順序を入れ替えて確かめるなどの対策を取ります。
注意
判定の仕組みとしては、採点用LLMに専用のツールや上位モデルを与える設計もあります。関数呼び出しの考え方はここでも共通です。
あわせて読みたい
LLMのTool Use(関数呼び出し)とは|仕組みと精度を上げるツール設計
失敗をテストに戻す継続的な評価
評価は一度作って終わりではありません。運用していると、評価データに無かった新しい失敗が必ず出てきます。この失敗を捨てずに、次のテストケースへ育てるループが肝心です。
- 1
失敗トレースを残す
本番で問題が起きたとき、そのときの入力・出力・検索結果などの経緯(トレース)を記録します。後から再現できる形で残すのが要点です。 - 2
評価データへ追加する
その失敗ケースを、期待する結果を添えて評価データセットに加えます。次からは、同じ失敗を毎回自動で検知できるようになります。 - 3
再発を監視する
修正後にそのケースが通ることを確認し、以降の変更でも回帰(先祖返り)していないかを見張ります。
このループが回り始めると、評価データセットは「自社で実際に起きた失敗の集まり」に育ちます。汎用ベンチマークの数字より、こちらのほうが自社の品質を正しく映します。
あわせて読みたい
ハルシネーション対策の実務|検証フローの作り方と運用のコツ
スコアはバージョンに紐づける
評価結果は、それ単体では意味を持ちません。「85点だった」ではなく、「どのプロンプトで、どのモデルで、どの評価データで85点だったか」までそろって初めて比較できます。
評価結果に紐づけて記録したい情報
- プロンプトのバージョン(変更履歴が追えること)
- 使用したモデル名とバージョン、主な設定(temperature等)
- 評価データセットのバージョン(件数や内容の変更履歴)
- RAGなら検索対象データやインデックスのバージョン
- 採点方法(自動/人手/LLM採点)と、その採点基準
これらを紐づけておくと、「先週より点が下がったのはモデルを変えたからか、評価データを増やしたからか」を切り分けられます。紐づけが無いと、数字が動いても原因が分からず、評価が判断材料になりません。
RAGやエージェントでの難しさ
単発の入力と出力なら採点は比較的単純ですが、RAGやエージェントでは難しさが増します。
RAGでは、最終回答が間違っていたとき、原因が検索(必要な文書を引けなかった)なのか、生成(引けたのに読み違えた)なのか、切り分けが要ります。回答の当否だけでなく、根拠として使った文書が適切だったかを別に採点すると、どこを直すべきかが見えます。
エージェントでは、複数ステップを経て結果に至るため、最終結果だけでなく途中の道筋(どのツールをどの順で呼んだか)も評価対象になります。最終的に正解でも、無駄な手順や危うい操作を経ていれば、実務では問題です。まずは最終結果の評価から始め、必要に応じて途中経過の評価を足していくのが現実的です。
よくある質問
評価データは何件くらい用意すればよいですか
ベンチマークで高得点のモデルを選べば評価は不要ですか
LLM-as-a-judgeだけで人手レビューを無くせますか
自動評価と人手評価、どちらから始めるべきですか
特定の評価ツールを導入すべきですか
まとめ
LLM評価を始めるときのチェックリスト
- 実運用に似た入力(崩れた質問・境界ケース)で評価データを10〜30件用意した
- タスク型に応じて採点方法を決めた(一致判定/スキーマ検証/ルーブリック)
- 自動で採点できる部分を自動化し、難しい観点だけ人手で見る形にした
- LLM-as-a-judgeを使うなら、人手採点と判定がそろうことを先に確認した
- 運用で見つかった失敗を評価データへ戻すループを用意した
- スコアをプロンプト・モデル・データのバージョンに紐づけて記録している
評価は、LLMアプリを「たまたま動くもの」から「変えても壊れていないと確認できるもの」へ引き上げる土台です。単一の万能指標は無く、完璧な採点表も要りません。まずは代表タスクを少数そろえ、変更の前後で同じ物差しを当てるところから始めてください。失敗を評価に戻し続ければ、その物差しは自社の品質を最もよく映す資産に育っていきます。
出典・参考
関連する記事
ハルシネーション対策の実務|検証フローの作り方と運用のコツ
LLMがもっともらしい誤情報を生成するハルシネーションへの実務的な対策を解説します。発生をゼロにできない前提での検証フローの設計、用途別のチェックの深さ、プロンプトと仕組みでの抑制策をまとめます。
RAGとは何か|仕組み・向き不向き・導入判断の考え方
社内文書をAIに答えさせる代表的な手法であるRAG(検索拡張生成)を解説します。検索と生成を組み合わせる仕組み、向いている用途と向かない用途、導入前に確認したい判断ポイントをまとめます。
LLMのTool Use(関数呼び出し)とは|仕組みと精度を上げるツール設計
LLMが外部のツールやAPIを呼び出す「Tool Use(関数呼び出し/function calling)」の仕組みを、実務目線で解説します。tool_useとtool_resultの往復、クライアントツールとサーバーツールの違い、いつ呼ぶかの制御、そして呼び出し精度を上げるためのツール定義のコツまでを整理します。


