Bedrockの新評価機能 RAG評価(プレビュー) でRAGを評価してみた

ジャーニーマン( @beajourneyman )です。長いの"ジャニ"と呼ばれています。

この記事は [セゾンテクノロジー Advent Calendar 2024](https://qiita.com/advent-calendar/2024/saison-tech) シーズン1、9日目の記事です。

今回は [AWS re:Invent 2024](https://reinvent.awsevents.com/)で発表された新機能を試します。Amazon Bedrock Knowledge Bases の評価機能がプレビューでリリースされ、AWSの統合された環境でRAGモデルの評価が可能になりました。

AWS News Blog

https://aws.amazon.com/jp/blogs/aws/new-rag-evaluation-and-llm-as-a-judge-capabilities-in-amazon-bedrock/

AWS Whats New

https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-bedrock-knowledge-bases-rag-evaluation-preview/

さっそく、先日作成したRAGを評価します。尚、ブラウザの機械翻訳を適用して日本語表示にして画面キャプチャを取得しております。

https://qiita.com/beajourneyman/items/65161b0b434d88dff21f

# ナレッジベース評価基盤構築と評価結果確認の流れ

- S3バケットを用意する
- 評価用JSONLデータセットを用意してS3にアップロードする
- 評価基盤を構築する
- 評価結果を確認する

具体的には、[冒頭の公式ブログ](https://aws.amazon.com/jp/blogs/aws/new-rag-evaluation-and-llm-as-a-judge-capabilities-in-amazon-bedrock/)を参考に RAG評価(プレビュー) を試してみた内容になります。

# S3バケットを用意する

評価用の JSONL データセット、評価結果格納用にS3バケットを用意します。タグはお使いのアカウントのルールに則って必要に応じて設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/3d2ecf78-06d7-e504-767a-b0a5b108701c.png)


# 評価用JSONLデータセットを用意してS3にアップロードする

Bedrock にサポートしてもらいながら、評価用の JSONL を準備します。冒頭セクションのAWSブログ内に詳細なフォーマットのサンプルがあります(以下画像箇所)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/374cfad8-79b6-858e-ad89-28803d219cb5.png)

RAGで Amazon Connect に関する記事を中心に書いている Qiita ブログを学習させてあるので、評価用の JSONL の内容は、Amazon Connect に関する知識のお手本データセットにしています。実際に投入した JSONL です(10行)。

```jsonl
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"Amazon Connect is a cloud-based contact center solution that allows businesses to create and manage customer interactions."}]}],"prompt":{"content":[{"text":"What is Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"The main components of Amazon Connect include contact flows, agent workspace, flow designer, and real-time metrics."}]}],"prompt":{"content":[{"text":"What are the main components of Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"A contact flow is a visual representation of the customer interaction process, defining the steps and actions taken during a customer call or chat."}]}],"prompt":{"content":[{"text":"What is a contact flow in Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"The agent workspace is the interface that agents use to interact with customers, manage calls, and access customer information."}]}],"prompt":{"content":[{"text":"What is the agent workspace in Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"The flow designer is a tool used to create and modify contact flows, allowing administrators to define the customer interaction process."}]}],"prompt":{"content":[{"text":"What is the flow designer in Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"Real-time metrics provide insights into call and chat performance, enabling administrators to monitor and optimize contact center operations."}]}],"prompt":{"content":[{"text":"What are real-time metrics in Amazon Connect?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"Amazon Connect can integrate with various AWS services such as S3, DynamoDB, Lambda, and more, to enhance its functionality and data storage capabilities."}]}],"prompt":{"content":[{"text":"How can Amazon Connect integrate with other AWS services?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"Integrating Amazon Connect with a CRM system allows for seamless customer data management, providing agents with a complete view of customer interactions and history."}]}],"prompt":{"content":[{"text":"What is the purpose of using Amazon Connect with a CRM system?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"Amazon Connect enables businesses to provide consistent and efficient customer support across multiple channels, such as voice, chat, and email."}]}],"prompt":{"content":[{"text":"What is the benefit of using Amazon Connect for omnichannel customer support?"}]}}]}
{"conversationTurns":[{"referenceResponses":[{"content":[{"text":"By offering features such as IVR, call routing, and real-time analytics, Amazon Connect helps businesses deliver faster and more personalized customer support, enhancing overall customer experience."}]}],"prompt":{"content":[{"text":"How can Amazon Connect improve customer experience?"}]}}]}
``` 

S3バケットに評価データセットをアップロードしておきます。フォーマットにエラーがある場合は、次セクションの「評価基盤を構築する」際にエラーではじかれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/a4374f08-81cd-7b32-c243-7ad61f2a397c.png)

結果を格納するフォルダを準備します(S3バケットそのものは、評価結果書き出し先のオブジェクトとして指定できないため)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/24d9e37d-b929-e15e-54ca-9fc9adcdc967.png)

S3バケットの「アクセス許可」を開き、以下のドキュメント巻末に記載されている最低限のCORS設定を入れておきます。右の「編集」ボタンを押して、入力エリアにドキュメントの設定をコピペします。右下の「変更の保存」をします。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-evaluation-security-iam.html#model-evaluation-security-cors

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/41b79bcb-bea4-e592-2a95-c8df481d7084.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/f780b30c-0617-f2ad-56d1-55a2469d3a47.png)


# 評価基盤を構築する

左ペインの「推論と評価」「評価」をクリックします。表示されたら「ナレッジベース」タブに切り替えます。真ん中の仕組み・自動のパートの白い「創造する」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/f30a31eb-5cdd-0b8e-2535-73db86ec9c05.png)

任意の「評価名」を入れて、モデルに「Claude 3 haiku」を選択します。タグはお使いのアカウントのルールに則って必要に応じて設定してください。ブラウザの日本語翻訳で"haiku"が"俳句"になるのが味わい深いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/d8480c8d-6083-0491-09bf-0bc43db612b0.png)

作成済みの「ナレッジベース」をプルダウンから選択します。ナレッジベースの評価タイプは「検索と応答の生成」を選択し、モデルに「Claude 3 haiku」を選択します。メトリクスを全てチェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/58bd9eb8-23eb-ac2e-93c3-2bcbaf6043a2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/354c6ca0-3c38-eea1-42d5-7bd7c7ed4043.png)


「S3を参照」をクリックして先ほど準備したS3バケットのデータセットとフォルダを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/30629c58-6048-bd88-e37d-1caeafd3aa3a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/49be56b8-9e21-2151-7010-f0cb0d31c181.png)

KMSはデフォルト、サービスのアクセスは新しいサービスロールを作成して使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/ca4aecda-9481-5ade-8ef6-0f0e0602d509.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/6515c42d-3d62-211e-4717-0708e84a067d.png)

作成されると既存のサービスロールが選択され、サービスロール名が自動設定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/a26584e3-f4ea-f686-cfc0-cce742e4c9b0.png)

準備ができたので「作成」ボタンを押します。こちらにはしばらく時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/80b63a16-0a19-b08c-fa19-bb9a7f10607e.png)

30分近くかかったでしょうか？ 数十本のブログ記事をベースにしたRAGに対して10行の評価用データセットでしたが、それなりに時間がかかりました。本番運用では、バッチ実行が向いている気がしました。完了したので、評価結果を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/207e340c-b87b-44df-d664-59ea50354920.png)


# 評価結果を確認する

こうやって確認できると非常にインパクトがあります。まずは「メトリックの概要」です。概ねひどい評価ではなさそうなので、ホッとしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/25b0a958-e667-920a-3c76-970228c6c9e0.png)

続いて「生成メトリックの内訳」です。左の「メトリック」から各指標のグラフにジャンプできます。5つの「品質指標」、3つの「責任あるAIメトリクス」一気にご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/a633fe45-3a47-b8d9-4c23-5d9308946244.png)

## 5つの品質指標

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/47f9b58a-4ca0-c249-673f-58fe21fba3c8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/83afc580-9680-dccf-ce3f-65bde4a556ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/915b864d-2128-6b5a-65ed-fc6aba145d3a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/78a9ce0a-c7c1-efab-79a9-0a9a7b545670.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/2a5f388c-63bd-951b-3a46-f43a991bd8df.png)

## 3つの責任あるAIメトリクス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/7201d317-fd33-95b6-806a-b3e0a7b006d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/6c34d02e-bae0-b854-0d4c-651b9c700d4b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/aa619208-41a3-b570-b773-478c2fdc9ee6.png)


## 会話の例
会話の例を開くと、評価データセットのお手本との評価結果が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/e2406a70-7651-dbfb-3676-84fda5d2ccab.png)

右上の青い最大化ボタンを押すと、拡大して確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/8ee16a49-466e-4e20-1a8a-4166a0b88166.png)

# まとめ
マネージドコンソールだけで一貫して評価まで行えるのは非常に効率的だと感じました。現在はプレビューですが、一般提供開始されると利用が拡大しそうです。

実際に作ってみて感じましたが、評価用JSONLデータセットを作るのはなかなか骨が折れました。Bedrockに伴走してもらいながら準備していましたが、最初は異なるフォーマットを準備しており、エラーの解消に時間がかかりました。与える情報の精査や書き方など、プロンプトエンジニアリングはなかなか難しいです。

以上です。