• #RAG
  • #検索
  • #埋め込み
  • #BM25
  • #Anthropic
  • #AI
  • #機械学習

この記事はRAG(検索拡張生成)技術に関するものです。Claude Code CLIでの直接的な利用可能性を以下に評価します。

項目適用可能性説明
Claude Code CLIで直接利用不可RAGシステムの構築が必要であり、CLI単体では利用不可
プロンプトキャッシング関連ありClaude APIを使用するアプリケーション開発時に参考になる
チャンク分割の知識間接的に有用長いコードベースをClaude Codeに渡す際の参考になる
BM25 + セマンティック検索不可外部検索システムの構築が必要
埋め込みモデルの選択指針参考情報RAGシステムを構築する際の知識として有用

結論: Claude Code CLIユーザーが直接活用することはできませんが、以下の場合に知識として役立ちます:

  • 自前のRAGシステムを構築してClaude APIと統合する場合
  • 大規模なコードベースの検索システムを設計する場合
  • AIアシスタントのコンテキスト管理を最適化する場合

Contextual Retrieval(文脈検索)の紹介

元記事: Introducing Contextual Retrieval - Anthropic Engineering Blog


はじめに

AI モデルの有用性を高めるために、開発者はしばしばバックグラウンド知識を提供する必要があります。例えば、顧客サポートチャットボットは関連するFAQ記事へのアクセスが必要であり、法律アナリストアシスタントは膨大な過去の判例を参照できる必要があります。

開発者は一般的に**RAG(Retrieval-Augmented Generation / 検索拡張生成)**を使用してモデルの知識を強化します。RAGは知識ベースから関連情報を取得してユーザーのプロンプトに追加することで、モデルの応答を大幅に改善します。しかし従来のRAGソリューションでは情報をエンコードする際に文脈が失われ、関連情報の取得に失敗することがあります。

本記事では、RAGにおける検索ステップを劇的に改善するシンプルな手法「Contextual Retrieval(文脈検索)」を紹介します。

問題:チャンク分割時の文脈喪失

RAGでは、知識ベースは小さなチャンク(断片)に分割されます。これらのチャンクはエンコード(埋め込みベクトル化など)され、後で関連チャンクを取得するための検索インデックスに保存されます。

しかし、チャンク分割プロセスで文脈情報が失われることがよくあります。

たとえばSEC(米国証券取引委員会)提出書類のチャンクに「前四半期比で売上高が3%増加した」という記述があるとします。このチャンクだけでは以下の重要な情報が欠落しています:

  • どの企業のデータか?
  • どの四半期のデータか?
  • どの会計年度のデータか?

このような情報の欠如により、正確な情報取得が困難になります。

解決策:Contextual Retrieval

Contextual Retrievalは、以下の2つのサブ技術で構成される手法です:

  1. Contextual Embeddings(文脈埋め込み)
  2. Contextual BM25(文脈BM25)

これらの手法は、エンコード前に各チャンクに説明的な文脈情報を前置することで、チャンクの意味を明確化します。

文脈生成プロンプト

以下のプロンプトを使用して、Claudeに各チャンクの文脈を生成させます:

<document>
{{WHOLE_DOCUMENT}}
</document>
Here is the chunk we want to situate within the whole document
<chunk>
{{CHUNK_CONTENT}}
</chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.

このプロンプトにより、通常50〜100トークン程度の簡潔な文脈説明が生成されます。

文脈付きチャンクの例

元のチャンク:

前四半期比で売上高が3%増加した。

文脈付きチャンク:

本ドキュメントは2024年第2四半期のAcme Corp年次SEC 10-K提出書類です。
前四半期比で売上高が3%増加した。

パフォーマンス結果

様々なデータセットでテストした結果、以下の改善が確認されました:

手法検索失敗率改善率
ベースライン(従来のRAG)5.7%-
Contextual Embeddings単独3.7%35%削減
Contextual Embeddings + BM252.9%49%削減
Contextual Embeddings + BM25 + Reranking1.9%67%削減

評価指標:1 minus recall@20(上位20チャンク内での検索失敗率)

BM25とセマンティック検索の組み合わせ

RAGシステムでは通常、セマンティック検索(埋め込み類似度検索)が使用されますが、BM25(語彙ベースの検索)と組み合わせることで、さらに性能が向上します。

なぜ両方が必要か?

  • セマンティック検索:意味的に類似した内容を見つけるのが得意
  • BM25:正確なキーワードマッチ、固有名詞、技術用語の検索が得意

統合方法

  1. TF-IDFエンコーディング意味埋め込みの両方を作成
  2. BM25で正確なキーワードマッチを検索
  3. 埋め込みで意味的類似性を検索
  4. ランク融合技術で結果を統合

リランキング(Reranking)

初期検索で多くの候補を取得し、より精度の高いモデルで再順位付けを行う手法です。

推奨されるパイプライン

初期検索(150チャンク取得)
    ↓
リランキング
    ↓
上位20チャンクを最終結果として使用

テスト済みリランキングモデル

  • Cohere reranker:テスト済み、良好な結果
  • Voyage reranker:代替オプション

実装上の考慮事項

チャンク設定

以下の要素が検索性能に影響します:

パラメータ推奨値備考
チャンクサイズ約800トークンドキュメントの性質に依存
ドキュメントサイズ8kトークン文脈生成時の入力サイズ
文脈説明50〜100トークン簡潔に保つ
チャンクオーバーラップ調整が必要ドメインに依存

埋め込みモデルの選択

テストの結果、以下のモデルが最良の性能を示しました:

  • Gemini Text 004
  • Voyage AI

取得チャンク数

チャンク数性能
5
10
20最適

コスト効率

Prompt Caching(プロンプトキャッシング)を活用することで、文脈化チャンク生成のコストを大幅に削減できます。

コスト見積もり

  • 想定条件:800トークンチャンク、8kトークンドキュメント
  • コスト100万ドキュメントトークンあたり $1.02(一度限り)

プロンプトキャッシングにより、ドキュメント全体を繰り返し送信する際のコストが大幅に削減されます。

知識ベースサイズの判断

RAGを使用すべきかどうかは、知識ベースのサイズによって判断します。

知識ベースサイズ推奨アプローチ
200,000トークン以下(約500ページ)RAG不要 - プロンプトに全体を含める
200,000トークン以上RAGを使用

RAG不要の場合のメリット

プロンプトキャッシングを使用して知識ベース全体をプロンプトに含めると:

  • レイテンシー:2倍以上削減
  • コスト:最大90%削減

カスタマイズのヒント

ドメイン固有の最適化

プロンプトにドメイン固有の情報を追加することで、文脈生成の品質が向上します:

  • 専門用語集の追加
  • 製品名やサービス名の定義
  • 組織構造の説明

参考リソース

詳細な実装については、以下のリソースを参照してください:

まとめ

Contextual Retrievalは、RAGシステムの検索精度を大幅に向上させるシンプルかつ効果的な手法です。

主要なポイント

  1. チャンクに文脈情報を付加することで、検索時の曖昧さを解消
  2. BM25とセマンティック検索の組み合わせで、キーワードマッチと意味検索の両方をカバー
  3. リランキングで最終的な精度を向上
  4. プロンプトキャッシングでコスト効率を最適化

これらの手法を組み合わせることで、検索失敗率を最大67%削減できます。


本記事は Anthropic Engineering Blog の翻訳です。