RAG×「評価駆動開発(Eval-Driven Development)」完全ガイド【2026年版】——Ragas・DeepEval・TruLensで「とりあえず動くRAG」から「精度を継続的に改善できるRAG」に引き上げる指標設計・ゴールデンデータセット構築・CI/CD組み込み

社内文書検索、カスタマーサポート、FAQ自動応答——RAG(Retrieval-Augmented Generation)を使ったPoCを立ち上げた企業は多いでしょう。しかし、実際に運用を始めると必ず出てくるのが次のような声です。

「動いてはいるけど、精度が上がっているのか下がっているのか分からない」「チャンクサイズを変えたら良くなった気がするが、本当にそうなのか説明できない」「埋め込みモデルを差し替えたいが、回帰が怖くて踏み切れない」——これらはすべて、評価の仕組みが無いまま本番に入ってしまったことに起因します。

本記事では、Ragas・DeepEval・TruLens・LangSmith Evaluation といった主要ツールを使い、「とりあえず動くRAG」から「精度を継続的に改善できるRAG」へ引き上げるための評価駆動開発(Eval-Driven Development, EDD)の実践手法を整理します。指標設計、ゴールデンデータセット構築、LLM-as-a-Judgeのバイアス対策、CI/CDへの組み込み、シャドウテスト設計まで、中小企業でも現実的に回せる内容を中心にまとめました。


  1. 目次
  2. はじめに——なぜ「動くRAG」では不十分なのか
  3. 評価駆動開発(EDD)とは何か——テスト駆動開発との違い
  4. RAG特有の評価指標——5つのコア指標を正しく理解する
    1. Context Precision(検索精度)
    2. Context Recall(検索再現率)
    3. Faithfulness(忠実性)
    4. Answer Relevancy(回答関連性)
    5. Noise Sensitivity(ノイズ耐性)
  5. Retrieval層とGeneration層を分離して評価する意味
  6. 主要評価ツール比較——Ragas・DeepEval・TruLens・LangSmith
    1. Ragas の最小実装例
  7. ゴールデンデータセット構築——50〜200問で始める現実解
    1. 設計の4原則
    2. 質問カテゴリの分類
    3. 合成データ生成と人手レビューの組み合わせ
  8. LLM-as-a-Judge——評価者LLMのバイアスと対策
  9. CI/CDへの組み込み——GitHub Actionsで回帰テストを回す
    1. GitHub Actions ワークフローの例
    2. 閾値設計のポイント
  10. シャドウテスト設計——本番データから継続的にテストケースを追加
    1. シャドウテストの基本フロー
    2. シャドウテストで検知しやすい問題
  11. Difyの評価機能とオープンソースツールの使い分け
  12. よくある質問(Q&A)
    1. Q1. ゴールデンデータセットは何問あればいいですか?
    2. Q2. 評価に使うLLMのコストが気になります。安く抑える方法は?
    3. Q3. 人手評価は完全に不要ですか?
    4. Q4. LangSmith・Ragas・DeepEval のどれを選べばいいですか?
    5. Q5. ベクトルDBや埋め込みモデルを変更するとき、どう評価を回せばいいですか?
  13. まとめ——「測れなければ改善できない」
  14. 参考リンク

目次

  1. はじめに——なぜ「動くRAG」では不十分なのか
  2. 評価駆動開発(EDD)とは何か——テスト駆動開発との違い
  3. RAG特有の評価指標——5つのコア指標を正しく理解する
    1. Context Precision(検索精度)
    2. Context Recall(検索再現率)
    3. Faithfulness(忠実性)
    4. Answer Relevancy(回答関連性)
    5. Noise Sensitivity(ノイズ耐性)
  4. Retrieval層とGeneration層を分離して評価する意味
  5. 主要評価ツール比較——Ragas・DeepEval・TruLens・LangSmith
  6. ゴールデンデータセット構築——50〜200問で始める現実解
    1. 設計の4原則
    2. 質問カテゴリの分類
    3. 合成データ生成と人手レビューの組み合わせ
  7. LLM-as-a-Judge——評価者LLMのバイアスと対策
  8. CI/CDへの組み込み——GitHub Actionsで回帰テストを回す
  9. シャドウテスト設計——本番データから継続的にテストケースを追加
  10. Difyの評価機能とオープンソースツールの使い分け
  11. よくある質問(Q&A)
  12. まとめ——「測れなければ改善できない」
  13. 参考リンク

はじめに——なぜ「動くRAG」では不十分なのか

RAGは仕組みとしては比較的シンプルです。ドキュメントをチャンクに分割し、埋め込みベクトル化し、ユーザーの質問に類似したチャンクを検索して、そのコンテキストをLLMに渡す——この流れを実装するだけなら、LangChainやLlamaIndexを使えば数時間で動くものが作れます。

問題はその先です。PoCで「動いた」状態から本番運用に入ると、必ず次のような改善ニーズが出てきます。

  • 埋め込みモデルを OpenAI から multilingual-e5 に変えたい
  • チャンクサイズを 500 → 800 トークンに変えたい
  • プロンプトに「参考にした部分を必ず引用せよ」を追加したい
  • ハイブリッド検索(BM25+ベクトル)に切り替えたい
  • リランカーを導入したい

これらの変更は個別には「良さそう」に見えます。しかし評価の仕組みがないと、「良くなった」「悪くなった」を数値で判断できないため、担当者の感覚や、目立つ数件の出力例に頼った意思決定になります。結果として、ある質問は改善するが別の質問は悪化する、という「もぐら叩き」に陥ります。

この停滞から抜け出す唯一の方法が、評価駆動開発(EDD)です。


評価駆動開発(EDD)とは何か——テスト駆動開発との違い

評価駆動開発は、ソフトウェア工学のテスト駆動開発(TDD)の考え方をLLMアプリケーション開発に応用したものです。

観点テスト駆動開発(TDD)評価駆動開発(EDD)
対象決定的なロジック(関数・API)確率的な出力(LLM・RAG)
合否判定二値(Pass / Fail)スコア(0.0〜1.0)
テストデータ単体テストケースゴールデンデータセット
判定者アサーション(等価比較)指標関数 or LLM-as-a-Judge
CI/CD連携全テスト Pass で mergeスコア閾値 or 回帰なしで merge

EDDの要点は3つです。

1. 変更の前に評価する。 プロンプト、埋め込みモデル、チャンクサイズを変更する「前」にベースラインのスコアを取り、変更後と比較します。

2. スコアで意思決定する。 「なんとなく良さそう」ではなく、「Context Recallが 0.72 → 0.78 に改善し、Faithfulnessに回帰は無い」という形で判断します。

3. 継続的に回す。 一度きりの評価ではなく、CI/CDに組み込んで全コミットで回帰テストを実行します。


RAG特有の評価指標——5つのコア指標を正しく理解する

RAGの評価指標は LLM 単体の評価指標とは異なる視点が必要です。RAGは「検索(Retrieval)」と「生成(Generation)」という2つの処理の連鎖で成り立っているため、どちらの層に問題があるのかを切り分けられる指標が求められます。

ここでは Ragas フレームワークで広く使われている5つのコア指標を取り上げます。

Context Precision(検索精度)

検索されたチャンクのうち、質問の回答に本当に関連するものの割合を測る指標です。関連する情報が上位に来ているほどスコアが高くなります。

スコアが低い場合、検索層で「ノイズ(無関係なチャンク)」を拾いすぎていることを意味します。対策は、ハイブリッド検索の導入、リランカーの追加、チャンクサイズの調整などです。

Context Recall(検索再現率)

正解となる情報(グラウンドトゥルース)のうち、検索されたチャンクでどれだけカバーできているかを測る指標です。必要な情報を取り逃していないかの指標と言えます。

スコアが低い場合、検索層で「取りこぼし」が発生しています。対策は、検索件数(top-k)の増加、埋め込みモデルの変更、Multi-Query検索の導入などです。

Faithfulness(忠実性)

生成された回答が、検索されたコンテキストに忠実かを測る指標です。LLMが勝手に情報を足したり(ハルシネーション)、コンテキストと矛盾することを言ったりしていないかをチェックします。

スコアが低い場合、生成層のプロンプト設計に問題があります。「コンテキストに無い情報は答えない」「推測で補わない」といった指示の強化、temperature の引き下げ、モデルの変更などが対策になります。

Answer Relevancy(回答関連性)

生成された回答が、元の質問に対してどれだけ的を射ているかを測る指標です。Faithfulness が高くても、「質問と噛み合わない長い説明」をしていればこのスコアは下がります。

スコアが低い場合、プロンプトに「簡潔に答える」「質問に直接答える」という指示を強化するか、chain-of-thought の過剰な思考を抑制します。

Noise Sensitivity(ノイズ耐性)

検索結果に無関係なチャンクが混入した場合に、回答がどれだけ影響を受けるかを測る指標です。Ragas の比較的新しい指標で、実運用では top-k を上げると必ず混入するノイズへの堅牢性を評価します。

スコアが低い場合、リランカーの導入やプロンプトでの「関連性の低い情報は無視せよ」という明示が有効です。


Retrieval層とGeneration層を分離して評価する意味

RAGで最もよくある落とし穴が、「総合スコアだけ見て改善する」ことです。最終的な回答の品質(Answer Relevancy)だけを追うと、原因が検索層にあるのか生成層にあるのかが分からず、無関係な場所を修正してしまいます。

症状原因となる層関連指標典型的な対策
回答が質問とズレている生成層Answer Relevancy ↓プロンプト改善
回答が事実と違う生成層Faithfulness ↓プロンプト強化・モデル変更
「分かりません」が多い検索層Context Recall ↓top-k 増・埋め込み改善
関係ない情報で答える検索層Context Precision ↓リランカー・ハイブリッド検索
質問を変えると品質がバラつく両方Noise Sensitivity ↓リランカー・プロンプト明示

この切り分けができるようになることが、評価駆動開発の最初のマイルストーンです。


主要評価ツール比較——Ragas・DeepEval・TruLens・LangSmith

RAG評価の主要ツールを比較します。いずれもPythonから利用でき、LangChain や LlamaIndex と統合可能です。

ツール特徴強み向くユースケース
RagasRAG特化のOSS評価ライブラリRAG特有の指標が豊富・合成データ生成機能RAG精度を体系的に測りたい中小企業
DeepEvalpytest風の書き味ユニットテスト感覚で書ける・CI/CD親和性が高いエンジニアリング文化のあるチーム
TruLensトレーシングと評価の統合各ステップの可視化が強い・デバッグ向き複雑なエージェント型RAGの内部分析
LangSmith EvaluationLangChain公式のマネージドサービストレース・評価・データセット管理が一体化LangChain本番運用中のチーム

選定の考え方: 中小企業で「これから評価を始める」なら、まず Ragas で指標を定義しゴールデンデータセットを作り、CI/CD組み込みの段階で DeepEval を足す、という組み合わせが現実的です。LangChain をフル活用しているチームは LangSmith、複雑なエージェント型の内部を追う必要があるなら TruLens、という住み分けになります。

Ragas の最小実装例

from ragas import evaluate
from ragas.metrics import (
    context_precision,
    context_recall,
    faithfulness,
    answer_relevancy,
)
from datasets import Dataset

# ゴールデンデータセット(質問・正解・RAGが返したコンテキストと回答)
data = {
    "question": ["返品ポリシーを教えて"],
    "contexts": [["弊社の返品は購入から30日以内であれば可能です。..."]],
    "answer": ["30日以内であれば返品可能です。"],
    "ground_truth": ["購入から30日以内の返品が可能"],
}
dataset = Dataset.from_dict(data)

result = evaluate(
    dataset,
    metrics=[context_precision, context_recall, faithfulness, answer_relevancy],
)
print(result)

ゴールデンデータセット構築——50〜200問で始める現実解

評価駆動開発の成否を決めるのは、どのツールを使うかよりも「ゴールデンデータセット」の質です。「正しい質問・コンテキスト・理想の回答」のセットがなければ、どのツールを使っても意味のある評価はできません。

「1000問規模が必要」と誤解されがちですが、中小企業の業務RAGなら50〜200問で十分に有用な評価ができます。むしろ少数でも品質の高いデータセットを作るほうが、大量の粗いデータセットより改善サイクルが回しやすくなります。

設計の4原則

1. 業務の実分布を反映する。 実際にユーザーが問い合わせる質問の分布に合わせます。FAQ の上位20問ばかりではなく、エッジケースも含めます。

2. 難易度を段階化する。 「1つのチャンクで答えられる簡単な質問」「複数のチャンクを統合する必要がある質問」「答えが存在しない質問(Don’t know問題)」の3レベルを混ぜます。

3. 正解を明示する。 理想の回答(ground_truth)と、回答に必要なチャンクの出典を人手で明示します。これが無いと Context Recall が測れません。

4. 継続的に育てる。 一度作って終わりではなく、本番で見つかった失敗ケースをテストケースとして加えていきます(後述のシャドウテスト)。

質問カテゴリの分類

カテゴリ測れるもの目安比率
単一チャンク回答「営業時間は?」基本的な検索・生成精度40%
複数チャンク統合「返品と交換の違いは?」Multi-hop な推論能力25%
条件付き質問「法人契約で返品したい場合は?」条件分岐と特化情報の検索15%
言い換え・口語表現「返すことってできる?」表記ゆれへの耐性10%
Don’t know(回答不能)「競合A社の営業時間は?」ハルシネーション耐性10%

合成データ生成と人手レビューの組み合わせ

ゼロから200問を人力で作るのは負担が大きいため、次のハイブリッドが現実的です。

  1. Ragas の TestsetGenerator や Claude Opus / GPT-5 で、ドキュメントから質問と回答を合成生成する(目標数の1.5〜2倍)
  2. 人手で不自然な質問の除去・正解の検証・難易度バランスの調整を行う
  3. Don’t know 問題を人手で追加(合成だと生成されにくい)
  4. 業務担当者(エンドユーザー側)に10〜20問だけレビューを依頼し、実分布との乖離を修正

この手順なら、2〜3日の稼働で100問規模のゴールデンデータセットが作れます。


LLM-as-a-Judge——評価者LLMのバイアスと対策

Faithfulness や Answer Relevancy のような指標は、計算式だけでは算出できないため、評価者としてLLMを使う「LLM-as-a-Judge」が主流です。GPT-5 や Claude Opus 4.6 に「この回答はコンテキストに忠実か?」を判定させる方式です。

便利な一方で、LLM-as-a-Judge には以下の既知のバイアスがあり、対策が必要です。

バイアス内容対策
位置バイアス(Position Bias)ペア比較で最初に提示された回答を好む傾向提示順序をランダム化、両方向で評価し平均
冗長性バイアス(Verbosity Bias)長い回答を「詳しい」と高評価しがち評価プロンプトで「長さではなく正確性」と明示
自己選好バイアス(Self-preference)評価者LLMが自身のスタイルに近い出力を好む生成モデルと評価モデルを別ベンダーにする
単調スコアリング中央値(3 / 5点)ばかり付ける二値判定(Yes / No)や Chain-of-Thought を併用

実務上の鉄則: 生成に使うLLMと評価に使うLLMは必ず別ベンダーにします。Claudeで生成してClaudeで評価すると、自己選好バイアスで甘い評価になります。生成がClaude、評価がGPT-5(またはその逆)という組み合わせが安全です。

さらに、月に1回程度は人手評価とLLM評価のアライメント(一致率)を測ると、LLM評価のドリフトを早期に検知できます。100問中20問程度を人手でスコア付けし、LLM評価との相関が低下していれば、評価プロンプトを見直します。


CI/CDへの組み込み——GitHub Actionsで回帰テストを回す

評価は「一度実行して終わり」では意味がありません。埋め込みモデル変更・プロンプト変更・チャンクサイズ変更のたびに自動で回帰テストを回すことで初めて改善サイクルが閉じます。

GitHub Actions ワークフローの例

name: RAG Evaluation

on:
  pull_request:
    paths:
      - 'rag/**'
      - 'prompts/**'
      - 'configs/**'

jobs:
  evaluate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run RAG evaluation
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: python scripts/evaluate_rag.py --dataset golden_set.json --output results.json

      - name: Compare with baseline
        run: python scripts/compare_baseline.py --current results.json --baseline baseline.json --threshold 0.02

      - name: Comment results on PR
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const report = fs.readFileSync('report.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.name,
              body: report
            });

閾値設計のポイント

絶対値ではなく相対値で見る。 「Faithfulness 0.85 以上」という絶対閾値よりも、「ベースラインから -0.02 以上の低下はブロック」という相対閾値のほうが実用的です。絶対閾値は作業者が麻痺しやすく、不安定なためです。

指標ごとに閾値を分ける。 Faithfulness の低下は致命的なので厳しめ(-0.01 でブロック)、Context Precision は -0.03 まで許容、のように重要度で使い分けます。

警告と失敗を分ける。 軽度の低下は CI を失敗させずコメントのみ、致命的な低下は merge をブロック、という2段階にすると運用が回りやすくなります。


シャドウテスト設計——本番データから継続的にテストケースを追加

ゴールデンデータセットは作った時点が最高の状態ではなく、本番で見つかる失敗ケースを吸収して育てていくものです。そのための仕組みがシャドウテストです。

シャドウテストの基本フロー

  1. 本番ログの蓄積: 本番RAGのクエリ・検索されたチャンク・回答・ユーザーフィードバック(Good / Bad)をログに残す
  2. 失敗ケースの収集: Bad評価 or 低信頼度スコア or 「分かりません」回答を週次で抽出
  3. テストケース化: 失敗ケースから質問を取り出し、正解をドキュメント担当者が記述してゴールデンデータセットに追加
  4. 回帰テスト: 次のリリースで「過去に失敗したケースが再度失敗しないか」を確認

シャドウテストで検知しやすい問題

問題発見シグナル対応
新ドキュメントの追加で既存質問が悪化既存テストのスコア低下チャンク戦略の見直し
ユーザーの表現が想定と違う類似質問で検索結果が不安定言い換えパターンをデータセットに追加
ドキュメント内の矛盾Faithfulness の散発的低下ドキュメントのクレンジング
LLMのバージョンアップで挙動変化同一入力で出力が変わるプロンプトの再チューニング

シャドウテストを導入すると、ゴールデンデータセットは月あたり10〜30問のペースで自然に育ちます。半年運用すれば、作成時の初期100問が300〜280問規模になり、評価の信頼性が大きく向上します。


Difyの評価機能とオープンソースツールの使い分け

ノーコード/ローコードでRAGを作れる Dify にも評価機能が組み込まれています。オープンソースの評価ツールと競合するように見えますが、役割は明確に分かれます。

観点Dify の評価機能Ragas / DeepEval など OSS ツール
利用者業務担当者・非エンジニアエンジニア
評価タイミングGUI での手動実行 or 定期実行CI/CD 自動実行
データセット管理Dify 内で完結Git管理・バージョン管理可能
指標のカスタマイズ限定的(提供指標の中から選択)完全カスタマイズ可能
大規模回帰テスト不向き得意

おすすめの使い分け: プロトタイピング段階や業務担当者による定性チェックは Dify の評価機能で回し、エンジニア主導の継続的改善と CI/CD 連携は Ragas/DeepEval で回す、という二段構えが効率的です。「定性は Dify、定量は OSS ツール」と役割分担すると、両者の強みを活かせます。


よくある質問(Q&A)

Q1. ゴールデンデータセットは何問あればいいですか?

業務RAGのPoCなら50問、本番運用なら100〜200問が現実的な目安です。1000問規模は本格的なプロダクトで継続改善を重ねた結果として到達するもので、最初から目指す必要はありません。それよりも「質問分布が実運用を反映しているか」「正解が明確に定義されているか」が重要です。

Q2. 評価に使うLLMのコストが気になります。安く抑える方法は?

3つのアプローチがあります。まず、毎PR全件ではなく差分のみ評価する(変更された埋め込み・プロンプトに関連する質問サブセットのみ実行)。次に、評価用にGPT-5 miniやClaude Haiku 4.5など軽量モデルを使う(Faithfulnessは軽量モデルでも精度が出やすい)。最後に、夜間バッチ/週次バッチで全件評価し、PR時は軽量な部分評価のみとする二段構えです。

Q3. 人手評価は完全に不要ですか?

不要ではありません。月1回程度、ゴールデンデータセットの10〜20%を人手で評価し、LLM評価との一致率(アライメント)を確認することが推奨されます。一致率が下がっている場合は評価プロンプトの見直しか、LLM評価者のバージョン変更を検討します。

Q4. LangSmith・Ragas・DeepEval のどれを選べばいいですか?

チームの構成と使用中のフレームワークで決めます。LangChain を本番で使っていて有料枠が問題にならないなら LangSmith の一体感が強力です。OSS 志向・自前運用志向なら Ragas(RAG特化・指標が豊富)+ DeepEval(CI/CD組み込み)の組み合わせが汎用的です。Ragas だけでも始められます。

Q5. ベクトルDBや埋め込みモデルを変更するとき、どう評価を回せばいいですか?

機能ブランチで変更後の設定に切り替え、ゴールデンデータセットで全件評価します。Context Precision と Context Recall が主要な観察指標です。Faithfulness や Answer Relevancy も副次的に動くので、同時に回帰を確認します。重要なのは「1つだけ変える」こと——埋め込みモデルとチャンクサイズを同時に変えると、改善・悪化の原因切り分けができなくなります。


まとめ——「測れなければ改善できない」

RAGの PoC フェーズから本番運用への移行で最大の壁は、技術ではなく「評価の仕組み」です。評価がないままチューニングを続けると、改善と悪化の判別がつかず、担当者の感覚に依存した属人的な運用に陥ります。

今日から始められるステップは以下の5つです。

1. 50問のゴールデンデータセットを作る。 業務担当者と協力して、実際の質問分布を反映した質問・正解・難易度バランスを設計します。

2. Ragas で5つのコア指標を計測する。 Context Precision / Recall / Faithfulness / Answer Relevancy / Noise Sensitivity で現状のベースラインを取ります。

3. 生成LLMと評価LLMを別ベンダーにする。 自己選好バイアスを避けるための最小の工夫です。

4. CI/CD に組み込む。 GitHub Actions で PR ごとに評価を回し、ベースラインからの低下をブロック条件にします。

5. 本番ログからシャドウテストを育てる。 週次で失敗ケースをデータセットに追加し、テストの網羅性を高めます。

「とりあえず動くRAG」と「継続的に改善できるRAG」を分けるのは、モデルやインフラではなく、評価を中心に据えた開発サイクルです。評価駆動開発を回せるチームは、埋め込みモデルの新製品が出ても、LLMのバージョンが上がっても、自信を持って切り替えられます。それが RAG をビジネスで長期運用するための基礎体力になります。


参考リンク

免責事項: 本記事は2026年4月時点の公開情報に基づく情報提供であり、特定のツール・サービスを推奨するものではありません。本記事で紹介した指標値・手法は一般的な目安であり、実際の業務RAGの品質保証を保証するものではありません。導入にあたっては、業務要件・コスト・セキュリティ要件に応じて、必要に応じて専門家にご相談ください。RAG評価ツールは急速に進化しているため、最新情報は各公式ソースで確認してください。

コメント

タイトルとURLをコピーしました