Amazon Bedrock Knowledge Bases で構築する RAG アプリケーション - 検索拡張生成の実装
S3 上のドキュメントを自動インデックス化し、RetrieveAndGenerate API で検索と生成を統合する。チャンキング戦略の選定と Guardrails による安全性確保を紹介します。
RAG パターンと Knowledge Bases の概要
RAG (Retrieval-Augmented Generation) は、大規模言語モデル (LLM) の回答を外部知識で補強するパターンです。LLM 単体ではトレーニングデータに含まれない最新情報や社内固有の情報に回答できませんが、RAG では質問に関連するドキュメントを検索し、その内容をコンテキストとして LLM に渡すことで、正確で根拠のある回答を生成します。Bedrock Knowledge Bases はこの RAG パターンをマネージドに提供し、ドキュメントのインデックス化、ベクトル検索、LLM による回答生成を統合します。
データソースとチャンキング戦略
データソースとして S3 バケットを指定し、PDF、HTML、Markdown、Word、CSV などのドキュメントを自動的にインデックス化します。ドキュメントはチャンク (断片) に分割され、各チャンクがベクトル化されてベクトルストアに格納されます。チャンキング戦略は検索精度に直結する重要な設計判断です。固定サイズチャンキングは指定した文字数で均等に分割し、シンプルですが文脈が途切れる可能性があります。セマンティックチャンキングは文の意味的なまとまりに基づいて分割し、文脈の保持に優れます。階層的チャンキングは親チャンク (大きな文脈) と子チャンク (詳細な情報) の 2 層構造で、検索時に子チャンクでマッチし、LLM には親チャンクの広い文脈を渡すことで精度を向上させます。
API の使い方と Guardrails 統合
RetrieveAndGenerate API は質問テキストを受け取り、関連ドキュメントの検索と LLM による回答生成を 1 回の API コールで実行します。レスポンスには生成された回答と、回答の根拠となったソースドキュメントの引用情報 (S3 URI 、該当箇所) が含まれます。 Retrieve API は検索のみを実行し、取得したチャンクをアプリケーション側で加工してから LLM に渡すカスタムフローに使用します。 Guardrails を Knowledge Bases に適用すると、回答生成時にコンテンツフィルター (不適切な内容のブロック)、 PII マスキング (個人情報の自動除去)、拒否トピック (回答を拒否するトピックの定義) が自動的に適用されます。 生成 AI について体系的に学びたい方は、関連書籍 (Amazon)も参考になります。
Knowledge Bases の料金
Knowledge Bases の料金はドキュメントのインデックス化 (ベクトル化) とクエリで構成されます。ベクトル化は使用する埋め込みモデル (Titan Embeddings V2 で 1,000 トークンあたり約 0.00002 ドル) の料金が適用されます。クエリ時は埋め込みモデルの料金に加え、回答生成に使用する LLM (Claude 3 Haiku で入力 1,000 トークンあたり約 0.00025 ドル) の料金が発生します。ベクトルストアとして OpenSearch Serverless を使用する場合、OCU (OpenSearch Compute Unit) の時間課金 (1 OCU あたり約 0.24 ドル/時) が主要なコスト要因になります。Pinecone や Aurora PostgreSQL pgvector を代替のベクトルストアとして選択し、コストを最適化できます。
ベクトルストアの選択
RAG の検索性能とコストは、ベクトルの保存先となるストアの選び方に左右されます。マネージドな検索基盤を使えば構築の手間が少なく、すぐに始められますが、稼働時間に応じた費用がかかります。既存のリレーショナルデータベースにベクトル拡張を組み込む方式なら、運用を既存基盤に寄せられ、データ量が小〜中規模ならコストを抑えやすくなります。外部の専用ベクトルデータベースを選ぶ選択肢もあります。データ量、検索の頻度、許容できる運用負荷を踏まえ、要件に合うストアを選ぶことが、費用対効果の高い RAG 構築の出発点になります。
検索精度の改善
RAG の回答品質は、関連するチャンクを正確に取り出せるかにかかっています。チャンクにメタデータを付与し、文書の種類や日付で絞り込めるようにすると、無関係な情報の混入を防げます。意味的な近さに基づくベクトル検索と、キーワードの一致を見る検索を組み合わせると、固有名詞や型番のような厳密な語にも強くなります。取得した候補を関連度で並べ替える再ランク付けを挟めば、上位に本当に関連する内容を集められます。検索段階の精度を高めることが、最終的な回答の正確さに直結します。
回答品質と引用の活用
RAG の大きな利点は、回答の根拠となった出典を提示できることです。生成された回答に、参照したドキュメントの場所や該当箇所を添えることで、利用者は内容の真偽を自分で確認できます。これは、もっともらしいが誤った内容を述べてしまうハルシネーションへの有効な対策になります。検索で十分な根拠が得られなかった場合は、無理に答えさせず「わからない」と返す設計も重要です。回答の正確さを定期的に評価し、誤りが多いパターンを見つけて改善する仕組みを持つことで、信頼できる RAG アプリケーションへと育てられます。
データの更新と運用
知識ベースは、元データの変化に追従させてこそ価値を保ちます。S3 のドキュメントが更新されたら、インデックスを同期して最新の状態を反映します。全件を作り直すのではなく、変更分だけを取り込めれば、更新コストと時間を抑えられます。機微な情報を含むドキュメントには、参照できる利用者を制限するアクセス制御を組み合わせ、権限のない人に内容が漏れないようにします。どのデータを、いつ、どの範囲の利用者に公開するかを運用ルールとして定めることで、安全かつ常に新鮮な知識ベースを維持できます。
まとめ
Bedrock Knowledge Bases は RAG パターンをマネージドに実装するサービスです。S3 上のドキュメントを自動インデックス化し、RetrieveAndGenerate API で検索と生成を統合します。チャンキング戦略の最適化と Guardrails の適用で、正確で安全な RAG アプリケーションを構築できます。