3行でいうと

  • RAGは、AIが答える前に外の資料から関係する部分を探し、質問といっしょにAIに渡す方法です。
  • AIを訓練し直す方法ではありません。資料を差し替えれば、次の質問から答えが変わります。
  • 間違いがなくなるとは書かれていません。探した部分が的外れなら、答えもずれます。
  • 資料を小さく切ると文脈が失われて探し損なう弱点があり、Anthropicは対策を紹介しています。

この記事は公式・一次資料を読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。

先に結論

たとえ話:持ち込み可の試験と、図書館の司書

2種類の試験を想像してください。

RAGは、後者にあたります。ただし、AIが分厚い資料の全ページを一度に机に広げるのは大変です(机の広さの上限は前の記事のコンテキストウィンドウです)。そこで、図書館の司書のような役が先に、質問に合うページだけを探して持ってきます。AIは、そのページを読んで答えを書きます。

つまり、RAGは「司書(探す役)」と「回答者(AI)」の分業です。

仕組みを、順番に

AWSの解説と、Anthropicのブログから、流れを4つにまとめました。

1. 資料を準備する

資料(文書、データベース、API経由のデータなど)を、小さなかたまり(チャンク)に切ります。そして、各チャンクを「埋め込み(エンベディング)」という数字の並びに変えて、専用の保管場所(ベクトルデータベース)に入れておきます。

埋め込みは、Anthropicの文書によれば、文章の意味の近さを測れるようにした数字の表現です。意味が近い文章は、近い数字の並びになります。文書の例では、1つの文章が1,024個の小数の並びになっています。

2. 質問に合う部分を探す

質問も同じ方法で数字の並びにして、保管場所の中から、近いチャンクを探します。キーワードが同じかどうかではなく、意味の近さで探すのが特徴です。Anthropicの文書の例では、「アップルの決算発表の電話会議はいつか」という質問が、言い回しの違う決算の文書に当たります。OpenAIの検索の文書も、キーワードがほとんど一致しなくても意味の近い結果が出ると説明しています。

Anthropicのブログによると、ここにキーワード検索(BM25という方法)も組み合わせると、エラーコードのような決まった語も探せるようになります。

3. 見つけた部分を質問に添える

AWSの解説では、探し出した情報を、利用者の質問に付け足して、AIに渡します。AIは、それを読んで答えを書きます。

4. 資料を更新する

資料が新しくなったら、保管場所の中身も入れ替えます。AWSの解説は、この更新を、リアルタイムでも、定期的な一括でもできると書いています。AIを訓練し直す必要がないので、新しい情報を足す費用が、モデルを訓練し直すより安い、というのがAWSの説明です。

実際の使い道

見立てです。「たくさんの資料があって、毎回その一部だけを使う」場面に向いた方法だと思います。

誤解されやすい点

「AIが資料を覚えた」わけではない

RAGでは、AIの中身は変わりません。質問のたびに、探した部分が机に載るだけです。資料を差し替えれば、次の質問から答えが変わります。

「間違いがなくなる」とは書かれていない

AWSの解説は、AIが知らないことをでっち上げる、古い答えを出す、といった問題への対策として、RAGを紹介しています。そして、答えに出典を付けて、利用者が元の文書を確かめられる、というのも利点にしています。ただし、これは精度を高めるという説明で、間違いがなくなるとは書かれていません。探した部分が的外れなら、答えもずれます。

小さな資料なら、RAGは要らないことも

Anthropicのブログ(2024年9月19日)は、資料全体が20万トークン未満(約500ページ)なら、RAGを使わず、全部をまとめてAIに渡す方法を勧めています。キャッシュ(同じ内容の再利用)で、速く安くなるとも書いています。ただし、その時点の話で、モデルの扱える量は、その後大きく増えています。

Googleのロングコンテキストの文書は、Geminiの大きな机を前提に、必要な情報を最初から全部渡すほうが向いている、という立場です。そして、RAGなどの工夫が役に立つ場面も残る、としています。全部渡す方式にも、リクエストのたびに全部のトークンの料金がかかる、返事が遅くなる、複数の情報を探すと精度が落ちる、という弱点がある、とGoogleは書いています。

弱点:切ると、文脈が消える

Anthropicのブログは、資料を小さく切ると、文脈が失われやすいと指摘しています。たとえば「会社の売上は前の四半期より3%増えた」というチャンクは、どの会社の、いつの話かが書かれていないので、探しても当たりにくくなります。

対策として、Anthropicは「コンテキスト付き検索(Contextual Retrieval)」を紹介しています。各チャンクの前に、元の文書を踏まえた短い説明(50〜100トークンほど)を付けてから、埋め込みます。公式の発表では、上位20件の中に正解が入らなかった割合が、次のように減ったと書かれています。

方法 探し損なった割合 減った割合
従来のやり方(基準) 5.7% -
コンテキスト付きの埋め込み 3.7% 35%
上に、キーワード検索(BM25)を併用 2.9% 49%
さらに、順位の並べ替え(リランク)を追加 1.9% 67%

これはAnthropicが自社の実験で出した数字です。別の資料や別の条件で同じになるとは限りません。

気をつけること

出典

更新履歴