Amazon BedrockのKnowledge BaseをPinecone無料枠で構築してみた
おはようございます。ベンジャミンの木村です!
突然ですがみなさん、BedrockのRAG機能のKnowledge Baseを使っていますか?
「Knowledge Baseを試しに使おうと思っているが、コストがかからないか心配…」という方も多いのではないでしょうか?
今回、一番コストがかかる部分であるベクトルデータベースをOpenSearch Serverlessを使用する方法ではなく、無料枠のPineconeを使って構築する方法を紹介させていただきます!
ベクトルデータベースとは?
ベクトルデータベースとは、生成AIが扱う非構造化データ(テキスト、画像、音声など)を数値として格納できるデータベースのことで、意味的に近いデータをベクトルの近さで表現し格納できます。
下記の図は”犬”に分類されるワード、”猫”に分類されるワードをそれぞれ、「意味の近さ」を数値的な「位置の近さ」で表現している例になります。
※下記は2次元ベクトルで表現しておりますが、実際はもっと多次元の数値になっています。

Bedrock Knowledegeは「埋め込みモデル(Cohere Embed v3等)」を使うことで、S3に格納しているドキュメントをベクトル数値に変化し、その数値をベクトルデータベースに格納してくれます。

1. Pineconeの準備をする
Pineconeのアカウントを作成し、indexを作成する手順になります。indexとは何かというと、他のDBで言うところのtableのことだと思ってください。
ちなみに無料枠ではindexは、1アカウントにつき、5 indexまでの制限がありますので、複雑なことはできないことを想定してください。
1-1以下URLより、Pineconeのトップページに移動し、サインアップする

1-2. ログイン後、左ペインの「INDEXS」→「Create index」ボタンをクリックする

1-3. 以下値を入力し、「Create index」ボタンをクリックする
- 名前:任意の値
- Configuration:「Setup by model」をクリックしモデルを選択する(今回はCohere-embedを選択する)
※上記以外はデフォルト値です
※無料枠の場合はリージョンがus-east-1しか選べないので、これ以降のaws作業はバージニア北部(us-east-1)を選択する必要があります

1-4. 「Host」をコピーし、値を控える

1-5. 左ペインより「API KEYS」を選択し、表示画面の「Value」を控える

2. Secrets ManagerにAPI KEYSを登録する
PineconeのAPI KEYSをSecrets Managerに登録する手順になります。
※Secrets Managerはバージニア北部で作成お願いします
2-1. 以下URLよりSecrets Managerのコンソール画面へ移動する
https://us-east-1.console.aws.amazon.com/secretsmanager/listsecrets?region=us-east-1#
2-2. 「新しいシークレットを保存する」ボタンをクリックする

2-3. 以下値を入力し、「次」のボタンをクリックする
- シークレットのタイプ:その他のシークレットのタイプ
- キー/値のペア:[キー:apiKey] / [値:項番1-5で控えたAPI KEY]
- 暗号化キー:aws/secretsmanager

2-4. 以下値を入力し、「次」のボタンをクリックする
- シークレットの名前:任意の名前
※他はデフォルトでOK

2-5. デフォルト値のまま、「次」のボタンをクリックする

2-6. 値に間違いが無いか確認し、「保存」のボタンをクリックする

2-7. 作成したSecrets ManagerのARNを控える

3. S3の作成
Bedrock KnowledgeBaseに読み込ませるドキュメントをS3に格納する手順になります。
3-1. 下記URLよりS3のコンソール画面へ移動する
https://s3.console.aws.amazon.com/s3
3-2. 「バケットの作成」をクリックする

3-3. 以下の通り入力し、「バケットを作成」をクリックする
- AWSリージョン:バージニア北部
- 名前:任意(一意の名前にしてください)
※他はデフォルト

3-4.作成したS3に、Bedrock KnowledgeBase へ読み込ませる資料をドラッグ&ドロップする
※資料の拡張子は.txt、.md、.html、.doc と .docx、.csv、.xls と .xlsx、および .pdfのみになります。また、名前はアルファベットで表記ください。

4. Bedrock Knowledgeの作成
Knowledge base の概要ですが、簡単にRAGが構築できるAWSマネージドサービスになります。
今までRAGを構築しようとした場合、ベクトルデータベース、ベクトル変換プログラム、FMをそれぞれ用意して組み合わせるための独自実装が必要でした。Knowledge baseは既にこれらが組み合わされているため、利用者はAWSコンソールから数クリックするだけで簡単にRAGを構築することができます。
4-1. 下記URLよりBedrock KnowledgeBaseのコンソール画面へ移動する
※リージョンはバージニア北部に作る必要があります
※アカウントログインの際はIAMユーザーでログインをお願いします
※事前に「モデルアクセス」より、使用するAIモデルの申請をお願いします
https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/knowledge-bases
4-2. 左ペインより「ナレッジベース」→「ナレッジベースを作成」をクリックする

4-3. 以下の通り入力し、「次へ」をクリックする
- ナレッジベース名:任意の名前
それ以外はデフォルト値でOK

4-4. 以下の通り入力し、「次へ」をクリック
- データソース名:任意の名前
- S3 URI:項番3で作成したKnowledge baseに読み込ませるS3バケットを選択する(S3 URIはBrowse S3より選択できる)

4-5. 以下の通り入力し、「次へ」をクリックする
- Embeddings model:用途に合わせてどれでもOK
※今回は多言語対応モデルのEmbed Multilingual v3を選択します - ベクトルデータベース:作成したベクトルストアを選択する
- 既存のデータベースを選択:Pinecone
※「Pinecone を選択することにより〜サードパーティーの諸条件を遵守する責任を負います。」にチェックをお願いします。 - エンドポイント URL:項番1-4で控えたのPineconeの「Host」の値
- 認証情報シークレット ARN:項番2-7で控えたのSecretsManagerの「ARN」の値
- テキストフィールド:text
- Bedrock マネージドメタデータフィールド:metadata
- 既存のデータベースを選択:Pinecone
※「シークレット用のカスタマーマネージド KMSキー」 、「名前空間」は空欄でOK

4-6. 設定値を確認し、「ナレッジベースを作成」をクリックする
※作成までに少し時間がかかります。(5~10分ほど)

4-7.「データソース(S3バケット)」を選択し、「同期」のボタンをクリックする
※ここも少し時間がかかります。(1分ほど)

4-8. 「モデルを選択」をクリックする

4-9. 以下の通り入力し、「適用」をクリック
- カテゴリ:Anthropic
- モデル:ご利用用途に合ったモデルを選択
※今回はClaude 3 Sonnetを選択しております 。 - スループット:オンデマンド

4-10. フォームで質問内容を入力し、「実行」をクリックし、求めていた答えが返ってくるかテストを実施する
※ここで求めていた回答が来ない場合、S3に置いたデータに求める回答のデータが保存されていないことになります。S3のデータを追加するか、見直しをお願いします。

テストで求めている答えが返ってこれば、完了となります。
まとめ
いかがでしょうか? 今回はAmazon Bedrock でできるRAG機能であるKnowledgeBaseをPineconeで構築する手順をご紹介させていただきました。
皆様のお役に立てましたら、幸いです。
また、Bedrock には他にもAgentといったRAG機能もございます。今回の「KnowledgeBase + Pinecone」と組み合わせることができますので、試しに使ってみたい方は以前に書いた以下記事をご参考にいただければと思います。
次回は、Amazon Bedrock のAPIを利用したアプリ開発の記事を書こうと思いますので、乞うご期待!!