野中のre:Invent 2024 4 日目: Amazon Bedrock Knowledge Bases を使用してスケーラブルなRAGアプリケーションを構築する

こんにちは。クラウドネイティブ技術部の野中です。
2024年12月2日から12月6日にかけて開催されている re:Invent 2024 に現地で参加しております。
今回は、生成 AI 関連のサービス Amazon Bedrock Knowledge Bases に焦点を当てたセッションに参加しました。
このセッションを選んだ理由は、現在担当している RAG(Retrieval-Augmented Generation)を活用した社内文書検索システム構築のプロジェクトにおいて、 Amazon Bedrock Knowledge Bases の採用を検討しており実務にも活かせられればと考えたからです。

1. はじめに

生成AIの時代において、RAG(Retrieval-Augmented Generation)は、ユーザーの質問と実用的な知見を引き出す革新的な手法として注目を集めています。構造化データと非構造化データを統合することで、RAG アプリケーションは回答の文脈的な正確性を向上させます。本記事では、Amazon Bedrock の Knowledge Bases がどのようにスケーラブルな RAG ワークフローを実現し、主要な課題を克服するかを探ります。

2. RAG とは何か、その仕組みとは?

RAG は、検索メカニズムと生成 AI を組み合わせ、特定のデータセットに基づいた回答を生成します。例えば、法務チームが契約書の膨大なデータから特定の条項を検索し、関連する背景情報と共に提供するようなケースで利用されます。多様なデータ形式を取り込み、埋め込み処理を行うことで、文脈に応じた情報を元にした回答を生成します。

主な構成要素は次のとおりです

  • データ取り込みパイプライン:構造化データ(例: データベース)および非構造化データ(例: PDF)の取り込みとインデックス化
  • Retrieve API:モデルの出力に必要な文脈を取得
  • Generate API: 取得した文脈を統合して回答を生成

Amazon Bedrock の Knowledge Bases は、このプロセスを簡素化し、企業独自のデータや基盤 AI モデルとスムーズに連携させることを可能にします。

3. Amazon Bedrock Knowledge Bases の主な機能

i. Retrieve と Generate API

Retrieve API と Generate API は、Bedrock における RAG ワークフローの中核を成します。これにより、開発者は次のことが可能です

  • 任意のベクターストアにクエリを実行
  • 構造化データと非構造化データを統合
  • モデル間の互換性を維持

iI. マルチモーダルデータのサポート

Bedrock を使用することで、次のようなデータを活用できます。

  • テキストドキュメント
  • PDF に埋め込まれた画像や表

Bedrock のパーサーは、マルチモーダルデータから有益な情報を自動的に抽出し、RAG パイプラインに統合します。例えば、技術仕様書の表から特定の性能データを抽出する場合に活用されます。

iii. 構造化データの検索

Bedrock のネイティブサポートにより、次のことが可能です。

  • 自然言語クエリを SQL に変換
  • 接続されたデータベース上で SQL クエリを直接実行
  • 生成された回答に SQL クエリの引用を含めることで透明性を確保

iv. ハイブリッド検索と動的フィルター

Bedrock は次の機能を提供します。

  • メタデータフィルタリング
    • インデックス化されたデータのメタデータ(例: タグ、作成日時、カテゴリなど)を条件に指定することで、検索結果を絞り込むことができます
      • 例: 「2024年以降に作成された技術カテゴリの文書」を検索
  • ハイブリッド検索
    • セマンティック検索(意味に基づく検索)と語彙検索(キーワードマッチング)を組み合わせることで、柔軟かつ正確な検索を実現します
      • 例: 「価格を引き下げる方法」と検索した場合、「コスト削減」という類義語を含む文書も検索結果に含めつつ、特定のキーワード(例:「価格」)にもマッチする結果を提供
  • 動的フィルター
    • クエリ内容や文脈に基づいて、適切なフィルター条件を自動生成し適用します
      • 例: 「2024年の技術革新」と検索した場合、自動的に 年:2024カテゴリ:技術 がフィルタとして設定されます

v. Graph RAG 機能

Graph RAG は、複数のドキュメント間の関連性を解析し、統一された知識グラフを構築する技術です。この知識グラフを利用することで、要素間の関係を視覚化し、情報検索の精度と効率を向上させます。

特徴

  • 知識グラフの構築
    ドキュメント間の関連性を解析して、統合的な視点を提供。
  • 視覚化
    要素間の関係を視覚的に表現し、データの関連性を明確化。
  • 高精度な情報検索
    知識グラフを活用して、複雑なクエリにも迅速かつ的確に対応。

ユースケース

  • 法律契約
    • 契約条項間の関係をグラフ化し、潜在的なリスクや矛盾点を迅速に特定可能。
  • サプライチェーン管理
    • 部品供給元、製造プロセス、最終製品間の流れを把握し、効率的な在庫管理やボトルネックの解消を実現。
  • 医療分野
    • 患者のカルテや診療記録を統合し、疾患の関連性を分析して診断精度を向上。最適な治療プランの提案を支援。

技術基盤

  • Amazon Neptune
    知識グラフの作成・管理に Amazon Neptune を使用。これにより、高度なグラフデータの操作や複雑なクエリ処理が可能になります。
  • Bedrock との統合
    他の Bedrock 機能(例: ハイブリッド検索)と組み合わせることで、より高度な RAG アプリケーションを構築可能。

Graph RAG を活用することで、複雑な情報の整理と洞察の提供が大幅に効率化されます。

vi. ストリーミング応答

Bedrock はトークンごとのストリーミングを可能にし、待ち時間を短縮し、ユーザーエクスペリエンスを向上させます。この機能は、リアルタイムでタイピングしているかのような回答生成を実現します。

4. RAG アプリケーションの構築

Amazon Bedrock を活用した RAG アプリケーションの開発には、フェーズごとに明確な目標を設定し、具体的なアクションを実行することが重要です。

フェーズ 1: 計画と戦略

RAG アプリケーションの成功には、明確な目的とデータ戦略が必要です。

  • ユースケースの定義
    • ビジネスニーズを具体的に特定する。
      例: 社内文書検索、顧客サポート用のFAQ生成。
    • 主要なデータセットをリストアップし、利用可能性を確認する
  • データ準備
    • データを適切にチャンク化して埋め込みに最適化する。
      例: 技術データは階層構造で分割し、性能仕様と注記を統合。
    • データクリーニングを実施し、不必要な情報を削除
  • チームの連携
    • ビジネスチームとエンジニアリングチームの定期的なレビューを実施する 例: 要件定義や進捗確認のミーティングを週1回実施。

フェーズ 2: 開発と統合

アプリケーションを構築し、AWSサービスを組み合わせて統合する段階です。

  • Infrastructure as Code (IaC)
    • CloudFormation または Terraform を使用してインフラ展開を自動化する
  • AWS サービスの統合
    サーバーレスアーキテクチャを採用し、以下のサービスを統合
    • Lambda: RAGの処理ロジックを実装
    • Step Functions: ワークフローを管理し、処理の連携を簡素化
    • EventBridge: イベント駆動型のデータフローを構築
    • S3: データの保存と管理
    • Amazon DynamoDB: メタデータやインデックス情報の保存
    • Amazon Bedrock: 埋め込みモデルと生成モデルを統合
    • API Gateway: クエリや生成リクエストを外部から受け付ける
  • 一般的なRAGアプリケーションのコンポーネント
    以下のコンポーネントを組み合わせることで、RAGアプリケーションを構築します
    • ベクターストア
      • データ検索用に埋め込みベクトルを保存する
      • 例: Amazon OpenSearch Service または外部のベクターストアソリューション
    • 埋め込み生成モデル
      • クエリやデータに対する埋め込みベクトルを生成する
      • 例: Bedrock の埋め込みモデルや事前トレーニングされたモデルを活用
    • 生成モデル
      • 検索結果やベクターストアからのデータを基に、応答を生成するモデル
      • 例: Amazon Bedrock を活用したLLM(大規模言語モデル)
    • モニタリングとロギング
      • アプリケーションのパフォーマンスと正確性を監視するための仕組み
      • 例: CloudWatch を活用したログとメトリクスの収集。

フェーズ 3: テストと検証

開発したアプリケーションの精度やパフォーマンスを評価します。

  • A/B テスト
    • ベクターストアや埋め込みモデルの異なる構成を比較し、最適な設定を特定
  • RAG 評価
    • 生成された回答の関連性と正確性を確認
      • 関連性スコアの計算。
      • ユーザーの期待値に合った出力かを評価
  • セキュリティと規制要件の検証
    • Amazon Bedrock の「RAG 評価」機能を活用し、データがセキュリティ基準を満たしていることを確認

フェーズ 4: 継続的な改善

ユーザーフィードバックや運用データを基に改善を繰り返します。

  • 反復的な最適化
    • 検索結果や生成パイプラインを、ユーザーフィードバックを元に調整
  • スケーラビリティ
    • データ量やクエリ数の増加を見越し、効率的なワークフローを設計する

5. 事例紹介: Envirus と Instant Analyst

背景

エネルギー業界の SaaS プロバイダーである Envirus は、25年分の構造化および非構造化データからインサイトを引き出すという課題に直面していました。
Amazon Bedrock Knowledge Bases を活用し、"Instant Analyst" と呼ばれる RAG(Retrieval-Augmented Generation)を活用したソリューションを開発し、業務の効率化とデータ活用の変革を実現しました。

結果

  • 効率化: 調査時間を数日から数秒に短縮
  • 迅速なユーザー導入: 1四半期で52,000人のユーザーをオンボーディング
  • データの正確性向上: SEC によって検証されたインサイトを引用付きで提供

アーキテクチャ

"Instant Analyst" は、100% サーバーレスアーキテクチャで構築されています。以下が主要な構成要素です。

  1. データ取り込み
    • Amazon Textract: PDF や画像からテキストを抽出
    • Amazon Comprehend: 抽出データの自然言語処理 (NLP) を実施
  2. ベクターストア管理
    • 高度なインデックス作成のため、Kendra から OpenSearch へ移行
  3. RAG 検索
    • 動的フィルタリング再ランキング を実装し、関連性の高いチャンクを優先
  4. その他の要素
    • Amazon EventBridge: データのリアルタイム同期を維持
    • AWS Step Functions: サーバーレス環境での効率的なデータ処理を実現

6. RAG 応用例: 課題と対応策

マルチモーダルデータ処理

画像や表など、さまざまな形式のデータを統合的に処理し、次のような具体的な用途に対応します。

  • 法的文書の分析: 契約書や判例情報を効率的に検索し、要約を提供。これにより、法務業務の迅速化と正確性向上を実現
  • 技術マニュアルの処理: 設備保守や技術仕様書の情報を即座に検索可能にし、作業効率を向上

課題と対応策

  • 課題 1: データ形式の多様化への対応
    画像、表、テキストなどの異なるデータ形式を処理する際、一貫したデータ抽出と正確な情報統合が難しい。
    • 対応策: Amazon TextractAmazon Comprehend などの専用ツールを組み合わせ、各形式に最適化された処理フローを構築
  • 課題 2: データ間の関連性の保持
    マルチモーダルデータを統合する際、個別データ間の文脈や関連性が失われることがある。
    • 対応策: データ処理後に関連情報を再統合し、データ間のつながりを維持するメタデータ管理手法を導入
  • 課題 3: データサイズの拡大
    高解像度の画像や複雑な表を扱う場合、処理速度が低下しやすい。
    • 対応策: 高性能なサーバーレスアーキテクチャを採用し、処理パイプラインのスケーラビリティを確保

構造化データクエリ

RAG をデータベースと統合することで、自然言語による質問に対して的確な回答を提供します。

  • 例 1: 「2024年11月の最も売れた商品は何ですか?」
  • 例 2: 「この商品の現在の在庫は?」
    これらのクエリは、自動生成された SQL を実行して回答を生成し、関連ソースを引用付きで提示します。

課題と対応策

  • 課題: 自動生成された SQL が複雑なスキーマや大規模データに対して最適化されていない場合、結果の精度に影響を及ぼす
  • 対応策: SQL の検証を行い、必要に応じて手動で調整することでクエリ効率と回答精度を向上

    グラフベースの関係性分析(Graph RAG)

    データ間の複雑な関係性を視覚化し、次のような高度な分析を実現します。

  • 法律契約の関係性マッピング: 契約条項間の関連性をグラフで表示し、契約リスクの迅速な評価を支援
  • サプライチェーンのエンティティ分析: 供給元から出荷先までのデータフローを可視化し、全体像を統合的に把握

    課題と対応策

  • 課題 1: リアルタイム同期の困難さ
    データのリアルタイム同期が難しく、整合性が維持されない可能性がある。これにより、分析結果に矛盾が生じるリスクがある。
    • 対応策: Bedrock の同期機能を活用し、ベクターストア間のデータ一貫性を保つことで、分析精度を向上
  • 課題 2: 関係性の視覚化による情報過多
    大規模なグラフを扱う際、関連性が多すぎて重要な情報が埋もれる可能性がある。
    • 対応策: 再ランキングやフィルタリングアルゴリズムを導入し、分析対象の優先度を付けることで視覚的なノイズを削減

ユーザーエクスペリエンスの最適化

データ活用における応答速度は、ユーザー体験の向上に直結する重要な要素です。

課題と対応策

  • 課題: 応答時間が長い場合、ユーザーエクスペリエンスが低下する
  • 対応策: ストリーミング応答を導入し、トークン単位でリアルタイムに回答を提供することで、迅速なレスポンスを実現

7. まとめ

今回のセッションを通して、Amazon Bedrock Knowledge Bases の基本的な仕組みから実践的な活用法まで学ぶことができ、大変有意義な時間となりました。

今後の実務への応用

今後の実務において、以下のような取り組みを進めていきたいと考えています。

  • マルチモーダル対応の強化
    お客様の多様なデータ形式に対応できるよう、PDF や表データを扱う処理パイプラインを設計、導入する
  • Knowledge Bases の検証と採用
    実際のユースケースにおいて、Bedrock の Knowledge Bases を導入し、Retrieve API や Generate API を活用することで、検索精度とパフォーマンスの向上させる
  • ユーザーフィードバックを活用した改善
    ユーザーの声を定期的に収集し、それを元に検索・生成アルゴリズムの調整やユーザーインターフェースの改良を実施

全体の感想

今回のセッションは非常に実践的な内容が多く、現場での課題解決に直結する知見を多く得ることができました。Amazon Bedrock Knowledge Bases の可能性を深く理解することで、単なる理論だけでなく、実際のビジネス課題解決に向けた具体的なアプローチを構築するヒントを得ることができました。今後、さらに知識を深め、より良いシステム構築に活かしていきたいと思います。