LLM Evals
LLM Evals
概要(サマリー)
LLM Evals(エルエルエム・イーバルズ)とは、AIの回答の質を、用意したテスト問題と採点基準で継続的に測る仕組みである。Evalsは「評価(Evaluations)」の略である。
学校のテストにたとえるなら、生徒(AI)に「最近、勉強できるようになった?」と感覚で聞くのではなく、同じ模擬試験を毎回解かせて、点数の変化を見るようなものである。
LLMを使ったアプリでは、プロンプトを少し直しただけで、ある質問には上手に答えられるようになった一方、別の質問では間違えるようになる、ということがよく起きる。手作業で数回試すだけでは、こうした変化に気づけない。Evalsを用意しておけば、変更のたびに点数で良し悪しを確かめられる。
詳細解説
なぜAI開発にEvalsが必要なのか
普通のプログラムなら、同じ入力には同じ出力が返るので、テストコードで「結果が期待どおりか」を確かめられる。しかし、生成AIには次のような難しさがある。
- 正解の言い方が1つではない: 「晴れです」も「快晴です」も正解かもしれず、文字列の完全一致では判定できない。
- 同じ質問でも答えが揺れる: 設定によっては、同じ質問でも毎回少しずつ違う答えが返る。
- 数回の手作業では見落とす: 開発者が2〜3回試して「良さそう」と思っても、別の場面では間違えていることがある。
- モデルの変更で挙動が変わる: 新しいモデルに乗り換えたら、以前は守れていた指示を守らなくなることがある。
Evalsは、こうした「評価しにくいAIの出力」を、できるだけ客観的な数字にするための仕組みである。
主な採点のしかた
| 方法 | 採点のしかた | 向いているもの | 特徴 |
|---|---|---|---|
| ルールで判定 | 決まった語が含まれるか、JSONとして読めるか、文字数など | 形式のチェック、必須項目の有無 | 速くて安く、結果がぶれない |
| AIに採点させる | 別のAIに採点基準を渡して点数を付けさせる | 要約の質、言葉づかい、論理の通り方 | 柔軟だが、採点にも料金がかかり、採点のぶれもある |
| 人間が採点 | 開発者や専門家が読んで判断する | 最終的な品質、専門的な正しさ | 精度は高いが、時間と手間がかかる |
実際には、まずルールで判定できるものはルールで判定し、それが難しいものだけAIや人間が採点する、という組み合わせ方が多い。
AIにAIを採点させる方法
文章の質のように、ルールでは判定しにくいものは、別のAIに採点させる方法がある。「LLM-as-a-Judge(審査員としてのLLM)」と呼ばれる。
[テスト問題と採点基準]
│
▼
[評価したいAI] → 回答
│
▼
[採点役のAI]
「採点基準に照らして1〜5点で採点し、理由も書いてください」
│
▼
[4点:要点の一部が抜けている]
採点基準をできるだけ具体的に書くことが大切である。ただし、採点役のAIにも好みや偏りがあるため、ときどき人間が採点結果を確かめ、基準がずれていないかを見直す必要がある。
小さなEvalsを作ってみる
Evalsは、専用のツールがなくても始められる。以下は、テスト問題を並べて、回答に必要な語が含まれているかを数えるPythonの例である。
test_cases = [
{"question": "日本の首都は?", "must_include": "東京"},
{"question": "HTTPの標準のポート番号は?", "must_include": "80"},
]
passed = 0
for case in test_cases:
answer = ask_ai(case["question"])
if case["must_include"] in answer:
passed += 1
print(f"合格: {passed} / {len(test_cases)}")
ask_ai の部分は、実際に使うAIのAPIを呼び出す処理に置き換える。プロンプトを変えるたびにこのスクリプトを実行すれば、合格数の変化で良し悪しを比べられる。
AIコーディングとの関係
AIを組み込んだアプリやエージェントを作るとき、Evalsは「直したつもりで壊していないか」を確かめる手段になる。
- ツール呼び出しの正しさを確かめる: 「明日10時に会議を入れて」という依頼に対して、エージェントが正しい道具を選び、正しい日時を渡したかを確かめる
- プロンプトの変更を自動で確かめる: プロンプトを変更したら、CI/CDの仕組みでテスト問題を一通り実行し、合格率が下がっていないかを確認する
- 危険な入力への反応を確かめる: 指示を乗っ取ろうとする入力をわざと混ぜ、AIが従わずに断れるかを確かめる
PromptfooやDeepEvalのような評価用のツールを使うと、テスト問題の管理や結果の比較がしやすくなる。
よくある勘違い
普通のテストコードと何が違う?
普通のテストコードは、答えが1つに決まる処理を確かめるものである。Evalsは、答えが揺れたり言い方が複数あったりする出力を、点数や合格率で評価するものである。どちらか一方ではなく、両方を組み合わせて使う。
自分でモデルを作る人だけが使うもの?
いいえ。APIでAIを呼び出してアプリを作る人や、AIコーディングツールのルールファイルを調整する人にも役立つ。プロンプトを直すたびに結果を測れるので、「なんとなく良くなった気がする」から抜け出せる。
点数が高ければ、そのAIは安心して使える?
そうとは限らない。テスト問題に含まれていない場面では、間違えたりハルシネーションを起こしたりすることがある。点数はあくまで用意した問題での結果なので、実際の利用で見つかった失敗をテスト問題に追加し続けることが大切である。
まとめ
- LLM Evalsは、AIの回答の質をテスト問題と採点基準で継続的に測る仕組みである
- 手作業の確認では気づきにくい、プロンプトやモデル変更による悪化を点数で見つけられる
- ルール判定、AIによる採点、人間による採点を組み合わせ、テスト問題を育て続けることが大切である