Amazon Bedrock ナレッジベースの使い方（コンソール編）

# ナレッジベースとは
Amazon Bedrock のナレッジベースについてはこちらにまとめているので、良かったら見てください。

https://qiita.com/devKita/items/fecf03eb9f812ff77ffa

# 今回やること
コンソールからナレッジベースを作成してテスト実行してみます。
※次の記事でAPIを利用してテストしてみようと思います

# ナレッジベースをコンソールから使ってみる
さっそくコンソールからナレッジベースを作成してみます。

### 事前準備（RAG用のデータソース準備）
以下の図は、ベクトルデータベース用のデータの前処理を表しています。
赤枠の部分にあたる、RAG用のデータソースをS3に配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/446c714e-65d3-4fd7-4ad3-af06b93ae1b0.png)

今回は Bedrcok のAPIリファレンス（PDF）を配置して検証してみます。
・[Bedrcok APIリファレンス](https://docs.aws.amazon.com/pdfs/bedrock/latest/APIReference/bedrock-api.pdf)

<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/1f39717c-6110-9b83-f32d-85f29ed3ee68.png">

### ステップ０．Bedrock のナレッジベースを作成
2024/03/22時点で [利用可能なリージョン](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-supported.html) は以下の2つです。今回はUS Eastを利用します。
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/2acac863-3d7f-36d0-3a4c-25cfd386a80a.png">

Bedrockの左ペイン[ナレッジベース]を選択した後、画面中央の右側にある「ナレッジベース作成」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/f1022549-ad84-6049-8309-d8737539c563.png)

### ステップ１．ナレッジベース詳細入力
名称やIAM許可等、適切に指定してあげてください。
今回はデフォルトのままで「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/375f60fa-d3da-af64-aab3-b446f009d708.png)


### ステップ２．データソースを設定
名称は適切に指定してあげてください。
S3 URIに事前準備で用意したS3バケットを指定します。
「▼詳細設定-オプション」を開くと、KMSキーとチャンキング戦略のオプションを指定できます。
今回はデフォルトのままで「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/5ad04b00-9a75-44ff-b938-dfab19760246.png)

※参考（チャンキング戦略で指定可能なオプション）
以下図の赤枠の部分にあたります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/820bc6f5-2a59-ec25-1df6-0120350eba44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/4d95196d-4f61-807d-fc6c-97ea48d107db.png)

### ステップ３．埋め込みモデルを選択し、ベクトルストアを設定する
以下図の赤枠部分にあたります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/9bde262c-e0b7-548d-7d27-a32ca33e8fb5.png)

埋め込みモデルは以下３つから選択できます。
・Amazon Titan Embeddings G1 - Text v1.2
・Cohere Embed English v3 （英語テキストのみを対象）
・Cohere Embed Multilingual v3（多言語対応）

ベクトルデータベースは新規作成or作成済のものを選択することができます。
今回はデフォルトのままで「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/2d36e62d-5d6a-b090-fa01-56ad0c2b9a2c.png)

※補足
「新しいベクトルストアをクイック作成 - 推奨」を選択した場合は、Amazon OpenSearch Serverless 用ベクトルエンジンが使用されます。AuroraやPinecone、Redis Enterprise Cloudを利用する場合は事前にベクトルデータベースを作成しておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/bf67b859-9ed9-b1b2-2a2e-1f87d06fc690.png)

### ステップ４．確認
確認して「ナレッジベースを作成」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/e3ab4634-fe1f-1c66-55bc-1d284d8b65d8.png)


１分程度で作成が完了します。
完了したら、「データソースを同期」をクリックします。
今回は同期に５分程度かかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/261a500f-ef24-e7c4-341a-5ac1d6739262.png)


# ナレッジベースをテストしてみる
画面右側でテストができます。
が、小さくて使いづらいので赤枠で囲んだ部分をクリックすると大きくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/75dc8084-1603-dcc5-f2c6-62cfeb885c84.png)

テストをする時に検索タイプと基盤モデルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/5951ff0b-7d5d-437f-8a5e-b1582093166f.png)

検索タイプ
・デフォルト ： Amazon Bedrock が検索戦略を決定
・ハイブリット ： ベクトル埋め込みの検索 (セマンティック検索) と raw テキストの検索を組み合わせることが可能(Amazon OpenSearch Serverless ベクトルストアでのみサポート)
・セマンティック ： ベクトル埋め込みのみを検索

コンソール上で利用可能な基盤モデルは以下の通りです。
※利用可能なモデルが少ないので、今後のアップデートに期待ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/d3a451a6-5da7-d437-7bff-4d788b7c6c9b.png)

あれ？！最初に基盤モデルって選択した気がしたけど・・・
と思った方もいるのではないでしょうか？（私がそうですｗ）
最初に指定したのは、ベクトルデータベースとのやり取りを担うものです。
今回指定する基盤モデルは以下図の赤枠の部分で、ユーザクエリ＋ナレッジベース取得結果に基づいて応答を生成するためのものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/9e1b01a2-b4da-d23b-9007-107365e67cdf.png)


Claude Instantを利用してやってみました。
BedrockのAPIリファレンスを参照して正しい回答を出してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/571fa99e-108f-7938-241e-49349d1e50b7.png)

「結果の詳細を表示」をクリックすると、関連するデータソースのチャンクを表示してくれます。（最大5件表示されるようです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/39f05969-a223-41e1-fd0f-692a3547992c.png)

# 注意点
ナレッジベースを削除しても、ベクトルデータベースは自動的に削除されません。
検証目的で作られた方は、忘れずにベクトルデータベースを手動で削除するようにしましょう。（結構料金掛かります）

# 最後に
さすがAWSといった感じで、簡単にRAGアプリが作れそうですね。
早く東京リージョンに来てほしいと願うばかりです。
次回はAPIからテストしてみます。

※間違いなどあれば、ご指摘いただけると助かります。