はじめに
Amazon Bedrock Knowledge Baseを使って、RAGを試してみました。
RAGとは
LLMが外部の情報(データベース、文書など)を取得し、その情報を基に回答を生成する技術のことです。
RAGを利用することで、外からは知りえない社内の情報等を参照して回答してくれるようになります。
正確な情報を与えることで、ハルシネーションを減らしたりもできます。
試してみた
LLMに読み込ませる文書を作成します。
・有給休暇は年間20日付与される
・リモートワークは週3日まで可能
・経費申請は月末までに提出すること
・毎月月末は出社すること
S3バケットを作成して、文書を保存します。
# バケット名はグローバルで一意なので、他の名前にしてください
aws s3 mb s3://my-knowledge-base-docs-0123
aws s3 cp 社内規定.txt s3://my-knowledge-base-docs-0123/
Knowledge Baseを構築します。
Amazon Bedrock ⇒ ナレッジベース ⇒ 作成
今回は、txtファイルなので、Unstructured dataです。Structured dataは、データベースのテーブルを扱う際に選択します。

後は、任意で設定を進めてください
- Knowledge base名:任意
- IAMロール:自動作成でOK
- データソース:S3を選択し、先ほどのバケットを指定
- 埋め込みモデル:Titan Text Embeddings V2
ベクトルデータベース1は、S3もしくはAuroraにしましょう。
Amazon OpenSearch Serverlessは放置するだけで料金が発生するようです。
料金も高いらしいので、要注意です。
同期が完了したら、「ナレッジベースをテスト」を押下して、テストを行います。
モデルはClaude Sonnet 4を指定しました。

無事に社内規定.txtを読み込み、抽象的な質問でも答えてくれるようになりました!
最後に
ベクトルDBをAmazon S3 Vectorsにしたため、放置しても料金はほぼ発生しないと思いますが、検証後は念のため削除しておきましょう。
今回構築したAmazon Bedrock Knowledge Baseを利用したRAGの流れです。
質問「休める日数は?」
↓
埋め込みモデルが質問をベクトル化 ← Titan Text Embeddings V2 の仕事
↓
ベクトルDB(Amazon S3 Vectors)から近い内容を検索
↓
生成モデルが回答を作成 ← Claude Sonnet 4 の仕事
↓
「年間20日の有給休暇が付与されます。」と回答
-
ベクトルデータベースとは、文章の「意味」を数値で表して保存・検索できるデータベースです。これにより、ユーザーが抽象的な聞き方をしても、AIが解釈して答えてくれるようになります。 ↩

