RAGは、検索した情報を使って回答する構成

第3章では、過去の会話を入力に含めて、相談の文脈を保つ方法を学びました。この章では、モデルへ渡す情報を、会話以外の社内資料などへ広げます。

RAGはRetrieval Augmented Generationの略で、必要な情報を検索し、その結果をモデルの入力へ加えて回答を生成する構成です。Retrievalは情報の取得、Generationは生成を意味します。LangChainの機能名一つを指すのではなく、検索と生成を組み合わせるアプリケーションの作り方です。

たとえば、出張の交通費に関する質問を受けたとき、まず社内規程から関連する箇所を検索します。その文章を質問と一緒にモデルへ渡し、「この資料に基づいて説明してください」と依頼します。モデルの一般知識だけに頼らず、今回渡した資料を回答の根拠として使うことを目指します。

このとき、モデルが社内規程を恒久的に学習したわけではありません。今回の呼び出しの入力として参照しています。次の質問で別の資料を渡せば、その資料を参照する構成になります。

資料を用意する段階と、質問へ答える段階

RAGには、質問が来る前に資料を検索できる形へ整える段階と、質問が来てから関連箇所を取り出して回答する段階があります。ここを分けると、次の節から学ぶ部品が、どの場面で働くか分かりやすくなります。

段階行うこと次の段階へ渡すもの
事前の準備資料を読み、検索しやすいまとまりに分け、検索用に登録する。検索できる資料と、出典などの情報。
質問時の検索今回の質問に関連する箇所を取得する。回答の参考にする文章と出典。
質問時の生成質問、取得した文章、回答方針をモデルへ渡す。資料を根拠に作成した回答。

同じ資料を使う質問が来るたびに、全資料の読み込みや登録からやり直す必要はありません。資料の内容が更新されたときには、事前に用意した検索対象へ、その変更を反映します。

検索することと、回答を作ることは別の段階

質問時の基本的な流れは、質問を受ける、関連する資料を取得する、取得した資料と質問で入力を作る、モデルが回答する、という順序です。LangChainでは、資料の読み込みや検索の部品に、これまで学んだプロンプトとモデルを組み合わせます。資料の表し方は第10節、検索の仕組みは第11節で詳しく説明します。

検索だけなら、資料の候補一覧を返す検索システムです。RAGでは、取得した情報をモデルへ渡し、利用者の質問に合わせた説明へ変換する段階が加わります。検索で正しい資料を取得できなければ、モデルの文章が自然でも回答に必要な根拠が不足します。

反対に、正しい資料を取得していても、モデルが条件を読み落とすことがあります。このため、RAGの品質は「検索がうまくいったか」と「資料から適切に回答したか」に分けて考えます。

説明用の架空の規程に「交通費は精算システムから申請する。領収書がある場合は添付する」とだけ書かれているとします。この文章を検索できたなら、申請先と添付については説明できます。しかし、申請期限はこの記述からは確認できません。

この場合の回答は、「精算システムから申請し、領収書がある場合は添付します。期限は提示資料に記載がないため確認が必要です」のように、資料で分かることと、分からないことを分けた形になります。「通常は一週間以内だろう」と補うと、検索した根拠から離れてしまいます。

なぜ資料を全部渡さずに検索するのか

資料が短く少数であれば、全文を直接モデルへ渡す方法もあります。しかし、多くの文書を毎回すべて渡すと、入力の上限や時間、費用の問題が生じます。無関係な説明が増えることで、必要な条件が埋もれる場合もあります。質問に関係する部分を絞って渡すことが、検索を組み込む理由です。

ただし、絞り込みは必要な情報を落とす危険も伴います。「交通費の通常ルール」は取得できても、「特定の勤務区分の例外」が別の場所にあり、取得できないかもしれません。RAGは情報を選ぶ構成であるため、何を残し何を落としたかが品質に直結します。

RAGとファインチューニングの違い

RAGは、外部にある情報を取得してモデルの入力へ含める方法です。ファインチューニングは、学習を通してモデルのパラメーターを調整する方法です。資料を更新して検索対象に反映したい場合と、特定の応答傾向や仕事の振る舞いを学習させたい場合では、目的が異なります。

ここでのパラメーターは、学習によって調整されるモデル内部の数値です。質問ごとに渡す資料や、出力の長さなどの利用時の設定とは別です。RAGは今回参照する資料を変え、ファインチューニングは学習によってモデル内部を調整する、と捉えると、第1節の「学習と利用」の違いにつながります。

両者は排他的ではなく、組み合わせることもあります。ただし、「社内資料を使わせるには必ずモデルを再学習しなければならない」と考える必要はありません。更新される規程やマニュアルを参照させたい場合、まず検索して渡す構成を検討できます。

根拠付き回答の限界を知る

RAGを導入しても、誤った回答が完全に無くなるわけではありません。取得した資料が古い、質問の意味を取り違えた、モデルが根拠に無い説明を付け足した、などの失敗があり得ます。出典のリンクを表示していても、そのリンク先が回答の主張を実際に裏付けているかは別の確認です。

根拠が足りないときに、不足を伝える設計も重要です。資料に申請期限が無ければ、一般的な期限をもっともらしく補うより、「この資料から期限は確認できない」と伝え、次の確認先を示す方が適切な場合があります。次の節から、検索に使う資料をどのように準備し、取り出すかを説明します。