発展:検索拡張生成(RAG)と LLM エージェント
自然言語処理の応用のレッスンの続きとして、大規模言語モデルを実務で使うときの中心となる2つの発展、検索拡張生成(RAG)と LLM エージェントを学びます。モデルの外に置いた知識を検索して答えに使う RAG のしくみ、そのための文書検索とベクトル検索、幻覚への効き方、そしてモデルに道具を使わせ、手順を自分で組み立てさせる LLM エージェントとその一種である Agentic RAG までを実装のコードは扱わずに、なぜそうするのかに絞って説明します。
ねらい
このレッスンは、自然言語処理の応用のレッスンの続きにあたる発展(はってん)の記事です。大規模言語モデル(だいきぼげんごモデル、Large Language Models)を実際の仕事で使うときに、まず出てくるのが、ここで扱う検索拡張生成(けんさくかくちょうせいせい、RAG)と LLM エージェント(エルエルエムエージェント)です。G検定でも、生成 AI の実装にかかわる話題として比重が高まっています。
この記事は、ある程度の知識のある人に向けた深掘りです。大規模言語モデルが次の単語を予測するしくみで文章を作る、という土台をつかんでいることを前提にします。実装のコードは扱いません。なぜモデルの外に知識を置くのか、なぜモデルに道具を持たせるのか、という考え方に絞ります。
1. 検索拡張生成(RAG)とは、外の知識を探して渡すこと
大規模言語モデルに、社内の最新の規程について質問したとします。その規程はモデルが学習したあとに作られたもので、モデルは中身を知りません。それでもモデルは、もっともらしい文章を作ってしまいます。事実にもとづかない、それらしいだけの答えを出すことを幻覚(げんかく、hallucination)と呼びます。大規模言語モデルは学習した時点までの文章から次の単語の来やすさを覚えているため、学習したあとの出来事や学習に含まれない社内の文書は知りようがありません。しかも、知らないことを「知らない」とは言わず、覚えた言い回しで埋めてしまいます。この弱点をモデルそのものの学習し直しなしに補う考え方が、これから見るしくみです。
検索拡張生成(RAG、Retrieval-Augmented Generation)とは、質問に答える前に、モデルの外にある文書から関係する箇所を検索し、それを手がかりとしてモデルに渡してから答えさせるしくみです。
流れは、大きく3つに分かれます。
1つ目は、探すことです。ユーザーの質問を受け取り、それに関係する文書の箇所をあらかじめ用意した文書の集まりから探し出します。この文書の集まりを知識のもと、探す部分を検索器(けんさくき、retriever)と呼びます。
2つ目は、渡すことです。探し出した箇所を質問といっしょにモデルへの入力にまとめます。「次の資料を参考にして、質問に答えてください」という形で、資料と質問を1つの入力にします。
3つ目は、答えることです。モデルは、渡された資料を手がかりに答えを作ります。自分の記憶だけに頼るのではなく、目の前に置かれた資料を根拠にできるため、学習後の新しい情報や、学習に含まれない社内の文書についても答えられます。
たとえるなら、記憶だけで答える試験から、資料の持ち込みができる試験に変えるようなものです。モデルの中身はそのままに、答えるときに参照できる資料を外から差し出す。これが検索拡張生成の骨組みです。
ポイント
検索拡張生成は、モデルを学習し直さずに、質問のたびに外の文書を検索して入力に足し、それを根拠に答えさせるしくみです。学習後の情報や手元の文書に対応できます。
理解の確認
検索拡張生成(RAG)は、質問に関係する文書の箇所を検索し、質問といっしょにモデルへ渡してから答えさせるしくみです。モデルを学習し直さずに、学習後の情報や手元の文書を根拠にできます。探す・渡す・答えるの3段階からなります。
2. どう探すか:ベクトル検索と近似最近傍探索
検索拡張生成のかなめは、質問に本当に関係する箇所を探し出せるかどうかです。ここで、意味の近さで探す工夫が効いてきます。
素直な探し方は、質問と同じ言葉を含む文書を探すことです。しかし、言葉が一致しなくても意味が近い、ということはよくあります。「解約の手続き」と「退会の方法」は、共通の言葉が少なくても、意味は近いはずです。言葉の一致だけでは、こうした箇所を取りこぼします。
そこで使うのが、意味をベクトルにして探す方法です。単語の分散表現のレッスンで、単語を意味のベクトルにする方法を学びました。同じ考え方を文よりも長いひとまとまりの文章にも広げられます。文章を意味のベクトルにしたものをパッセージ埋め込み(passage embedding)や文埋め込みと呼びます。あらかじめ、知識のもとにある文書を細かく区切り、それぞれをベクトルにして蓄えておきます。質問が来たら、質問もベクトルにして、蓄えたベクトルの中から向きの近いものを探します。向きが近いほど意味が近い、という関係は、のちの相関・距離のレッスンで扱うコサイン類似度の考え方どおりです。
ただし、蓄えるベクトルが何百万とあると、質問のたびに全部と近さを測るのは重すぎます。そこで、厳密に一番近いものを求める代わりに、十分に近いものをすばやく見つける工夫を使います。これを近似最近傍探索(きんじさいきんぼうたんさく、approximate nearest neighbor search)と呼びます。少しの取りこぼしを許すかわりに、桁違いに速く探せます。こうしたベクトルの蓄積と検索を受け持つ道具をベクトルデータベース(vector database)と呼びます。ここでは、ライブラリや製品の使い方ではなく、意味のベクトルにして近いものを速く探す、という考え方を押さえてください。
理解の確認
検索拡張生成では、文書をパッセージ埋め込みという意味のベクトルにして蓄え、質問もベクトルにして向きの近いものを探します。言葉が一致しなくても意味の近い箇所を拾えます。大量のベクトルから速く探すために、厳密解の代わりに近似最近傍探索を使います。
3. RAG は幻覚にどう効くか、そして限界
検索拡張生成の大きなねらいは、幻覚をへらすことです。効き方と、その限界を整理します。
効き方は、根拠を目の前に置くことです。モデルが記憶だけで答えると、あいまいな部分をそれらしく埋めてしまいます。検索拡張生成では、答えの根拠となる文書を入力に添えるので、モデルはそこに書かれた事実に沿って答えやすくなります。さらに、答えのもとにした箇所を出典として示せるため、利用者が答えの真偽を確かめやすくなる、という利点もあります。
ただし、幻覚がなくなるわけではありません。限界が2つあります。1つは、検索が外すと効かないことです。関係する箇所を探し出せなければ、モデルには手がかりが届かず、また記憶に頼ってしまいます。検索の良し悪しが、答えの良し悪しをそのまま左右します。もう1つは、資料を渡しても、モデルがそれを無視したり、資料に書いていないことを足したりしうることです。渡した資料に忠実に答えているかは、別に確かめる必要があります。
要点は、検索拡張生成は幻覚をへらす有力な手立てだが、検索の精度に支えられており、渡した資料に忠実かどうかの確認も欠かせない、ということです。
理解の確認
検索拡張生成は、答えの根拠を入力に添えることで幻覚をへらし、出典も示せます。ただし、検索が関係する箇所を外せば効かず、資料を渡してもモデルが無視したり書いていないことを足したりしうるため、忠実さの確認は別に必要です。
4. LLM エージェントとは、道具を使い手順を組み立てること
検索拡張生成は、モデルに外の知識を渡すしくみでした。もう一歩進めて、モデルに道具を使わせ、何をするかを自分で決めさせる考え方が、LLM エージェントです。
大規模言語モデルは、そのままでは文章を作ることしかできません。計算をさせても、正確とはかぎりません。最新の情報も知りません。そこで、モデルの外に道具を用意します。計算する道具、Web を検索する道具、社内の仕組みを呼び出す道具などです。モデルには、「必要なら、この道具をこう呼び出してよい」と教えます。すると、モデルは答えを作る途中で、道具を呼び出す指示を出せるようになります。これを道具利用(ツール利用、tool use)と呼びます。
さらに、複雑な仕事では、1回の応答では終わりません。そこで、次のような繰り返しの流れを組みます。モデルがまず、今何をすべきかを考え、必要な道具を呼び出します。道具からの結果を受け取り、それをふまえて次に何をするかをまた考える。この、考える・道具を使う・結果を見てまた考える、という繰り返しで仕事を前に進める仕組みが、LLM エージェントです。人が手順をすべて決めて渡すのではなく、大きな目標を与えると、モデルが手順を自分で組み立てて進めます。
たとえば「先月の売上を調べて、グラフにして」という依頼なら、エージェントは、まず売上を取り出す道具を呼び、次に集計し、最後に作図の道具を呼ぶ、という手順を自分で並べます。途中でうまくいかなければ、やり直しもします。
ポイント
LLM エージェントは、モデルに道具を使わせ、考える・道具を使う・結果を見てまた考える、という繰り返しで、目標に向けて手順を自分で組み立てて進める仕組みです。
理解の確認
LLM エージェントは、モデルに計算や検索などの道具を使わせ(道具利用)、考える・道具を使う・結果を見てまた考える、という繰り返しで仕事を進めます。人が手順を全部決めるのではなく、目標を与えるとモデルが手順を組み立てます。
5. Agentic RAG:検索をエージェントが判断して行う
検索拡張生成と LLM エージェントを組み合わせたものが、Agentic RAG(エージェンティック・ラグ)です。名前のとおり、検索拡張生成をエージェントのやり方で行います。
ふつうの検索拡張生成は、質問が来たら必ず1回検索し、その結果で答えます。決められた流れを1度たどるだけです。これに対して Agentic RAG では、検索するかどうか、何回検索するか、どこを検索するかをモデルが状況に応じて判断します。
具体的には、こうした振る舞いになります。簡単な質問なら検索せずに答え、必要なときだけ検索する。一度の検索で足りなければ、結果を見て問い直し、検索をやり直す。複数の知識のもとがあるなら、どれを引くかを選ぶ。取り出した資料が的外れだと気づいたら、別の探し方を試す。こうして、固定した1回の検索ではなく、必要に応じて検索を繰り返し、深めていきます。
そのぶん、判断のための呼び出しが増え、時間も計算も多くかかります。単純な用途では、ふつうの検索拡張生成のほうが速く安く済みます。難しく、一度では答えの根拠がそろわない仕事ほど、Agentic RAG の柔軟さが効いてきます。
理解の確認
Agentic RAG は、検索拡張生成をエージェントのやり方で行うものです。検索するか、何回するか、どこをするかをモデルが状況に応じて判断し、必要に応じて検索を繰り返します。柔軟さと引きかえに、時間と計算は多くかかります。
6. 発展:どこまでが手法で、どこからが製品か
この分野は、製品やライブラリの入れ替わりがとても速い領域です。検索の道具、ベクトルデータベース、エージェントの枠組みは、次々と新しいものが登場します。しかし、その底にある手法の考え方は、ここまで見てきたとおり、比較的安定しています。
手法として押さえるべきは、次の点です。知識をモデルの外に置き、意味のベクトルで検索して渡すこと。渡した根拠に沿って答えさせ、出典を示すこと。モデルに道具を使わせ、考える・使う・見てまた考えるの繰り返しで手順を組み立てさせること。検索そのものをエージェントに判断させて深めること。これらの考え方は、個々の製品が入れ替わっても残ります。
新しい製品や機能に出会ったときは、それがこの手法のどこを担うものか、どこを速く安くしようとしているのか、と位置づけて見ると、筋道を追えます。製品名や画面の操作を覚えることよりも、なぜモデルの外に知識を置くのか、なぜ道具を持たせるのか、という理由を押さえておくことが、長く効きます。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。