RAGとは、質問に関連する情報を外部のデータベースから検索し、その情報をLLMに与えて回答を生成させる技術です。
RAGを使えば、LLM自体を再学習させなくても社内文書や新しい情報を回答の根拠として活用でき、「社内マニュアルや規程を踏まえて回答してほしい」「最新の資料を参照させたい」といった場面に対応できます。
一方で、RAGを導入すれば必ず正確な回答が得られるわけではありません。回答の質は、検索精度や参照するデータの整備状況にも左右されます。
本記事では、RAGの基本的な仕組みやメリット、活用例、構築手順に加え、導入前に知っておきたい課題や検索精度を高めるポイントまで解説します。
目次
- RAG(検索拡張生成)とは?
- RAGは外部情報を検索して回答に使う技術
- LLMやファインチューニング・従来の検索との違い
- RAGの仕組み
- 検索|質問に関連する情報を探す
- 拡張|検索した情報を質問に追加する
- 生成|追加した情報をもとに回答を作る
- RAGを活用するメリット
- 社内情報や新しい情報を回答に活用できる
- LLMを再学習せずに参照情報を更新できる
- 根拠のある情報を与えればハルシネーションを抑えやすい
- RAGの主な活用例
- 社内規程やマニュアルの内容を横断して検索する
- 社内ヘルプデスクの問い合わせ対応を自動化する
- 顧客からの問い合わせにチャットボットで答える
- RAGを構築する手順
- 対象にする文書を選んで整える
- 文書を検索しやすい大きさに区切る
- 文書をベクトル化して検索用データベースに保存する
- 検索結果をプロンプトに組み込みLLMへ送る処理を作る
- RAG導入前に知っておきたい課題
- 検索の精度が回答の質を左右する
- 社内文書の整備と更新に手間がかかる
- 機密情報の取扱いに注意する必要がある
- RAGの検索精度を高めるポイント
- 想定質問を使って必要な文書が検索できるか確認する
- 必要な情報を検索しやすいように文書の区切り方を見直す
- 検索方法や検索結果の絞り込みを見直す
- まとめ
- よくある質問
RAG(検索拡張生成)とは?
RAGとは、LLMがもともと持っている知識だけに頼らず外部の文書を検索し、その情報をもとに回答を生成する技術です。社内文書や新しい情報など、LLMが学習していない内容も回答の根拠として活用できます。
RAGの特徴を理解するために、まず基本的な仕組みを確認したうえで、LLM単体やファインチューニング、従来の検索との違いを整理します。
RAGは外部情報を検索して回答に使う技術
RAGは、社内文書や新しい資料などLLMが学習していない外部情報を回答に活用できる技術です。
正式名称はRetrieval-Augmented Generationで、日本語では検索拡張生成と訳されます。RAGを活用すると、検索対象のデータに含まれている情報を回答へ反映できます。たとえば、社内規程やマニュアルを検索対象にすると、自社の情報にもとづいた回答の生成が可能です。
生成AI全体の仕組みや種類は、以下の記事で解説しています。あわせて参考にしてください。
LLMやファインチューニング・従来の検索との違い
RAGとほかの手法では、回答の作り方や情報の更新方法が異なります。とくに、LLMが学習していない社内文書や専門的なデータ、最新情報を扱う場合に違いが出やすくなります。
LLMやファインチューニング・従来の検索との主な違いは以下のとおりです。
| 手法 | 回答の作り方 | 情報を新しくする方法 |
|---|---|---|
| LLM単体 | 学習済みの知識から生成 | モデルの再学習 |
| ファインチューニング | 特定のデータで追加学習したモデルが生成 | 新しいデータで再度最適化 |
| 従来の検索システム | 該当する文書や情報を提示(回答は作らない) | 検索対象の文書や情報を更新 |
| RAG | 検索した外部情報を参照してLLMが回答を生成 | 検索対象のデータを更新 |
RAGは、LLM単体やファインチューニングとは異なり、外部から検索した情報をもとに回答を生成します。そのため、最新情報や社内固有の情報などを回答に反映したい場合に適しています。
また、従来の検索システムが関連する情報を検索・提示するのに対し、RAGでは検索した情報をもとにLLMが回答を生成する点が特徴です。
RAGの仕組み
RAGは、質問に関連する情報を探し、その内容を加えて回答を作る仕組みです。処理は次の3段階に分かれます。
ユーザーから見ると1回の質問と回答ですが、内部ではこの3つの処理が順番に行われています。それぞれの役割を見ていきましょう。
検索|質問に関連する情報を探す
検索では、ユーザーの質問に関連する情報を、検索対象として登録した文書やデータから探します。
RAGでは、登録された情報をすべてLLMに渡すのではなく、質問に応じて関連する情報を選んで取り出す仕組みです。たとえば、社内規程について質問された場合は、規程やマニュアルの中から該当する内容を取り出します。
検索の段階で必要な情報を拾えるかどうかが、その後の回答内容に影響します。
拡張|検索した情報を質問に追加する
拡張では、検索で取得した情報を質問と組み合わせ、LLMが参照できる入力にします。
検索で情報見つけても、その内容をLLMが自動的に参照できるわけではありません。そこで、取得した文章を質問文と一緒にLLMへ渡します。
質問だけだった入力に外部の情報を加え、LLMが参照できる内容を広げるのが「拡張」です。
生成|追加した情報をもとに回答を作る
生成では、LLMが質問と拡張で加えられた情報を読み取り、回答を組み立てます。検索で見つけた文章をそのまま返すのではなく、質問の内容に合わせて必要な情報を整理し、回答文として生成する工程です。
たとえば、規程の中から手続きについて尋ねられた場合は、検索された内容から必要な部分をもとに、質問に沿った形で回答をまとめます。
RAGでは、外部情報そのものをLLMに学習させるのではなく、その都度与えられた情報を参照して回答を作ります。
RAGを活用するメリット
RAGのメリットは、LLMそのものを作り変えずに回答に使う情報を追加・更新できることです。社内情報や最新情報を活用しやすく、回答の根拠を補うためハルシネーションの軽減にもつながります。
ここからは、RAGを活用する主な3つのメリットを詳しく見ていきます。
社内情報や新しい情報を回答に活用できる
RAGを使うと、社内規程やマニュアル、LLMの学習後に公開された資料などを回答に活用できます。LLM単体では、学習データに含まれていない社内独自の情報や、学習後に公開された情報は参照できません。
たとえば、自社独自の申請ルールについて質問された場合でも、検索対象の社内文書に記載があれば回答の材料として使えます。一般的な知識だけでは答えにくい、自社固有の情報や新しい情報を扱える点がメリットです。
LLMを再学習せずに参照情報を更新できる
RAGは、LLMそのものを再学習しなくても、回答に使う情報を更新できます。ファインチューニングのようにモデルへ新しい情報を学習させるのではなく、RAGが参照する文書を更新して対応するためです。
たとえば、社内規程が改訂された場合は、RAGの検索対象となる文書を最新版に差し替えれば、新しい内容を回答に反映できます。情報の変更が多い場合でも、モデルを学習し直さずに参照情報を入れ替えられる点がメリットです。
根拠のある情報を与えればハルシネーションを抑えやすい
RAGでは、回答の根拠となる情報をLLMに与えることでハルシネーションを抑えやすくなります。ハルシネーションとは、事実と異なる内容をもっともらしく生成する現象です。
回答時に参照する情報をあらかじめ与えておけば、LLMはその内容を手がかりに回答を組み立てられます。さらに、参照した文書を回答とあわせて示す仕組みにすれば、回答内容を人が確認しやすくなる点もメリットです。
RAGの主な活用例
RAGは、社内文書の検索や問い合わせ対応など、蓄積された情報を活用するさまざまな業務に使えます。
ここからは、RAGの代表的な活用例を3つ紹介します。
社内規程やマニュアルの内容を横断して検索する
RAGを使うと、社内規程やマニュアルなど複数の文書を横断して必要な情報を検索することが可能です。
たとえば、就業規則や経費精算のルール、業務マニュアルなどが複数の場所に保存されていると、必要な情報を見つけるまでに時間がかかることがあります。
RAGでは、該当する文書を検索対象としてまとめ、質問に関連する箇所を探したうえで回答を生成します。そのため、ユーザーが複数のファイルをひとつずつ開いて確認する手間を減らすことが可能です。社内に点在している情報にまとめてアクセスしやすくなるため、必要な情報を探す時間の短縮につながるでしょう。
社内ヘルプデスクの問い合わせ対応を自動化する
RAGを使うと、社内ヘルプデスクに繰り返し寄せられる問い合わせへの一次回答を自動化できます。
たとえば、パスワードの再設定手順や申請の締切、経費の扱いなど同じ内容の質問が何度も発生しやすい項目に活用可能です。過去の問い合わせ記録やマニュアルを検索対象にすれば、関連する情報をもとにRAGが回答を作れます。
担当者は定型的な質問への対応を減らせるため、個別の判断が必要な問い合わせに時間を使いやすくなります。
顧客からの問い合わせにチャットボットで答える
RAGは、製品マニュアルやFAQをもとに、顧客からの問い合わせへ回答するチャットボットにも活用できます。問い合わせ内容に応じて関連する資料を検索し、一次回答を生成できるためです。
たとえば、製品の使い方や契約内容、よくあるトラブルへの対処方法など、あらかじめ資料にまとめられている質問への対応に向いています。担当者が毎回資料を確認して回答する必要が減るため、問い合わせ対応の効率化にもつながります。
業務を効率化して人手を減らす取り組み全般の考え方は、以下の記事で整理していますので、ぜひご覧ください。
RAGを構築する手順
RAGを構築する際は、検索に使う文書を整えたうえで、検索結果をLLMへ渡す仕組みを作ります。ここでは、ベクトル検索を使う場合を例に、次の4つの工程で説明します。
対象にする文書を選んで整える
最初に、RAGで検索対象にする文書を決めます。対象を広げすぎると整備の負担が増えるため、問い合わせが多い業務や、参照頻度の高い文書から絞り込むと進めやすくなります。
検索対象にする文書は、登録前に内容を整理しておくことも重要です。不要な情報や重複、古い内容が混ざっていると、それらが検索され誤った回答やハルシネーションの原因になることがあります。
たとえば、同じ規程の新旧版が混在している場合は、最新版のみを残しましょう。誰が文書を更新・管理するのかも決めておくと、検索対象を最新の状態に保ちやすくなります。
文書を検索しやすい大きさに区切る
長い文書は、そのまま検索対象にするのではなく扱いやすい大きさに区切りましょう。この区切りの単位をチャンクと呼びます。
文書を区切るのは、検索した内容をLLMへ渡しやすくし、質問と関連する部分を見つけやすくするためです。ひとつのチャンクに複数の話題が含まれていると、質問との関係がわかりにくくなる場合があります。
区切り方は、見出しや段落など文書の構造にあわせるのが基本です。さらに、前後のチャンクで一部の内容を重ねておくと、文章の途中で区切られても文脈を保ちやすくなります。
文書をベクトル化して検索用データベースに保存する
区切った文書は、埋め込みモデルで数値の並びへ変換します。この処理が「ベクトル化」で、文章同士の意味の近さをもとに検索するための準備です。
変換した結果はベクトルデータベースへ格納します。検索対象として登録した範囲が、RAGが外部から取得しLLMへ渡せる情報の範囲です。
分割・ベクトル化したデータは、元の文書名や該当箇所などの情報と紐づけて保存します。元の文書との対応関係を残しておけば、回答に出典を表示したり、文書の更新時に該当するデータを差し替えたりしやすくなります。
検索結果をプロンプトに組み込みLLMへ送る処理を作る
最後に、検索した情報をLLMへ渡して回答を生成する処理を作ります。質問を受け取ったら関連する文書を検索し、その内容を質問とあわせてLLMへ送る流れです。
プロンプトには、検索した資料をもとに回答するよう指示を加えます。資料に答えがない場合は無理に回答しないなど、情報が見つからなかったときの対応も決めておくことが重要です。
まずは対象文書や想定する質問を絞って試し、適切な文書を検索できているか、回答がその内容に沿っているかを確認します。問題がなければ検索対象や質問の範囲を少しずつ広げていきます。
RAG導入前に知っておきたい課題
RAGは、導入するだけで正確な回答が得られる技術ではありません。回答の質は、必要な情報を正しく検索できるか、検索対象の文書が適切に整備されているかによって大きく変わります。
さらに、社内文書や顧客情報などを扱う場合は機密情報の管理にも注意が必要です。
ここからは、RAGを導入する前に押さえておきたい主な課題を整理します。
RAG導入前に知っておきたい課題
検索の精度が回答の質を左右する
RAGでは、必要な文書を正しく検索できるかどうかが回答の質を大きく左右します。関連する情報を取り出せなければ、その内容を根拠にした回答は作れません。
検索精度は、文書の登録方法や区切り方、検索の仕組みなどによって変わります。そのため、検索対象のデータや検索方法に問題がある場合は、LLMを高性能なものへ替えても十分に改善しないことがあります。
RAGを安定して運用するには、回答だけでなく、どの文書が検索されたのかも確認しましょう。想定した情報を取り出せていなければ、検索方法の見直しが必要です。
社内文書の整備と更新に手間がかかる
RAGでは、検索対象にする文書の整備や更新に手間がかかります。文書を一度登録して終わりではなく、元の情報が変わるたびに検索対象も更新する必要があるためです。
たとえば社内規程を改訂したのに旧版が残っていると、その内容が検索され、古い情報をもとに回答する可能性があります。扱う文書が増えるほど、こうした更新や管理にかかる負担も大きくなります。
機密情報の取扱いに注意する必要がある
RAGで社内文書を扱う場合は、閲覧権限のないユーザーに機密情報や個人情報が含まれる回答が表示されないよう、アクセス範囲を適切に管理する必要があります。
そのため、ユーザーごとに参照できる情報の範囲を設定することが重要です。部門ごとに検索できる文書を分けたり、文書の閲覧権限を検索時にも反映したりしておきましょう。
また外部のAIサービスへ社内文書を送る構成では、その情報を外部へ送信してよいかも確認する必要があります。RAGを導入する際は、回答精度だけでなく情報管理の仕組みもあわせて設計することが欠かせません。
生成AIサービスを業務で使う場合の注意点は、以下の記事でも整理しています。
RAGの検索精度を高めるポイント
RAGの検索精度を高めるには、まず必要な文書を正しく取り出せているかを確認することが重要です。回答だけを見るのではなく、検索結果を確認すると、どこに原因があるのかを切り分けやすくなります。
ここからは、検索精度を高めるために確認したいポイントを順に解説します。
RAGの検索精度を高めるポイント
想定質問を使って必要な文書が検索できるか確認する
RAGの検索精度を確認するには、実際の利用を想定した質問を使って、必要な文書が検索できるかを確かめます。
質問は、実際に寄せられている内容や業務でよく聞かれるものをもとに用意します。短い質問だけでなく、条件が複数ある質問や言い回しの違う質問、表記ゆれを含む質問も混ぜておくと、実際の使われ方に近い状態で確認可能です。
回答が正しいかどうかだけではなく、回答の根拠になる文書が検索結果に含まれているかも確認します。必要な文書が出ていなければ文書の登録方法や検索方法を見直し、含まれている場合は検索順位や取得件数、不要な文書の混入を確認しましょう。
このように、回答と検索結果を分けて確認すると、どこを改善すべきか判断しやすくなります。
必要な情報を検索しやすいように文書の区切り方を見直す
必要な文書を適切に取得できない場合は、文書の区切り方を見直します。ひとつのチャンクに複数の話題が含まれていると質問との関連性が弱まり、検索されにくくなることがあるためです。
チャンクの大きさに決まった正解はありません。文書の内容や質問の細かさによって適切な区切り方は変わるため、複数のパターンを試し、同じ質問で検索結果を比較します。
また見出しや段落の途中で機械的に区切っている場合は、文書の構造にあわせて区切ることで改善することもあります。検索結果を確認しながら、必要な情報を取り出しやすい単位へ調整することが重要です。
検索方法や検索結果の絞り込みを見直す
必要な情報をうまく取得できない場合は、検索方法を見直すことも重要です。
RAGで情報を検索する方法には、文章の意味の近さをもとに探す方法や、キーワードの一致をもとに探す方法などがあります。それぞれ得意とする検索が異なるため、複数の方法を組み合わせることで、必要な情報を見つけやすくなる場合があります。
また検索結果を多めに取得したうえで、質問との関連性が高い順に並べ替え、より適切な情報をLLMに渡す方法も有効です。
検索方法を調整しても回答が改善しない場合は、プロンプトや使用するLLMなど、回答を生成する側に原因がないかも確認しましょう。
まとめ
RAGは、質問に関連する文書を検索し、その内容をもとにLLMが回答を生成する技術です。LLMを再学習しなくても、社内文書や新しい情報を回答に活用できます。
一方で、回答の質は検索精度や元データの状態に左右されます。RAGを導入すれば必ず正確な回答が得られるわけではなく、ハルシネーションのリスクも完全にはなくなりません。
導入する際は、対象文書や想定する質問を絞り、小さく試すところからはじめると進めやすくなります。検索結果と回答をそれぞれ確認することで、改善すべき箇所も見つけやすくなります。
また、機密情報を扱う場合は、誰がどの文書を参照できるのかをあらかじめ決めておくことが重要です。文書の更新方法や担当者も含め、継続して運用できる仕組みを整えておく必要があります。
よくある質問
RAGは何と読みますか?
RAGは「ラグ」と読みます。Retrieval-Augmented Generationの略で、日本語では検索拡張生成と訳されます。
社内の文書や資料で扱う場合に確実なのは、初出での正式名称と訳語の併記です。Retrieval-Augmented Generation(検索拡張生成)と書いておけば、認識のずれが生まれづらくなります。
RAGとLLMの違いは何ですか?
LLMは文章を生成するモデルで、RAGはそのLLMに外部の情報を渡して回答に活用する仕組みです。どちらか一方を選ぶものではなく、RAGでは回答を作るためにLLMを使います。
大きな違いは、回答の根拠となる情報です。LLM単体では、学習していない社内文書や、学習後に公開された新しい情報を自ら参照することはできません。
一方、RAGは質問に関連する文書をその都度検索し、その内容をLLMへ渡して回答を生成します。検索対象の文書を更新すれば、LLMを再学習しなくても、新しい情報を回答に反映できます。
詳しくは、記事内「LLMやファインチューニング・従来の検索との違い」をご覧ください。
参考文献
▶︎ 独立行政法人情報処理推進機構 産業サイバーセキュリティセンター「テキスト生成AIの導入・運用ガイドライン」
