コラム / AI/技術 /
RAGの精度を倍増させる7つのテクニック ─ 現場で本当に効いた改善ポイント
📖 約10分 / 公開日: 2026/05/15
## RAGの精度を「上げる」のではなく「劇的に変える」
RAG(Retrieval Augmented Generation)の改善記事は世に溢れています。しかし多くは断片的で、「結局何から手を付ければよいか」が見えにくいのが現実です。本稿では、当社が実際の現場で繰り返し効果を確認した7つのテクニックを、優先順位順に紹介します。
これらは特定のフレームワーク(LangChain、LlamaIndex)に依存しない、汎用的なテクニックです。Pinecone、Weaviate、Qdrant、pgvector、Elasticsearch、どのベクトル DB でも適用できます。
## テクニック1: 評価データセットを作る(最優先)
計測なくして改善なし。これは絶対の原則です。
具体的な質問と「期待する回答」「期待する引用文書」のペアを 30〜100組、ユーザーに協力してもらって作成してください。これがなければ、何を改善しても「良くなった気がする」止まりで、客観的な議論ができません。
評価指標は最低でも以下を計測しましょう。Recall@5(上位5件に正解文書が含まれる率)、Answer Relevancy(回答の関連度)、Faithfulness(回答が引用文書に忠実か)。RAGAS、TruLens、DeepEval などのフレームワークが使えます。
この作業を「面倒だから」とスキップする現場が多いのですが、これをしないと改善が空回りします。逆に、これさえあれば、改善は驚くほど高速になります。
## テクニック2: ハイブリッド検索(ベクトル + BM25)
純粋なベクトル検索(コサイン類似度)は、固有名詞、数値、エラーコードに弱い特性があります。「ABC-123 の不具合について」のようなクエリで、ベクトル検索が ABC-123 を別の何かに丸める失敗が頻発します。
これを補うのが BM25(キーワード検索)です。文字列の完全一致や部分一致を捉えるため、ベクトル検索の弱点を補完します。
両者の結果を組み合わせる手法として、Reciprocal Rank Fusion (RRF) が標準的です。それぞれの検索で上位k件を取り、ランクの逆数を足し合わせて再ランキングします。これだけで Recall が大幅に向上します。
## テクニック3: 再ランキング(Reranking)
初段の検索(ベクトル+BM25)で上位20件を取り、その後に Reranker で上位5件に絞り込むと、生成側の品質が劇的に上がります。
Reranker には Cohere Rerank、Voyage Rerank、または Cross Encoder モデル(multilingual-e5-rerank など)が使えます。Cohere の API は安価で精度が高く、商用利用に向いています。
この「広く取って絞る」アプローチは、検索の取りこぼしと精度の両方を担保する優れた手法です。コストもReranker分の数百〜数千円/月程度なので、導入価値が高いです。
## テクニック4: チャンキングを意味単位に
「800文字で固定分割」は最悪です。文章の途中、表の途中、リストの途中で切れます。
推奨はセマンティック チャンキング(LLM ベースの意味単位分割)か、構造保持チャンキング(章/節/段落の階層を保持)です。LangChain や LlamaIndex には、これらの機能が組み込まれています。
加えて、隣接チャンク間で 50〜150 文字のオーバーラップを持たせると、境界付近の情報の取りこぼしを防げます。
## テクニック5: メタデータフィルタの活用
「2024年の決算情報」「人事部のポリシー」「製品Aのマニュアル」のようにスコープが明確な質問では、検索時にメタデータでフィルタすると精度が大幅に上がります。
そのためには、ドキュメントを取り込む時点で、年度、部署、製品、種別などのメタデータを付与する必要があります。前処理の段階で、ドキュメントから自動的にメタデータを抽出する仕組み(LLM ベースで実装可能)を組み込んでおきましょう。
## テクニック6: クエリ拡張(HyDE)
HyDE(Hypothetical Document Embeddings)は、ユーザーのクエリから「もし完璧な回答が存在するならこういう文書になるはず」というハイポセティカルな回答を LLM に生成させ、その回答ベクトルで検索する手法です。
クエリと文書のベクトル空間が乖離している場合(質問は短く、文書は長い、など)に劇的な効果があります。
## テクニック7: 生成プロンプトの構造化
生成側のプロンプトは、以下の要素を必ず含めましょう。
1. 「文脈に明確な答えがある場合のみ回答する」
2. 「文脈から推測する場合は『〜と思われます』と表現する」
3. 「文脈に答えがない場合は『その情報は見つかりませんでした』と明示する」
4. 「回答には引用元の [doc#XX] を末尾に付ける」
5. 「回答は簡潔に(X文字以内、X段落以内)」
これだけで、ハルシネーションは大幅に減ります。
## 優先順位の考え方
上記7つを一気に実装するのは大変です。私たちの経験では、以下の順序で導入すると、最も効率的に改善できます。
Step 1: 評価データセット構築(テクニック1)
Step 2: チャンキング見直し(テクニック4)
Step 3: 生成プロンプト改善(テクニック7)
Step 4: ハイブリッド検索導入(テクニック2)
Step 5: 再ランキング追加(テクニック3)
Step 6: メタデータフィルタ(テクニック5)
Step 7: クエリ拡張(テクニック6)
各 Step で評価指標を計測し、効果を確認してから次に進む。これが鉄則です。
RAG(Retrieval Augmented Generation)の改善記事は世に溢れています。しかし多くは断片的で、「結局何から手を付ければよいか」が見えにくいのが現実です。本稿では、当社が実際の現場で繰り返し効果を確認した7つのテクニックを、優先順位順に紹介します。
これらは特定のフレームワーク(LangChain、LlamaIndex)に依存しない、汎用的なテクニックです。Pinecone、Weaviate、Qdrant、pgvector、Elasticsearch、どのベクトル DB でも適用できます。
## テクニック1: 評価データセットを作る(最優先)
計測なくして改善なし。これは絶対の原則です。
具体的な質問と「期待する回答」「期待する引用文書」のペアを 30〜100組、ユーザーに協力してもらって作成してください。これがなければ、何を改善しても「良くなった気がする」止まりで、客観的な議論ができません。
評価指標は最低でも以下を計測しましょう。Recall@5(上位5件に正解文書が含まれる率)、Answer Relevancy(回答の関連度)、Faithfulness(回答が引用文書に忠実か)。RAGAS、TruLens、DeepEval などのフレームワークが使えます。
この作業を「面倒だから」とスキップする現場が多いのですが、これをしないと改善が空回りします。逆に、これさえあれば、改善は驚くほど高速になります。
## テクニック2: ハイブリッド検索(ベクトル + BM25)
純粋なベクトル検索(コサイン類似度)は、固有名詞、数値、エラーコードに弱い特性があります。「ABC-123 の不具合について」のようなクエリで、ベクトル検索が ABC-123 を別の何かに丸める失敗が頻発します。
これを補うのが BM25(キーワード検索)です。文字列の完全一致や部分一致を捉えるため、ベクトル検索の弱点を補完します。
両者の結果を組み合わせる手法として、Reciprocal Rank Fusion (RRF) が標準的です。それぞれの検索で上位k件を取り、ランクの逆数を足し合わせて再ランキングします。これだけで Recall が大幅に向上します。
## テクニック3: 再ランキング(Reranking)
初段の検索(ベクトル+BM25)で上位20件を取り、その後に Reranker で上位5件に絞り込むと、生成側の品質が劇的に上がります。
Reranker には Cohere Rerank、Voyage Rerank、または Cross Encoder モデル(multilingual-e5-rerank など)が使えます。Cohere の API は安価で精度が高く、商用利用に向いています。
この「広く取って絞る」アプローチは、検索の取りこぼしと精度の両方を担保する優れた手法です。コストもReranker分の数百〜数千円/月程度なので、導入価値が高いです。
## テクニック4: チャンキングを意味単位に
「800文字で固定分割」は最悪です。文章の途中、表の途中、リストの途中で切れます。
推奨はセマンティック チャンキング(LLM ベースの意味単位分割)か、構造保持チャンキング(章/節/段落の階層を保持)です。LangChain や LlamaIndex には、これらの機能が組み込まれています。
加えて、隣接チャンク間で 50〜150 文字のオーバーラップを持たせると、境界付近の情報の取りこぼしを防げます。
## テクニック5: メタデータフィルタの活用
「2024年の決算情報」「人事部のポリシー」「製品Aのマニュアル」のようにスコープが明確な質問では、検索時にメタデータでフィルタすると精度が大幅に上がります。
そのためには、ドキュメントを取り込む時点で、年度、部署、製品、種別などのメタデータを付与する必要があります。前処理の段階で、ドキュメントから自動的にメタデータを抽出する仕組み(LLM ベースで実装可能)を組み込んでおきましょう。
## テクニック6: クエリ拡張(HyDE)
HyDE(Hypothetical Document Embeddings)は、ユーザーのクエリから「もし完璧な回答が存在するならこういう文書になるはず」というハイポセティカルな回答を LLM に生成させ、その回答ベクトルで検索する手法です。
クエリと文書のベクトル空間が乖離している場合(質問は短く、文書は長い、など)に劇的な効果があります。
## テクニック7: 生成プロンプトの構造化
生成側のプロンプトは、以下の要素を必ず含めましょう。
1. 「文脈に明確な答えがある場合のみ回答する」
2. 「文脈から推測する場合は『〜と思われます』と表現する」
3. 「文脈に答えがない場合は『その情報は見つかりませんでした』と明示する」
4. 「回答には引用元の [doc#XX] を末尾に付ける」
5. 「回答は簡潔に(X文字以内、X段落以内)」
これだけで、ハルシネーションは大幅に減ります。
## 優先順位の考え方
上記7つを一気に実装するのは大変です。私たちの経験では、以下の順序で導入すると、最も効率的に改善できます。
Step 1: 評価データセット構築(テクニック1)
Step 2: チャンキング見直し(テクニック4)
Step 3: 生成プロンプト改善(テクニック7)
Step 4: ハイブリッド検索導入(テクニック2)
Step 5: 再ランキング追加(テクニック3)
Step 6: メタデータフィルタ(テクニック5)
Step 7: クエリ拡張(テクニック6)
各 Step で評価指標を計測し、効果を確認してから次に進む。これが鉄則です。