作業内容
・AWS マネジメントコンソール上で Knowledge Base を作成
・Vector Database である Pinecone の準備
・自分の好きなファイルを S3 にアップロードし、コンソール上でテスト
初心者向けとして細かめにまとめたつもりです🔰
※ アップデートの多いサービスですので、手順に若干の違いがありましたらすみません
そもそも Knowledge Base for Amazon Bedrock とは?
Knowledge Base を使用すると、Amazon Bedrock 内から FM をデータソースに接続して検索拡張生成(RAG)を簡単に構築することができます。
※ RAG とは LLM が外部の DB から情報を取得し回答する仕組みで、これにより企業独自の情報に基づいた回答ができたり、ハルシネーション(生成AIが事実とは異なる内容の生成してしまう現象)を防いだりすることができます。
AWS 公式ブログ
https://aws.amazon.com/jp/what-is/retrieval-augmented-generation/
Bedrock で RAG を構築する方法として Amazon Kendra を使う方法もありますが、
Knowledge Base で実装すると
☑️ コード不要(AWS マネージド)で簡単に実現できるので、開発期間の短縮が可能
☑️ モデルを継続的にトレーニングする必要がないので、費用対効果が良い
といったメリットがあるので、Knowledge Base を活用することにしました。
RAG のフロー処理を一から開発しないでできる(設定はあってもコンソールポチポチ程度)ので、開発の負担がかなり軽減されますね🥳
さらに今回は、Vector Store として Pinecone というものを使います。
無料(クレカ登録も無し)で利用できるので、こちらと組み合わせることで気軽に始めることができます
前提
・AWS アカウントを持っていて、IAM ユーザーでサインインできる状態
・Amazon Bedrock にて以下のモデルが有効になっている状態
※ 有効化できていない場合はこちらの手順に従って有効化してください
・Claude
・Titan Embeddings G1 - Text
手順
Pinecone の準備
以下のサイトからアカウントを作成し、ログインした状態にします。
クレカ登録なしの無料(Starter)プランで利用します。
1つのプロジェクトしか作成できない等の制約はありますが、今回は無料プランで充分です👍🏻
・index名は適当に Chatbot/bedrock-test
とします
・Dimensions は 1536
を指定(後ほど Bedrock で使用することになる Amazon Titan Embeddings G1 - Text v1.2
の Dimensions が 1536
であるため)
・Metric は cosine
を選択
・「Starter」プランが選択されていることを確認
その他はデフォルトのまま Index を作成します。
以下の2つは、Bedrock 側で使用するので確認しておきます。
・Index の「HOST」(https://bedrock-test〜)
・API KEYS の「Value」
API KEY を AWS Secrets Manager に保存
AWS マネジメントコンソールにサインインします。
※ 必ず「バージニア北部」リージョンになっていることを確認
AWS Secrets Manager に移動し、「新しいシークレットを保存する」から
・「その他のシークレットのタイプ」を選択
・キーは apiKey
、値は先ほどの pinocone の API KEYS の「Value」
・シークレットの名前は好きなものにします。
↑ キーは apiKey
です。apikey
など大文字小文字を間違えるとうまくいかないです。
S3 バケットを作成
※ バージニア北部リージョンにて作業
S3 に移動し、デフォルトの設定で Bedrock 用の S3 バケットを作成します(手順略)。
Knowledge base の作成
※ バージニア北部リージョンにて作業
Amazon Bedrock に移動し、コンソールからナレッジベースを作成していきます。
ステップ 1 : ナレッジベースの詳細を入力
・ナレッジベース名:好きな名前を入力
・IAM ロール:新規作成
ステップ 2 : データソースを設定
・データソース名:デフォルト
・S3 URI:先ほど作成したバケットを指定
ステップ 3 : 埋め込みモデルを選択し、ベクトルストアを設定する
・Embeddings Model: Amazon Titan Embeddings G1 - Text v1.2
を選択
・ベクトルデータベース: Pinecone
を選択
・エンドポイント URL:pinecone の Index > HOST > URL
を入力
・認証情報シークレット ARN:先ほど作成した AWS Secrets Manager のシークレットの ARN を入力(arn:aws:secretsmanager:us-east-1:XXXX〜)
・テキストフィールド: text
・Bedrock マネージドメタデータフィールド:metadata
を入力
「次へ」をクリック
ステップ 4 : 確認して作成
これでナレッジベースが作成されます。
好きなファイルを S3 にアップロード&ナレッジベースと同期
ナレッジベースで指定した S3 バケットに Vector 化したいデータをアップロードします。好きなデータでいいですが、今回は BlackBelt の S3 の資料を使ってみます。
※ ナレッジベースのデータソースとしてサポートされているファイル形式には制限があるので、こちらを参考にしてください。
S3 にデータをアップロードしたら、ナレッジベース内のデータソースの「同期」ボタンをクリックします。
アップロードしたデータ量によっては時間がかかるかもしれません。
ステータスが Ready
になったら準備完了です。
Pinecone を確認
Pinecone に反映されているか確認します。
先ほどアップロードしたデータが Vector されていることが確認できました!
ナレッジベースをテスト
作成したナレッジベースをコンソール上でテストしてみます。
モデルは Anthropic の Claude v2 を選択し、適用します。
正確な回答が返ってきました!🎉
今回は少しのデータしか同期していませんが、もっと増やせば会話内容がより豊富になりでそうですね。
まとめ
生成AI の開発というとお金と時間がかかるイメージでしたが、コンソール上でこんなに簡単に RAG が構築できるなんて驚きました!
Bedeock の中でも最近特にアップデートの多いナレッジベース、これからも注目です👀
既に新機能が出ているので、どんどん試していきたいと思います!
続編として、今回作成したナレッジベースと LINE Messaging API を連携させて、LINE 上でこのチャットができるようにしていきます(準備中🌱)
最後までお読みいただきありがとうございました!
※必要に応じて、リソースの削除も忘れずに!※