Slide 1

Slide 1 text

Amazon Bedrock Knowledge Bases: KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する JAWS-UG東京 2024冬 ~AWSライトニングトークNight~ 2024.12.16

Slide 2

Slide 2 text

自己紹介 о 名前:飯田壮一 о 所属:株式会社HBA о 業務:AWS基盤環境構築、運用 о 資格:AWS認定×12 о 家族:妻、息子(4歳)、娘(1歳) 社外初登壇です! ※発表は個人の見解に基づくものであり、所属組織を代表するものではありません。

Slide 3

Slide 3 text

Knowledge Basesが一般提供されて1年が経ちました https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-bedrock-knowledge-bases/

Slide 4

Slide 4 text

検索 インデックス 質問 LLM 応答 Knowledge Basesで今できること Indexing ●データを検索しやすい形に 構造化してインデックス化 ●扱えるデータソース ●ユーザの質問に対して関連性の 高い情報を検索 Retrieval ●検索インデックスを保存するDB Store Generation ●ユーザの質問と検索結果(コンテキ スト)から最終応答を生成 DataSource RAGを構成する要素に分解して整理すると 理解しやすい(個人の肌感) ドキュメント

Slide 5

Slide 5 text

検索 インデックス 質問 LLM 応答 ドキュメント ●データの取り込み - IngestionJob API - KnowledgeBaseDocuments API - new ●データ解析戦略 - default - Foundation models - Data Automation(BDA) - new ●チャンキング戦略 - default - 固定サイズ - Hierarchical - セマンティック - カスタム(Lambda) ●埋め込みモデル - Titan Text Embeddings v2 - Cohere Embed Multilingual v3 ●埋め込みタイプ - Floating-point vector embeddings - Binary vector embeddings ●データ削除ポリシー - Delete - Retain ●データソースの種類 - Amazon S3 - Web Crawler - Confluence - Salesforce - Sharepoint - Custom - new ●検索タイプ - ベクトル検索 - ハイブリッド検索 - セマンティック検索 ●高度なデータ操作 - メタデータフィルタ(手動) - メタデータフィルタ(自動) - new - クエリ書き換え - Reranking - new Retrieval ●ストアの種類 - OpenSearch Serverless - Aurora - MongoDB Atlas - Pinecone - Redis Enterprise Cloud - Neptune Analytics - new - Amazon Redshift - new - Amazon Kendra GenAI Index - new Store Generation ●生成モデル - Amazon Titan - Anthropic Claude - Cohere Command - Meta Llama - Mistral - Amazon Nova - new ●応答 - ストリーミング応答 - new DataSource ●その他 - ガードレール - RAG評価 – new Knowledge Basesで今できること Indexing

Slide 6

Slide 6 text

検索 インデックス 質問 LLM 応答 ●データの取り込み - IngestionJob API - KnowledgeBaseDocuments API - new ●データ解析戦略 - default - Foundation models - Data Automation(BDA) - new ●チャンキング戦略 - default - 固定サイズ - Hierarchical - セマンティック - カスタム(Lambda) ●埋め込みモデル - Titan Text Embeddings v2 - Cohere Embed Multilingual v3 ●埋め込みタイプ - Floating-point vector embeddings - Binary vector embeddings ●データ削除ポリシー - Delete - Retain ●検索タイプ - ベクトル検索 - ハイブリッド検索 - セマンティック検索 ●高度なデータ操作 - メタデータフィルタ(手動) - メタデータフィルタ(自動) - new - クエリ書き換え - Reranking - new Retrieval ●ストアの種類 - OpenSearch Serverless - Aurora - MongoDB Atlas - Pinecone - Redis Enterprise Cloud - Neptune Analytics - new - Amazon Redshift - new - Amazon Kendra GenAI Index - new Store Generation ●生成モデル - Amazon Titan - Anthropic Claude - Cohere Command - Meta Llama - Mistral - Amazon Nova - new ●応答 - ストリーミング応答 - new ●その他 - ガードレール - RAG評価 – new 本資料のテーマ Knowledge Basesで今できること Indexing ドキュメント ●データソースの種類 - Amazon S3 - Web Crawler - Confluence - Salesforce - Sharepoint - Custom - new DataSource

Slide 7

Slide 7 text

KnowledgeBaseDocuments API о データソースに含まれる全ドキュメントの一覧を取得する о データソース内の特定のドキュメントの情報を取得する о ベクトルストアから特定のドキュメントを削除する о ベクトルストアに特定のドキュメントを取り込む 4つのAPIが追加され、ドキュメントレベルでの ベクトルインデックス作成、削除が可能となった https://awsapichanges.com/archive/changes/e1bd6e-bedrock-agent.html

Slide 8

Slide 8 text

KnowledgeBaseDocuments API 【メリット】 о 時間のかかる従来のデータソース全体の同期が不要となり、運用上のボトルネックが解消 о S3イベント通知と組み合わせることで、データの取り込みや削除を自動かつリアルタイムに行え、 常に最新データを活用するよう構成可能(以下、一例) S3 追加・上書き 削除 S3イベント通知 s3:PutObject S3イベント通知 s3:DeleteObject Lambda(ingest) Lambda(delete) DeleteKnowledgeBaseDocuments IngestKnowledgeBaseDocuments インデックス作成 インデックス削除 ベクトルストア Bedrock Knowledge Bases Bedrock Knowledge Bases

Slide 9

Slide 9 text

【手順】※ナレッジベースはS3をデータソースとして作成済みの前提 1. Lambda関数を作成する о Lambdaコードを実装する о アクセス権限を設定する о Lambdaレイヤーを追加する о Lambda関数をテストする 2. S3イベント通知を設定する о 作成したLambda関数をS3イベント通知に関連付ける 3. RAGできるか試してみる о S3にファイルアップロードする о ナレッジベースをテストする о S3からファイルを削除する さっそく試してみた

Slide 10

Slide 10 text

1.Lambda関数を作成する о Lambdaコードを実装する(Python) ●IngestKnowledgeBaseDocuments ●DeleteKnowledgeBaseDocuments https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agent.html

Slide 11

Slide 11 text

1.Lambda関数を作成する о アクセス権限を設定する - ユーザガイドに従い、Lambdaの実行ロールにKnowledgeBaseDocuments API操作に必要 な権限を設定する https://docs.aws.amazon.com/bedrock/latest/userguide/kb-direct-ingestion.html ※落とし穴あり(後述)

Slide 12

Slide 12 text

1.Lambda関数を作成する о Lambdaレイヤーを追加する - KnowledgeBaseDocuments API操作には、boto3/botocoreのバージョン1.35.72以上が必 要なので、Lambdaレイヤーを追加する $ mkdir boto3 $ pip install boto3 -t boto3/. $ zip -r ./boto3.zip ./boto3

Slide 13

Slide 13 text

1.Lambda関数を作成する о Lambda関数をテストする - テストイベントテンプレートに「S3 Put」と「S3 Delete」が用意されているので簡単にテスト実行 が可能 テスト実行 AccessDeniedExceptionが発生します

Slide 14

Slide 14 text

1.Lambda関数を作成する о アクセス権限を再設定する - 「StartIngestionJob」「AssociateThirdPartyKnowledgeBase」が追加で必要だった Lambda テスト再実行 ベクトルストアとしてサードパーティ 利用の場合に必要 ドキュメント単位の取り込みでも 同期ジョブ開始の権限は必要

Slide 15

Slide 15 text

2. S3イベント通知を設定する о 作成したLambda関数をS3イベント通知に関連付ける

Slide 16

Slide 16 text

3.RAGできるか試してみる о S3にファイルアップロードする - BedrockユーザガイドをS3アップロードすると、すぐに同期が開始され、数分で完了 S3(upload) Bedrock(Syncing) Bedrock(Success)

Slide 17

Slide 17 text

3.RAGできるか試してみる о ナレッジベースをテストする - 回答は微妙だが、追加したBedrockユーザガイドを参照して回答している

Slide 18

Slide 18 text

3.RAGできるか試してみる о S3からファイルを削除する - BedrockユーザガイドをS3から削除すると、すぐに削除が開始され、十数秒で完了 S3(delete) Bedrock(deleting) Bedrock(deleted)

Slide 19

Slide 19 text

о ナレッジベースがドキュメント単位での取り込み、削除に対応(KnowledgeBaseDocuments API) о S3イベント通知との組み合わせで、簡単に自動かつリアルタイム処理できる о Pythonの場合、boto3/botocoreバージョンは1.35.72以上 о Lambdaの実行ロールに「StartIngestionJob」の権限も必要 まとめ

Slide 20

Slide 20 text

ご清聴ありがとうございました