はじめに
LLMの活用方法の一つ、RAG(Retrieval-Augmented Generation)について説明する機会が多かったので、簡単な解説を作ってみました。
LLM…Large Language Model(大規模言語モデル)のことで、Chat GPTはLLMを使ったアプリケーション
RAGとは
①ユーザーが質問
「動物園は何時から開いていますか」
②質問に関連するデータを検索
検索方法は様々ありますが、質問文をそのまま使って文の類似度などで検索したり、質問文から検索ワードをLLMに生成させて検索したりします。
デファクトスタンダードのAzure OpenAIであれば、Azure環境のため、Azure AI Searchを使うことが多い印象です。
③質問に関連するデータを取得
ここでは、以下のデータが取得できたとします。
「開園時間:9時~17時 休園日:水曜日(水曜日が祝日の場合は開園日となり翌日を休園日とする)、年末年始(12/29~1/3)」
④取得したデータと合わせてプロンプトをLLMに投げる
ここがRAGのポイントです。
①のユーザーの質問、③の取得したデータ、そして予め用意しておいたプロンプトを組み合わせて以下のようなプロンプト(文章)を作ります。
「あなたは○○動物園について回答するアシスタントです。
質問に対して、参考情報を元に回答を作ってください。回答部分のみを生成してください。
参考情報を元に回答できない場合は、「わかりません。」と答えてください。
まず例を示します。
質問:入園料はいくらですか。
参考情報:入園料 大人:800円 子供:300円
回答:入園料は、大人800円、子供300円です。
では以下に回答してください。
質問:動物園は何時から開いていますか
参考情報:開園時間:9時~17時 休園日:水曜日(水曜日が祝日の場合は開園日となり翌日を休園日とする)、年末年始(12/29~1/3)
回答:」
⑤LLMの回答
④の質問からLLMが回答を作成します。試しに④にある質問を「」の中身まるごとChatGPTに投げてみてください。ちゃんと答えが返ってくるはずです。
LLMがやっているのは、情報抽出や要約といったタスクになります。
また、LLMが生成した回答に引用元をつけてあげるのがよいです。
BingのCOPILOTもインターネット検索を情報源とするRAGで、引用元のURLが表示されています。
まとめ
RAGとは、質問及び質問の答えとなる情報が載っているデータを使ってLLMに答えさせる仕組みです。
検索したデータを使ってLLMに質問しているので、実は欲しい情報が入っているデータを検索できるかがポイントです。
実際のプロンプトを見てもらえばわかるように、プロンプト内に答えが書いてあって、LLMはその情報を整理して答えているだけです。
欲しい情報を検索できるかは様々な工夫があり、RAGシステムを開発する場合はそこの工夫がミソだったりします。