RAG(検索拡張生成)とは
RAG(検索拡張生成)は、AI が答える前に関係する資料を検索し、見つけた内容をもとに答えを作るしくみです。自分の資料や新しい情報で答えられ、答えの根拠も示しやすくなります。
この記事でわかること
- RAG(検索拡張生成)が何かを説明できる
- RAG が資料を探して答えるまでの流れがわかる
- RAG の得意なことと限界を知る
目次
RAG(検索拡張生成)は、AI が質問に答える前に、関係する資料を検索して読み、その内容をもとに答えを作るしくみです。英語の Retrieval-Augmented Generation の頭文字で、「検索(Retrieval)で補った(Augmented)文章の生成(Generation)」という意味です。2020 年に発表された研究論文「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」で名付けられました。いまでは、サイトの質問窓口や社内の資料検索など、決まった資料をもとに答える AI のしくみとして広く使われています。
RAG を知っておくと、AI の答えをどこまで信じてよいか、どう確かめればよいかを判断しやすくなります。自分のサイトに AI の質問窓口を置くかどうかを考えるときにも役立ちます。
- 質問「解約の方法は?」
- 資料を検索意味とキーワードで探す
- 見つかった資料「プランの解約」の記事
- LLM が答えを書く資料に書いてあることだけで
- 出典つきの答え使った記事へのリンク
AI はなぜ資料を探す必要があるのか
チャットで質問に答える AI の中心には、LLM(大規模言語モデル)があります。大量の文章から言葉のつながりを学んだモデルです。LLM は学習した文章をもとに答えるので、次のようなことが苦手です。
- 学習したあとに起きたことを知らない(知識に締め切りがある)
- 公開されていない資料、たとえば自分の事業の料金表や手順書を知らない
- 知らないことでも、もっともらしい文章を作ってしまうことがある(ハルシネーションと呼ばれます)
たとえば、オンライン講座のサイトに AI の質問窓口を置いたとします。「来月の講座の申し込みは何日まで?」と聞かれても、LLM だけでは、その講座の締め切りを知りません。それらしい日付を答えてしまうと、受講を考えていた人を困らせてしまいます。
RAG は、この問題を「答える前に資料を調べる」ことで和らげます。試験にたとえると、記憶だけで答える試験を、教科書を持ち込める試験に変えるようなものです。答えの中身は、そのとき見つけた資料に支えられます。
RAG はどう動くのか
RAG の流れは、前もってする「準備」と、質問のたびにする「検索と回答」の 2 つに分かれます。
準備:資料を探せる形にする
- 答えのもとにする資料を集めます。ヘルプの記事、よくある質問、利用規約、講座の案内などです。
- 資料を、数段落ほどの小さなかたまりに分けます。このかたまりをチャンクと呼びます。長い資料のまま渡すと、質問と関係のない部分まで一緒に読ませることになるからです。
- それぞれのチャンクを埋め込み(文章の意味を表す数の並び)に変え、探せるように索引(インデックス)に入れます。言葉そのものでも探せるよう、キーワードの索引も一緒に作ることがよくあります。
質問が来たとき:探して、渡して、答える
- 質問も埋め込みに変え、意味の近いチャンクを索引から探します。
- 関係の深い順に、数件のチャンクを選びます。
- 選んだチャンクと質問をまとめて LLM に渡します。このとき「次の資料に書いてあることだけで答え、資料にないときは、わからないと答えてください」のような指示を添えます。
- LLM が答えを書きます。どの資料を使ったかを出典として添えると、読む人があとで確かめられます。
資料を直したときは、索引の中のそのチャンクを入れ直せば、次の質問から新しい内容で答えられます。LLM そのものを学習し直す必要はありません。
資料はどうやって探しているのか
RAG の答えのよしあしは、検索でよい資料を見つけられるかどうかで大きく変わります。探し方には、大きく分けて 2 つあります。
| 探し方 | しくみ | 得意なこと | 苦手なこと |
|---|---|---|---|
| 意味で探す(ベクトル検索) | 埋め込みどうしの近さを比べる | 「もうやめたい」で「プランの解約」の記事が見つかるように、言い方が違っても当たる | 型番・人名・数字など、文字どおりに合ってほしい言葉 |
| 言葉で探す(キーワード検索) | 同じ言葉がどれだけ含まれるかを数える | 型番・固有名詞・決まった用語 | 言い換えや、同じ意味の別の言葉 |
実際には、2 つを組み合わせた「ハイブリッド検索」もよく使われます。さらに、見つかった候補を別のモデルで並べ直す「リランキング」で、上位に来る資料の質を上げる方法もあります。
日本語の文には、英語のような単語のあいだの空白がありません。そのため日本語のキーワード検索では、文を数文字ずつに区切って索引を作るなどの工夫をします。言語によって向いている設定が変わることも、覚えておくとよいでしょう。
RAG を使うと何がよくなるのか
- 自分の資料と新しい情報で答えられる:料金や締め切りのように、事業ごとに違い、よく変わる情報に向いています。
- 出典を示せる:答えの根拠になった記事やページを示せるので、読む人が自分で確かめられます。
- 間違いを減らしやすい:資料に沿って答えるよう指示できるので、推測で答える場面が減ります。ただし、間違いがなくなるわけではありません。
- 答えのもとにする範囲を決められる:検索する資料を分けておけば、たとえば公開してよい記事だけをもとに答える質問窓口を作れます。
たとえば、ピアノ教室のサイトで「振替レッスンは何日前までに連絡すればいい?」と聞かれたとします。RAG なら、教室の規約から振替の決まりが書かれた部分を探して答え、規約のページへのリンクを添えられます。規約を書き換えたら、次の質問からは新しい決まりで答えます。
RAG の限界と、上手に使うコツ
RAG は便利ですが、何でも解決するわけではありません。よくあるつまずきと、その対策をまとめます。
| つまずき | 起きること | 対策 |
|---|---|---|
| 資料に答えがない | 推測で答えてしまう | 資料にないときは「わからない」と答え、問い合わせ先を案内するよう指示する |
| 資料が古い・間違っている | 古い内容のまま答える | 資料を直したら索引も入れ直す。資料ごとに直す人を決めておく |
| 検索が外れる | 関係の薄いチャンクをもとに答える | 質問を短い言葉に言い換えて探し直す。チャンクの分け方や探し方を調整する |
| 資料の中に AI への指示が紛れている | 資料に書かれた指示に従ってしまう | 資料は「データ」として扱い、中の指示には従わないようにする |
| 渡す資料が多すぎる | 費用が増え、答えが遅くなる | 渡すチャンクの数と長さに上限を決める |
1 つ目の「わからない」と答えることは、失敗ではありません。推測で違う日付や金額を伝えるより、問い合わせ先を案内するほうが、聞いた人の役に立ちます。
4 つ目は「プロンプトインジェクション」と呼ばれる問題で、AI が道具を使って作業をする場合には、特に気をつけたい点です。くわしくは「AI エージェントとは」で説明しています。
まとめ
- RAG は、答える前に資料を検索し、見つけた内容をもとに AI が答えるしくみです。
- 準備で資料をチャンクに分けて索引に入れ、質問のたびに関係するチャンクを探して LLM に渡します。
- 自分の資料や新しい情報で答えられ、出典も示せます。
- 答えの質は、資料と検索の質で決まります。資料にないときに「わからない」と言えることも大切です。
mukumo では RAG をどう使っていますか
mukumo(ムクモ)の AI アシスタントの muku(ムク)は、mukumo の使い方・設定・料金・トラブルを聞かれると、まず Cloudflare AI Search でヘルプセンターの記事を探し、見つかった記事に書いてあることだけで答えるようにしています。画面の名前や手順、数字を推測で足さないためです。
チャットでは、答えの最後に、根拠にした記事へのリンクを添えます。当たる記事がないときは、質問を短い言葉に言い換えてもう 1 回だけ探します。それでも見つからなければ、ヘルプに書いていないことを伝え、ヘルプセンターとお問い合わせフォームを案内します。
よくある質問
RAG とファインチューニングは何が違いますか
ファインチューニングは、モデルに追加の学習をさせて、話し方や特定の作業の得意さを変える方法です。RAG はモデルを変えずに、答えるたびに資料を渡します。よく変わる情報や、出典を示したい答えには RAG が向いています。
AI が一度に読める量が増えれば、RAG はいらなくなりますか
資料が少なければ、毎回すべてを渡す方法もあります。ただ、渡す量が多いほど費用と時間がかかり、関係の薄い部分に答えが引きずられることもあります。資料が多いときは、関係する部分だけを選んで渡す RAG が役に立ちます。
RAG にはどんな資料を使えますか
ヘルプの記事、よくある質問、マニュアル、Web ページなど、文章になっている資料が向いています。PDF や表は、文字を取り出してから使うのが一般的です。
RAG を作るには専用のデータベースが必要ですか
意味で探すには、埋め込みを保存して近いものを探せるしくみ(ベクトルデータベースなど)を使うのが一般的です。資料が少なければ、キーワード検索だけで始める方法もあります。