【AWS】Amazon BedrockのKnowledge baseを用いてRAGを行ってみる【生成AI】

# RAGとは
Retrieval Augmented Generation 検索拡張生成
大規模言語モデルにおいて、本来持たない外部情報を参照するようにして、大規模言語モデルの回答精度を高める仕組み

# RAGを用いると
検索ベースの情報を取り入れることでより正確な回答を望むことができる
大規模言語モデルが持たない社内情報などを回答に含めることができる

# Amazon Bedrockとは
AWSが提供する完全マネージド型生成AIサービスです
>Amazon Bedrock は、Amazon やサードパーティのモデルプロバイダーの基本モデルに API を通じてアクセスできるようにする完全マネージド型サービスです。
[アマゾン・ベッドロックとは？](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/what-is-bedrock.html)



# Knowledge baseとは
>Knowledge baseを使用すると、Amazon Bedrock の基盤モデル (FM) を Retrieval Augmented Generation (RAG) の会社データに安全に接続できます。
[Knowledge Bases now delivers fully managed RAG experience in Amazon Bedrock](https://aws.amazon.com/jp/blogs/aws/knowledge-bases-now-delivers-fully-managed-rag-experience-in-amazon-bedrock/)

# Knowledge baseを用いてRAGを行ってみる
以下の記事を参考に、Knowledge baseを使ってみました
[[アップデート] Amazon Bedrockで簡単にRAGが実現できる、Retrieval Augmented Generation (RAG) with Knowledge BaseがとうとうGAになりました！！](https://cc.bingj.com/cache.aspx?q=bedrock+rag&d=1772747706057&mkt=ja-JP&setlang=ja-JP&w=HkRLcJQ7Ltf-emL9eE7rhqV7m6h5MM-c)


# S3にデータソースを準備する
画像のようにファイルを配置しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/83824878-3cd1-5920-ab49-645f8a0aa4e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/0f2c3a74-c5e8-f8ff-68d4-bd7e9cb644e2.png)

# Knowledge baseを作成する
コンソールから[Create knowledge base]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/93544bc9-9a73-b93b-aea2-5e383771b2de.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/b8b7fb0d-0425-d5a2-f285-47230eb0ea47.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/dc8001bf-b8f1-2eec-55e3-7d043662612e.png)

名前：デフォルト
IAMロール：新規作成
とします
必要な権限を有したポリシーを作成してくれます

[Next]をクリックし、次の画面でデータソースを設定します
作成したS3を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/cd0fc20b-77a2-d568-da48-ac15b9243faa.png)


[Next]をクリックし、Vector storeを設定します
(現在利用可能なのはTitan Embeddings G1-Text v1.2のみでした)
[Quick create a new vector store(新規作成)]を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/60e0cc84-ee85-19ad-f7e8-65fa7d6fb24d.png)


新規作成をすると、Amazon OpenSearch Serviceにおいて、[コレクション]、[データアクセスポリシー]、[暗号化ポリシー]、[ネットワークポリシー]
が作成されました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/a551743c-54a8-4550-e0c5-323eefd347fd.png)

確認画面に遷移した後、[Create knowledge base]をクリックします

※作成が開始するとコンソール上部に青く案内が出ます。ダッシュボードに戻ってしまうと案内は消え、作成状況が全く分からない状態になる仕様なので気を付ける必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/e441c794-2b8c-fa2b-14ac-50d24433ef35.png)


少し待つとknowledge baseが作成され、statusがreadyになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/91586ef4-9b87-d5f0-33e7-8acf5eaf4eb4.png)

knowledge baseは作成しましたが、これだけでは使用できないようです
データソースとのSyncを行う必要があるので、[Datasource]から[Sync]を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/fbebb9d0-0750-891e-1052-ce887fe1b979.png)

エラーが出ました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/f0d44794-bddc-071a-b798-123f96bfb68c.png)

現在の状況だと言語モデルが使用できない状態であるため、Amazon bedrockのコンソールから
[Model access]をクリックし、右上の[Manage model access]をクリック、
使用する[Titan Embeddings G1]を選択し、[Save changes]をクリックしてアクセスステータスを有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/98d9dfb0-d32f-c741-8e1d-762aa4fcc051.png)


再度Syncを行います

上手くいきました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/51f62cef-e843-b70a-ce0f-b6d1ada00df4.png)

テストを行ってみます
テストにもテキスト生成するための言語モデルを使用するため、[Model access]から、日本語を扱うことができる
AnthropicのClaudeを有効にします

ページ右上の[Test]をクリックし、テストを行います
モデルは有効にしたClaudeを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/008dfb5e-866f-faa1-8955-6b9f9f4435a0.png)

チャット内容を入力し、[Run]をクリックします

データソースを元にした回答が返ってきました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/1bcdc10e-03c3-5c04-153c-4ace22e595b4.png)

ソースに含まれない情報はハルシネーションを防ぐために答えないようにされています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/9b32f702-84d3-6b47-5315-54822bcc5904.png)

# 終了時の注意点
knowledge baseを削除してもOpenSerch Serverlessで作成されたものは削除されないようなので、手動で削除するようにしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574230/cfc4fd3b-a8f0-5f4c-cdd9-90bd16a58fc0.png)

# 終わりに
なにかミスなどあればコメントまでお願いします