Amazon Bedrock ナレッジベースを作成し RAG と通常のチャットとの比較を試してみた

生成 AI が返してくれる情報は、常に最新とは限らない。間違っていたりもする。しかし [RAG](https://aws.amazon.com/jp/what-is/retrieval-augmented-generation/) という手法を使用すれば、最新かつ信頼できる情報を生成 AI に与えることで、より正確な応答を得られるようになる。企業に蓄積されたプライベートデータを与えれば、そのデータに関連する回答を得ることも可能だ。

\
Amazon Bedrock ナレッジベースは、生成 AI と企業のプライベートデータを統合した RAG アプリケーションの構築を容易にしてくれる機能だ。

https://aws.amazon.com/jp/bedrock/knowledge-bases/

\
今回は
* ナレッベースを作成
* PDF をアップロードして同期
* ナレッジベースを Chat/Text playground と比較してテスト

という流れで Amazon Bedrock ナレッジベースを試してみた。

# 事前準備
ナレッジベース作成の前にやっておくことがある。基盤モデルのリクエストと S3 バケットの作成だ。

## 基盤モデルのリクエスト

今回は次の２つのモデルを使用する。

* **[Amazon Titan Text Embeddings V2](https://aws.amazon.com/jp/bedrock/titan/#:~:text=%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92%E8%AA%AD%E3%82%80-,Amazon%20Titan%20Text%20Embeddings%20V2,-%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF)**

埋め込みモデル。今回作成するナレッジベースでは、裏側で[埋め込み](https://aws.amazon.com/jp/what-is/embeddings-in-machine-learning/)というものが作成され、ベクトルストアに保存される。

* **[Anthropic Claude 3.5 Haiku](https://www.anthropic.com/claude/haiku)**

Anthropic の最速でコーディングもできるらしいモデル。ナレッジベースのテスト時に使用する。

\
リクエストの手順は以下の通りだ。
1. Amazon Bedrock コンソールにアクセスし、**モデルアクセス** を開く
2. **モデルアクセスを変更** をクリックする
3. **Titan Text Embeddings V2** と **Claude 3.5 Haiku** にチェックを入れ、**次へ** をクリックする
4. **送信** をクリックする

上記２つのモデルが、**アクセスが付与されました** というステータスになれば完了だ。

![20241214_0_モデルアクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/4d19012a-996f-63a4-1967-71e4c27b8eb2.png)

:::note warn
今回作業したリージョンはバージニア北部だ。
記事を執筆した 2024/12/14 時点では、 Claude 3.5 Haiku をリクエストできるリージョンは以下の３つだ。
* バージニア北部 (us-east-1)
* オハイオ (us-east-2)
* オレゴン (us-west-2) 
:::

## S3 バケットの作成
ナレッジベースを作成する際、データの取得元を指定する必要がある。今回はデータソース用の S3 バケットを事前に用意しておく。

手順は以下の通りだ。
1. Amazon S3 コンソールを開く
2. **バケットを作成** をクリックする
3. **バケット名** に「my-first-knowledge-base-data-source-bucket」と入力する
![20241214_2_S3バケットを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/bc0c7861-7363-a637-b892-e1dc7d65c334.png)
4. 画面最下部の **バケットを作成** をクリックする

\
事前準備が終わったら、ナレッジベースを作成していく。

# ナレッジベースを作成する
Amazon Bedrock コンソールにアクセスし、**ナレッジベース** を開く。
**ナレッジベースを作成**、**Knowledge Base with vector store** の順にクリックする。

![20241214_1_ナレッジベースを作成をクリック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/0ee79cbb-0b2f-893c-cd10-877558b37e5c.png)

## 1. ナレッジベースの詳細を入力

**ナレッジベース名** に「my-first-knowledge-base」と入力する。
他の項目はデフォルトのまま、画面最下部の **次へ** をクリックする。

![20241214_3_ナレッジベースの詳細を入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/4d248e32-365c-8a5b-a393-1e6e52691a78.png)

## 2. データソースを設定

**データソース名** に「my-first-knowledge-base-data-source」と入力する。

![20241214_4_データソースを設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/9fb2e7cc-0d07-e630-4a35-310ed3b9bdaa.png)

**S3 を参照** をクリックする。
事前準備で作成した「my-first-knowledge-base-data-source-bucket」を選択し、**選択** をクリックする。

![20241214_5_S3を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/ba7b5011-5e47-6406-9a6c-4e5384951bf4.png)

他の項目はデフォルトのままで、**次へ** をクリックする。

## 3. 埋め込みモデルを選択し、ベクトルストアを設定する

**Titan Text Embeddings v2** を選択する。
他の項目はデフォルトのまま、画面最下部の **次へ** をクリックする。

![20241214_6_ベクトルストアを設定する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/5c607c69-7b81-4164-e978-fc08f7d01123.png)

## 4. 確認して作成
最後に確認画面が表示される。画面最下部の **ナレッジベースを作成** をクリックする。

\
これでナレッジベースの作成は完了だ。

![20241214_7_ナレッジベースの概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/d98f4d89-e8ae-2c92-4426-4625103fb3fd.png)

データソース名をクリックすると、**データソースの概要** が表示される。

![20241214_8_データソースの概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/3e9f8c71-1d31-7530-b899-de0b09b1e7a2.png)

まだ一度も同期していないため、**同期履歴**、**Documents** には何も表示されていない。

\
この後データを同期していくが、その前に、今回何のデータを同期するのかを説明しておく。

# お題

今回同期するデータは、[2024年４月からの労働条件明示のルール変更　備えは大丈夫ですか？](https://www.mhlw.go.jp/content/11200000/001298244.pdf) という PDF ファイルにしてみた。
厚生労働省がホームページで公開しているパンフレットだ。

https://www.mhlw.go.jp/stf/newpage_32105.html

上記の PDF をナレッジベースに読み込ませ、通常のチャットと結果を比較しようというわけだ。実際こうしたユースケースはあると思う。

\
今回チャットに投げるのは次のような指示だ。

> 改正労基則第５条第１項第１号の３に、2024年４月から新しく追加された明示事項を説明して

回答のポイントとしては、次の内容を想定している。
* すべての労働者を対象に
* 「就業場所と業務の変更の範囲」について
* 労働契約の締結時と、有期労働契約の更新時に、書面による明示が必要

気になる方は、上記の PDF の３ページ目を見ながら、この後の結果を確認いただきたい。

# データを同期する

データをクエリできるようにするため、データを同期する。

## S3 バケットへのアップロード
上記の PDF ファイルをダウンロードして、事前準備で作成したS3 バケット「my-first-knowledge-base-data-source-bucket」にアップロードする。

![20241214_9_S3バケットにアップロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/d0c511d8-d531-cada-202a-6174627fb87e.png)

## データソースの同期

**データソースの概要** 画面で、**同期** をクリックすると同期が開始される。しばらく待つと、**同期履歴** に履歴が追加され、**Documents** に S3 バケットが表示される。

![20241214_10_データソースの同期.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/50f28829-a581-dc78-57c9-b2c4f093905f.png)


\
これで、ナレッジベースをテストする準備が整った。

# ナレッジベースのテスト

Amazon Bedrock コンソールにはプレイグラウンドが用意されており、基盤モデルを気軽に試すことができる。今回、RAG を用いない通常のチャットにはこちらを使用する。

ナレッジベースのテストは、**ナレッジベースの概要** ページで実施できる。

では、まずは通常のチャットから。

## 通常のチャット

Amazon Bedrock コンソールの左サイドバーの **Chat/Text** をクリックして、プレイグラウンドを開く。

![20241214_11_Chat-Text_playground.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/858e5bd3-e0ac-8bd0-931c-10c893a3b4cc.png)

**モデルを選択** をクリックしてダイアログを開く。

* **Anthropic**
* **Claude 3.5 Haiku**
* **US Anthropic Claude 3.5 Haiku** 

を選択し、**適用** をクリックする。

![20241214_12_Chat-Text_playground_モデル選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/304538cf-9055-010c-63b2-d3e6213ef671.png)

プロンプトを入力できるようになる。テキストボックスに指示を入力して、**実行** をクリックする。

![20241214_13_Chat-Text_playground_指示画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/a3a47e29-d7e7-609c-a9f1-1fbba05c4d5b.png)

得られた回答がこちら。

![スクリーンショット 2024-12-14 235957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/f1223343-9ec2-fe61-d7cc-895747eb1452.png)

> 2024年4月から改正労基則第5条第1項第1号の3に新たに追加された明示事項は、以下の通りです：
> ◆「キャリアパス」の明示義務
> 1. 対象となる事項
> * 労働者のキャリア形成に関する事項
> * 企業内外のキャリア形成についての支援制度
> 2. 具体的な明示内容
> - 教育訓練の機会
> - 自己啓発支援制度
> - キャリアコンサルティングの機会
> - 社内外でのキャリア形成の方向性
> 3. 目的
> - 労働者のキャリア形成への支援
> - 企業の人材育成に対する取り組みの明確化
> - 労働者の将来設計の支援
> 4. 明示方法
> - 採用時の労働条件明示書
> - 就業規則
> - 社内文書
> この改正は、労働者のキャリア形成支援と透明性の向上を目指しています。

この回答は間違っている。

## ナレッジベースを使用したチャット

ナレッジベースの回答はどうか。

**ナレッジベースの概要** 画面右上のボタンをクリックして、ナレッジベースをテストペインを開く。

![20241214_15_ナレッジベースをテスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/0edb3714-3798-ce88-13b1-d7ef2d9253fa.png)

プレイグラウンドの場合と同様に、**モデルを選択** をクリックしてダイアログを開く。

* **Anthropic**
* **Claude 3.5 Haiku**
* **US Anthropic Claude 3.5 Haiku** 

を選択し、**適用** をクリックする。

![20241214_16_ナレッジベースをテスト_モデル選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/a495b507-ac30-80b4-5080-84c1d08f5aac.png)

テキストボックスに指示を入力して、**実行** をクリックする。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/7966ee83-cc51-5a93-3e03-a5c5a27cd79b.png" width="240">

得られた回答がこちら。

![20241214_18_ナレッジベースをテスト_回答.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/3d9cc501-a924-d902-b078-93845d175120.png)

> 2024年4月から、労働基準法施行規則に新たに追加される明示事項は主に2つあります。 1. 就業場所の変更の範囲：労働者が通常就業することが想定されている就業場所について、その変更の可能性や範囲を明示する必要があります。 2. 業務の変更の範囲：労働者が通常従事することが想定されている業務について、その変更の可能性や範囲を明示する必要があります。 これらの[1][2][3] 明示事項 は、す べての労働 者に対 して、 労働契 約の締結 時 および 有 期労働契 約の更新 時に書 面で明示 すること が求められます 。な お、労 働者の希 望によりメ ール等での 明示も 可能です。 これらの明示事項は、すべての労働者に対して、労働契約の締結時および有期労働契約の更新時に書面で明示することが求められます。なお、労働者の希望によりメール等での明示も可能です。[4][5]

指示に対して、かなり関連性の高い回答が得られた！

基盤モデルによって言い回しが変わっているため、特に法令を扱う場合は、細かなニュアンスの違いに気をつけなければいけない場合があるかもしれない。後半の文章は同じことを２回言っているし、所々に入っているスペースも気になる。

しかし、RAG のインパクトを知るには十分な結果だ。

\
ソースの詳細を表示すると、回答の元となったデータを確認できる。なぜこのような回答が得られたのかを知る手掛かりとなる。今回の回答には５つのチャンクが使用されたようだ。

![20241214_19_ナレッジベースをテスト_ソースの詳細.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/3161e9fe-bbf1-8ff5-b68c-e7970a046656.png)

## その他
* 200字以内での回答を依頼したら、微妙な回答が得られた（有期契約労働者だけでなく、すべての労働者のはずだ）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/483f3f53-1d74-cd01-0201-478f59698eb0.png" width="360">

* **ナレッジベースをテスト** でエラーが発生する場合があった。**オンデマンド** ではなく **クロスリージョン推論** が指定されているはずなのだが...。ここで試してみる場合は注意してほしい（私はブラウザのリロードを何回か試した）。
![20241214_21_ナレッジベースをテスト_エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816889/7eb8f05a-f7e2-546f-33eb-85e051008d68.png)

\
\
試した内容は以上だ。

# 感想
Amazon Bedrock ナレッジベースの使い方の確認とテストを行ってみた。

ナレッジベースを使えば簡単に RAG を構築できることが分かった。RAG の強力さを垣間見ることができた。

今後は精度向上の手法なども試してみたい。