この記事について
この記事は SUPER STUDIO Advent Calendar 2023 の7日目の記事になります。
RAG(Retrieval Augmented Generation、検索拡張生成)とは
大規模言語モデル(LLM)に特定の情報を参照できるようにすることで、ユーザーの質問に対して、与えた情報から回答を生成する仕組みです。
FAQやナレッジデータベースなどの一次情報を指定することで、自然言語による一次情報の検索、および回答を返却することができるようになります。
AWSでは、検索エンジンサービスの「Amazon Kendra」と、生成AIサービスである「Amazon Bedrock」を組み合わせることで簡単に実現できます。
RAGチャットを動かしてみるには
手っ取り早くRAGチャット実行するには、AWSの生成AIワークショップの通りに手順を踏めばいいです。
このワークショップではRAGチャットだけでなく、文章要約や画像生成といったいろいろな生成AIについて、実際に動かして試すことができます。
構成図的には以下の通りです。
権限回りについての記述がないため、IAMロールの許可ポリシーの追加に困ったくらいで、本当に書いてある通りで問題ありません。
データソースの変更
このワークショップでは、RAGが参照する情報はS3バケットに配置したドキュメントファイルを参照しますが、今回はインターネット上に公開しているサイトを読み込ませたいので、そこだけ手順を変更します。
今回読み込ませるサイトについては、弊社が提供している統合コマースプラットフォーム「ecforce」のFAQを使用します。
ワークショップの手順「3.データの追加」で上記サイトのURLを読み込ませるようにしてみます。
まず、「3.1 S3へのアップロード」はスキップして構いません。
次に「3.2 KendraとS3の連携」を以下のようにします。
元の手順では、Kendraのデータソースとして「Amazon S3 Connector」を指定しますが、ここでデータソースを下にスクロールしていくと「Web Crawler V2.0」があるのでそちらを選択します。
次にクローラーの設定です。
データソース名に適当な名前を設定して、Default languageは日本語のサイトなので「Japanese(ja)」を選択します。
クロール対象はFAQのURLを入力します。
あとはデフォルトのままで設定完了です。
最後に同期の頻度はオンデマンドにしているので、Sync now
で手動で同期させます。
今回のFAQでは、クローリングからインデックスの作成まで3時間弱くらいで完了しました。
RAGチャットを使ってみる
あとはワークショップの手順通りにアプリを立ち上げて、RAGチャットを使用してみます。
良い感じに回答が出力されました!
もう少し漠然とした質問をしてみます。
クロールによってFAQ以外のページからも回答を検索して、うまく回答してくれています。
最後に少し見当違いな質問をしてみます。
データソースに関係ない質問には答えないように制御できていますね。
まとめ
巷ではChatGPT勢の話題に比べて、Amazon Bedrockは盛り上がりに欠けていますが、検索サービスであるAmazon Kendraをうまく組み合わせれば、コードをほとんど書かなくてもサイトのクローリングからLLMによる自然言語検索が簡単に実装できることがわかりました。
微調整には時間がかかるかもしれませんが、PoCレベルであれば十分な性能であると感じました。
ちなみにコストは3日使って4ドルでした(利用が済んだらリソースの削除はお忘れなく)。
追記
こんなことしていたら、AWS re:Invent 2023でAmazon Qが発表されましたね。
もっとお手軽にRAGチャットが使えるようになりますね。