Hunter Gerlach
Evalsとは、AIおよびLLMの出力品質を測定するための体系的な手法です。 テスト自動化と同じ目的——システムが正しく動作しているという確信を与える——を持ちますが、根本的に異なります。
従来のテストは確実性を与えます。Evalsは確信を与えます。 ユニットテストは二値です:関数が4を返すかどうか、100%の精度で検証できます。AIの出力は非決定論的であり、同じプロンプトでも毎回異なる応答が生成され、「正解」は二値ではなくスペクトラムです。単一のEvalでシステムが完璧に動作していると判断することはできません。代わりに、複数の次元にわたる複数のEvalsが組み合わさって、システムの品質に対する確信のレベルを構築します——測定可能で追跡可能であり、情報に基づいた意思決定には十分ですが、決して100%ではありません。
これはリーダーやステークホルダーが理解しておくべき重要な区別です。Evalsが従来のテストと同じ合否の確実性を提供することを期待すると、誤った期待を設定し、偽の確信か不必要な失望をもたらします。Evalsは「システムがテストシナリオ全体で役立つ・正確な応答を生成することを85%の確信がある」と示します——そしてその確信のレベルを時間とともに追跡することが、リリースするか・ロールバックするか・品質にさらに投資するかを決める判断の材料になります。
適切な確信の閾値はユースケースによって異なります。 AIシステムが以前は不可能だったか非常にコストのかかったことをしている場合、わずかな確信であっても現状から大幅な改善かもしれません。しかし人間がすでにそのタスクをうまくこなしている場合、ハードルははるかに高く——そこに達するには、アンドレイ・カルパシーが「9の行進」と呼ぶパターンに従います:信頼性の9を一桁増やす(90%から99%、99.9%へ)のに、これまでの全ての9を合わせたほどの努力が必要です。あらゆるAIシステムがほぼ完璧でなければ価値がないという前提ではなく、ユースケースが実際に必要とするものと以前に存在したものに基づいて目標確信レベルを設定しましょう。
AIシステムは多くのパーツで構成されており、異なる範囲でEvalを実施できます:
Evalの議論の多くは主観的な品質判断に焦点を当てていますが、一部のEvalsは完全に決定論的です。必須フィールドが出力に存在するか、応答が有効なJSONか、サマリーがトークン制限内か、禁止コンテンツが現れていないかを確認するのは、従来のテストと同様の単純な二値チェックです。合格か不合格かです。
これらの決定論的Evalsはevalピラミッドの基盤を形成します(ステップ3参照)。高速・低コスト・信頼性が高いです。その上の層——モデルグレードのEvalsとヒューマンEvals——は、コードだけでは判断できない、応答が役立つか・正確か・トーンが適切かなどの判断を担います。良いEval戦略は決定論的なチェックから始まり、必要な場合にのみより高コストで不確実性の高いEvalタイプを重ねます。
EvalsとA/Bテストは異なる質問に答えます。Evalsはルーブリックや基準に対して品質を測定します——ユーザーゼロで実行できます。A/Bテストはユーザー行動をスケールで測定することによって2つのバリアントを比較します——統計的有意性に達するためにかなりのトラフィックが必要です。
実際には、ユーザー数によって選択が決まることが多いです:トラフィックの少ないAI機能では意味のあるA/Bテストに十分な量が得られないため、EvalsがプライマリQ/Aシグナルになります。トラフィックの多い機能は両方を使うべきです。Evalsはまた、変更をユーザーに公開した後ではなく前に特定の基準に対して品質を証明する必要がある、高リスクまたは規制対象のユースケースにも不可欠です。
3〜5の評価基準を持つルーブリックを作成するためにドメインエキスパートと協力しましょう。 各基準について、良い・許容できる・劣った出力の例を文書化します。 このルーブリックは他の全てが構築される土台です——なければ、Evalsは一貫性のない再現不可能な結果を生み出します。
一般的なシナリオ・エッジケース・敵対的入力・過去の失敗をカバーする20〜50件のテストケースから始めましょう。 合成データ——モデル生成の例やニーズに合わせて変更された実際のデータ——から始めることは完全に合理的です。開始するために本番トラフィックは必要ありません。本番データとヒューマン・イン・ザ・ループレビューから時間をかけてデータセットを拡大しましょう。小さくてもキュレーションされたデータセットは、大きくても粗雑なものより価値があります。
Evalのコストは急速に膨らむ可能性があるため(上記「コスト最適化」参照)、 Evalスイートを構築する順序が重要です。テストピラミッドと同様に、基盤では高ボリューム・低コストのEvalsから始め、上に向かって積み上げます。基盤層は決定論的でほぼ無料です。上の各層はニュアンスを追加しますがコストも増加します。ピラミッドにより、単純なフォーマットチェックで無料で検出できる問題に対してLLM-as-judgeの価格を払わずに済みます:
高速フィードバックのためにプロンプトエンジニアリング中にローカルでEvalsを実行します。 継続的インテグレーションパイプラインにEvalsを追加し、 プロンプト・モデル・検索の変更が全ての変更で自動的に評価されるようにします。 品質の閾値を定義し、テストの失敗と同様に扱います——問題が修正されるまでビルドはレッドです。これはテスト駆動開発の原則をAIシステムに適用したものです。Eval駆動開発というコンパニオンプラクティスが、TDDのred-green-refactorサイクルをEvalsに直接適用します。
ドリフトと回帰をリアルタイムで検出するため、サンプリングされたライブトラフィックでEvalsを実行します。オフラインEvalsはデプロイ前に検証し、オンラインEvalsは実際の環境で動作していることを確認します。オンラインEvalのスコアがオフラインスコアから乖離した場合、Evalデータセットが実際の使用方法を反映しなくなったシグナルです。
新しいEvalケースのソースとして明示的・暗示的なユーザーフィードバックを活用しましょう。 明示的なフィードバックにはサムアップ/ダウン・修正・エスカレーション・クレームが含まれます。暗示的なフィードバックには、ユーザーが質問を言い換える・フローを途中で離脱する・回答をコピーするかを無視するか・ヒューマンにエスカレートするなどの行動シグナルが含まれます。パターンを見つけるためにフィードバックをバケット化しましょう: 個々のクレームはノイズですが、類似のフィードバックのクラスターが評価する価値のある真のパターンを明らかにします。パターンを特定したら、新しいEvalテストケースとして体系化しましょう。これはジェネレーティブAIに適用されたMLOpsライフサイクルです:ユーザーが問題を表面化し、パターンが出現し、新しいEvalsが回帰を検出し、品質が向上します。
Evalのスコアを時点のスナップショットではなく時間的トレンドとして追跡しましょう。 可視性と信頼を維持するためにステークホルダーと結果を共有します。Evalスイートを生きたアーティファクトとして扱い——本番データやユーザーフィードバックから新しいケースを定期的にリフレッシュして陳腐化を防ぎます。
評価(Evals) をチームや顧客、ステークホルダーと実施するにあたりより詳細にお知りになりたい場合は、以下のリンクを参照してください。