はじめに
ChatGPTのようなLLMは便利ですが、「自分の資料を元に回答させる」ことはできません。
この問題を解決するのにRAG(Retrieval Augmented Generation)という技術があります。
今回は「そもそもRAGとは何か」と自分なりに理解した内容を説明します。
対象者
- RAGという言葉を見聞きしたことがある人
- AIにローカル情報での回答をしてほしいと思っている人
RAGとは
RAG(Retrieval-Augmented Generation) は、日本語にすると「検索拡張生成」です。
日本語にしてもなんのことだかわからないですねー(笑)
一行に要約すると
「質問に答える前に、関連する情報を手元の資料から探してきて、答えさせる」
これに集約されます。
通常のLLM
通常のLLMは、学習済みの知識だけで回答を生成します。
イメージとしては、本をたくさん読んだ人に「その場で」質問するようなものです。
RAG
RAGは、事前に関連ページを開いてから答えてもらうイメージです。
手順として、資料をベクトルDBにおとす 事前準備 が必要になります。
検索対象としたい独自ドキュメントを小さく切り分け(チャンク化)、AIが検索しやすい数値データ(ベクトル)に変換してデータベースに保存します。この作業は最初に一度だけ行います。
今回試してみてわかったのですが、このチャンクの質が検索結果の質に非常に大きな影響を及ぼします。
問い合わせの際はユーザーの質問をベクトルに変換し、データベースから意味的に近い文章を取り出します。その関連文書と質問をセットでAIに渡すことで、独自ドキュメントに基づいた回答が得られます。
事前準備
問い合わせフロー
なぜRAGが必要か
LLMの根本的な限界
LLMには、生まれながらの弱点があります。
1. 学習データのカットオフ問題
モデルは特定の日付までの情報しか学習していません。昨日のニュースも、社内の最新マニュアルも、モデルは知る由がありません。
2. ハルシネーション(幻覚)
知らないことを聞かれたとき、LLMは「知らない」と言う代わりに、もっともらしい嘘を自信満々に話すことがあります。これをハルシネーション(幻覚)と呼びます。
3. 社内・プライベートな情報を持たない
あなたの会社の規定、プロジェクトのドキュメント、個人のメモ――そういったプライベートな情報は、公開モデルには一切含まれていません。
RAGはこれをどう解決するか
| 課題 | 通常のLLM | RAG |
|---|---|---|
| 最新情報 | 学習時点までしか知らない | 自前のデータを随時更新できる |
| ハルシネーション | 嘘をつく可能性がある | 根拠テキストを明示できる |
| 社内情報 | 持っていない | 社内文書を検索対象にできる |
RAGでできること
私は、ドキュメントQAを構築したくて挑戦中です。なかなか難しい所はあります。
ドキュメントQA(問い合わせ対応)
PDF・Markdown・テキストファイルなどを読み込ませて、「〇〇の仕様はどこに書いてありますか?」「△△の手順を教えてください」といった質問に答えられます。
社内ナレッジベースの構築
議事録・マニュアル・Slack/Notionのエクスポートなど、散在した情報をまとめて検索対象にできます。
根拠を示した回答
「この回答は○○ページの△△という記述に基づいています」という出典提示が可能です。信頼性が重要なビジネス用途に向いています。
まとめ
- RAGは「検索して、その結果をAIに渡す」仕組み
- LLMの弱点(ハルシネーション・知識のカットオフ・社内情報の欠如)を補える
- 万能ではなく、推論・集計・リアルタイム処理は苦手
次回はもうすこし技術的な深堀りをしようと思います。