検索拡張生成(RAG)アプリケーションを構築する場合、回答の品質は取り込むデータに大きく依存します。Amazon Bedrock Knowledge Bases は Amazon Bedrock のフルマネージド RAG 機能であり、データソースの取り込み、保存、インデックス作成、検索を管理します。ユーザーはベクトルストアをプロビジョニングまたはスケーリングする必要がなく、デフォルトでサービス管理のモデルを使用して埋め込みと再ランキングを行います。
Web コンテンツの場合、通常は Amazon Bedrock Web Crawler データソースコネクタから始めます。このコネクタは、指定されたシード URL またはサイトマップをクロールし、robots.txt を尊重し、スケジュール同期をサポートし、JavaScript で読み込まれるコンテンツを待機できます。クローラーを構築、ホスト、運用する必要はありません。ただし、ページのメインコンテンツ領域のみをインデックスする、ナビゲーションなどの定型文を削除する、各ドキュメントにカスタムメタデータ属性を付加するなど、より詳細な制御が必要な場合があります。そのような場合、オープンソースの Python クローラーである Crawl4AI を使用して準備ステップを構築し、Markdown ファイルとメタデータサイドカーを Amazon S3 に書き込み、S3 データソース経由で知識ベースに取り込むことができます。
この記事は、aws-samples リポジトリの完全なサンプルに基づいて、適切な Web 取り込みパスを選択し、追加処理が必要なコンテンツに対してカスタム準備を実装する方法を示します。このソリューションは既知の Web プロパティのバッチ取り込みを対象としており、推論時のリアルタイム Web アクセス(Amazon Nova の Web Grounding など)ではありません。
ソリューションの概要:Amazon Bedrock Web Crawler でニーズを満たせる場合は、それを優先してください。robots.txt を尊重し、増分同期が効率的です。公共のソース資料が次のいずれかを必要とする場合は、Crawl4AI 準備パスを使用します。構造化 Markdown 準備(DefaultMarkdownGenerator とプルーニングコンテンツフィルターを使用してナビゲーションなどの定型文を削減し、見出し、リスト、表を保持。プルーニングはヒューリスティックであるため、代表的な出力を確認する必要があります)、有界で的を絞った抽出(オプションの CSS セレクターでページ領域のみを抽出し、幅優先走査をシードオリジン、ページ/パス/ホストスコープ、深さ、ページ数、URL パターンで制限)、カスタムメタデータ(ソース URL、クロールタイムスタンプ、コンテンツタイプ、カスタム属性を付加して検索結果をフィルタリング可能に)。マネージドとカスタマー管理の両方の知識ベースが Amazon S3 データソースをサポートするため、Crawl4AI パスはどちらでも機能します。この記事ではマネージド知識ベースを使用し、カスタマー管理知識ベースとの違いを注記します。
デフォルトでは、サンプルは AWS Fargate タスクをパブリックサブネットで実行し、インターネットゲートウェイ経由で設定された Web サイトにアクセスします。Crawl4AI の役割はソースドキュメントとメタデータサイドカーを準備した時点で終了し、その後は Amazon Bedrock Knowledge Bases が解析、チャンキング、埋め込み、インデックス作成、検索を処理します。ワークフローは次のとおりです。Amazon EventBridge がスケジュールに従って Amazon ECS タスクを起動します。タスクは設定された公開 Web サイトをクロールし、各ページの Markdown とメタデータサイドカーを準備します。ファイルを知識ベースデータソースの背後にある S3 バケットにアップロードします。Amazon Bedrock Knowledge Bases の取り込みジョブを開始します。知識ベースは新規および変更されたオブジェクトを読み取り、解析し、選択したチャンキング戦略を適用します。埋め込みを作成し、ベクトルストアにインデックスします。生成 AI アプリケーションは知識ベースにクエリを実行し、関連チャンクまたは引用付きの生成応答を取得します。タスクは起動時に AWS Systems Manager Parameter Store から非秘密のパイプライン設定を読み取ります。
このワークフローは公開ページのみを処理し、認証セッションは実装していません。サインインが必要なサイトでは、まず Amazon Bedrock Web Crawler の認証オプション(基本、フォームベース、SAML 認証を含む)を評価してください。サンプルを拡張して認証をサポートするには、セッション処理、AWS Secrets Manager への認証情報の保存、セキュリティレビューが必要です。
ワークフローの詳細:AWS CDK アプリはデプロイ時に実装をコンテナイメージとしてパッケージ化します。スケジュールがトリガーされると、コンテナは scripts/container_entrypoint.py を実行し、クロール、アップロード、取り込みを順に実行します。
ステップ 1:コンテンツのクロールと抽出。クロールステップは有界クロールを実行し、正常に準備された各ページの Markdown ファイルとメタデータサイドカーを書き込みます。コード例はコアロジックを示しています。BrowserConfig で JavaScript とヘッドレスモードを有効にし、AsyncWebCrawler でシード URL をクロールし、リダイレクト後の有効な宛先がスコープ内にあるか確認し、正規化 URL を重複排除し、fit_markdown または raw_markdown を抽出します。完全な実装にはタイトル、クロールタイムスタンプ、コンテンツタイプ、設定されたカスタム属性も含まれます。Amazon Bedrock Knowledge Bases はプレーンテキスト、HTML、Markdown、PDF、DOCX など複数のドキュメント形式をサポートします。ワークフローは Markdown を選択します。これは見出し、リスト、表を保持しつつ、生の HTML 全体を取得プロセスに持ち込まないためです。
ステップ 2:Amazon S3 へのアップロード。アップロードステップは、準備された各 Markdown ドキュメントと対応するメタデータサイドカーを、ワークフローの s3Prefix の下にある設定された S3 バケットに送信します。page.md の場合、サイドカーは page.md.metadata.json という名前でなければなりません(完全なソースファイル名に .metadata.json を追加)。ワークフローはサイドカーをドキュメントと同じ S3 ロケーションに保存します。Amazon Bedrock は各メタデータサイドカーを 10 KB に制限しています。サイドカーがこの制限を超える場合、実行はファイルを書き込む前にエラーで停止します。サイドカー内の各属性は、マネージドとカスタマー管理の両方の知識ベースが Amazon S3 データソースで受け入れる型付き形式(STRING や NUMBER など)を使用します。パイプラインは現在のクロールで生成されたパスのみをアップロードするため、古いローカルファイルは送信されません。
ステップ 3:Amazon Bedrock Knowledge Bases によるチャンキング、埋め込み、インデックス作成。コンテンツが S3 に配置されると、取り込みジョブが各ドキュメントをデータソースの取り込みパイプラインに渡します。デフォルトでは、マネージド知識ベースはマネージドパーサーを使用して解析方法を自動選択します。チャンキング戦略はデータソース接続時に選択し、後で変更することはできません。そのため、本番データソースを作成する前にオプションを評価してください。マネージド知識ベースは次のチャンキング戦略を提供します。デフォルトチャンキング(固定サイズ 300 トークン、20% オーバーラップ)、固定サイズチャンキング(カスタム最大トークン数とオーバーラップ率)、チャンキングなし(各ファイルを単一チャンクとして扱い、既に分割されたコンテンツに適しています)。チャンク境界と検索結果はコンテンツと選択した戦略に依存するため、代表的なページと評価質問を使用して比較してください。後で戦略を変更するには、新しいデータソースを作成する必要があります。カスタマー管理知識ベースでは、セマンティックおよび階層チャンキング、追加の解析オプションも利用できます。ワークフローはその後、取り込みジョブを開始します。簡略化されたコードは、boto3 を使用して start_ingestion_job を呼び出し、ジョブ ID を返す様子を示しています。同じ StartIngestionJob と GetIngestionJob の呼び出しは両方の知識ベースタイプで機能し、コンソールで進捗を監視できます。
ソリューションのデプロイ:AWS CDK を使用してワークフローを AWS アカウントにデプロイします。知識ベースのタイプによって前提条件が異なります。完了後、クリーンアップ手順に従ってリソースを削除します。前提条件には、AWS アカウント、マネージド知識ベース(サポートされているリージョンで、マネージド知識ベースと Amazon S3 コネクタの作成手順に従います。ワークフローはサイドカーをドキュメントと並べて書き込むため、データソースのメタデータファイルプレフィックスは空のままにします)または既存のカスタマー管理知識ベース(Amazon S3 への接続手順に従います。ワークフローはすべてのドキュメントにメタデータサイドカーを書き込むため、ベクトルストアがこれらの属性を保存およびフィルタリングできることを確認してください。たとえば、Amazon OpenSearch Serverless ベクトルインデックスは faiss エンジンを使用する必要があります。Amazon Aurora ベクトルインデックスにはカスタムメタデータ列またはメタデータ属性ごとの列が必要です。Amazon S3 Vectors を使用する場合、各ベクトルに最大 1 KB のカスタムメタデータを添付できるため、追加する属性は短く保ってください)が必要です。また、その知識ベースに Amazon S3 データソースが必要です。