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 を代替のベクトルストアとして選択し、コストを最適化できます。

まとめ

Bedrock Knowledge Bases は RAG パターンをマネージドに実装するサービスです。S3 上のドキュメントを自動インデックス化し、RetrieveAndGenerate API で検索と生成を統合します。チャンキング戦略の最適化と Guardrails の適用で、正確で安全な RAG アプリケーションを構築できます。