RAG を試してみようと使った Amazon Bedrock のナレッジベースが凄かった


※ この記事は [ソニックガーデン 若手プログラマ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/sonicgarden-junior) の23日目の記事です。

## RAG を使ってみたい
生成AI元年と呼ばれた2023年。そこから1年が経ち、2024年も年の瀬となりました。すでに少なくない企業が自社サービスに生成AIを活用したり、業務改善に活用しているようです。
かくいう僕も、ハッカソンで導入してみたり。
が、僕はまだ RAG をよく分かっていなかった。実際何がどういいんだろうか？

## RAG とは

- 検索拡張生成 (RAG) は、大規模言語モデル (LLM) の出力を補助する役割
- LLM は、膨大な量のデータに基づいてトレーニングされる
- RAG は応答を生成する前に、トレーニングデータソース以外の信頼できる知識ベースを参照する

https://aws.amazon.com/jp/what-is/retrieval-augmented-generation/

「RAG は、LLM の既に強力な機能を、モデルを再トレーニングすることなく、特定の分野や組織の内部ナレッジベースに拡張する」とあります。
LLM に含めることが難しい最新情報や非公開情報などに関して、より精度の高い回答を期待できるようになるということですね。
ChatGPT などサッと使える AI チャットにおいて、トレーニングデータソース外の質問に関して検索エンジンを使って回答するのも RAG の一例です。

## Amazon Bedrock で使ってみる

Amazon Bedrock は、単一の API を介して大手 AI 企業からの高性能な基盤モデルを選択できるフルマネージドサービス [^1] で、テキスト・画像・音声・動画など様々な生成 AI モデルを利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/859bd222-bc15-aeca-d143-0a664524b1ea.png)

さらに、簡単に RAG を構築するためのナレッジベースの機能も既に用意されています。
ナレッジベースについて詳しくはこちら↓
https://aws.amazon.com/jp/bedrock/knowledge-bases/

ナレッジベースの選択肢としてはこれまで、下記の2択がありました。AI の良さを活かすために構造化されていないベクトルデータベース[^2]を使うことが多かったはずです。

- ベクトルデータベース
- リレーショナルデータベース

そんな中、AI検索に特化した Kendra を使える **Kendra GenAI Index** が先日発表され、ベクトル検索とキーワード検索のハイブリッド検索がサポートされているそう[^3][^4] 。便利そうだ。

せっかくなので使ってみます。


## Bedrock + Kendra GenAI Index

Bedrock にはプレイグラウンドが用意されているので、API をアプリへ組み込む前にモデルの選定や設定の調整をしておくことが可能です。
今回は RAG の凄さを体感できればいいので、シンプルにプレイグラウンドを使っていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/dc8a9f29-f4d0-dd63-684a-e4e47a8715b5.png)

Kendra GenAI Index の設定はこちらの記事を参考にしました。
https://techblog.nhn-techorus.com/archives/38476

データソースには[ソニックガーデンのコーポレートサイト](https://www.sonicgarden.jp/)の html ファイルを S3 に格納して使います。ただ、データソースには Web クロールの選択も可能なので、そっちで良かったかも。
Web クロールは 2024年12月23日時点ではプレイグラウンド限定で、API では利用できません。惜しい。

さて、Bedrock 君はどれくらいソニックガーデンのことを理解しているというのかな？

**🟥 ナレッジベースなし vs 🟢 ナレッジベースあり**
モデルにはどちらも Claude 3.5 Sonnet v1 を使用。

ファイ‼️

## Round 1. ソニックガーデンにいる人を一言で表すとしたら？

#### 🟥 ナレッジベースなし

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/8b5926b2-9cc5-4f75-5a8b-82df054124f3.png)

#### 🟢 ナレッジベースあり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/29b0aeef-dcd6-2e32-745c-c6cfa5ca03a9.png)

🟥 は国語の短い記述みたいなカタイ印象だけど、🟢 はソニックガーデンオタクっぽい（褒め言葉）
たぶん僕はこんなにいい感じに説明できない。

実際にソースチャンクもたくさんある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/993483ba-76b4-d2db-ca5c-29d43fd97fb4.png)

## Round 2. 「ほにゃららな受託開発」ってどこかの企業のビジネスになかったっけ？

#### 🟥 ナレッジベースなし

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/ad2ad218-e9fa-8e4b-fcaf-5369d58716c6.png)

#### 🟢 ナレッジベースあり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/8bc970ac-4930-9b0d-7736-c60b8b684d6e.png)

🟥 は返してくれないですね。🟢 は無論知っている。

## Round 3. ソニックガーデンの社歌を教えて

#### 🟥 ナレッジベースなし

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/f590d8c5-7666-ee48-c0fa-dbb8ba0b87df.png)

#### 🟢 ナレッジベースあり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121913/d8802eae-a1e3-e01b-12db-1a49551e4aa1.png)

オタクすぎる...
何百というブログ記事から探し出してきています。
ちなみに元記事はこちら↓
https://www.sonicgarden.jp/join_us/blog_articles/song

## 終わりに

確かに RAG があると、社内データの検索や、カスタマーサポートなどがグッと捗りそうですね。
Round 1 の「ソニックガーデンにはどんな人がいる？」はいい面しか書いてないじゃないかっ！という気もしますが、特に否定するような点もない(さすがソースチャンク)ので、検索能力と要約能力の高さに驚かされます。これよりも正確な要約を僕にはできません。

10月に AWS のハッカソンに参加しましたが、今ならもう少し上手く活用できたかもな〜と思ったり。


これからも適切に RAG を使ってアプリ開発をしていきたいと思いました。
もちろん、Bedrock、Kendra は従量課金なので、安心して使えます。

明日のアドベントカレンダーは @kohey69 が担当です。お楽しみに！

[^1]: https://aws.amazon.com/jp/bedrock/
[^2]: https://aws.amazon.com/jp/what-is/vector-databases/
[^3]: https://dev.classmethod.jp/articles/amazon-kendra-genai-index-ga/
[^4]: https://dev.classmethod.jp/articles/genai-index-amazon-kendra-reinvent2024/