0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGとは何か?AIが「知らないこと」を知る仕組み

0
Posted at

はじめに

AIに「今日のニュースを教えて」と聞いても、正確に答えられないことがあります。なぜでしょうか?

大規模言語モデル(LLM)は、学習データをもとに作られています。学習が終わった後に起きた出来事や、社内の機密情報、専門的なドキュメントはモデルの中に含まれていません。 そのため、AIは最新情報や専門知識について「ハルシネーション(もっともらしい嘘)」をついてしまうことがあります。

👤 ユーザー                    🤖 LLM(学習データ: ~2023年)
    │                               │
    │ 「今日の株価は?」 ──────────▶ │
    │                               │ 最新情報なし…
    │ ❌「たしか○○円です」 ◀─────── │
         (ハルシネーション)

この問題を解決するのが RAG(Retrieval-Augmented Generation) です。


RAGとは?

RAGは「検索拡張生成」と訳される技術です。名前の通り、AIが回答を生成する前に関連情報を「検索」し、その情報を使って回答を「生成」します。

📚 イメージ:「試験前に教科書を一切見ずに答える学生(通常のLLM)」vs「試験中に教科書を参照しながら答える学生(RAG)」

RAGを使ったAIは、回答の根拠となる情報をリアルタイムで参照できるため、最新情報・社内情報・専門知識 に基づいた正確な回答が可能になります。


RAGの仕組み:3つのステップ

RAGは大きく3つのステップで動いています。

ステップ1:インデックス作成(準備)

参照させたいドキュメント(社内マニュアル・FAQ・論文など)を細かく分割し、「ベクトル」という数値データに変換して「ベクトルストア」に保存します。

📄 社内マニュアル ┐
📄 FAQ           ├─▶ テキスト分割 ─▶ ベクトル化(Embedding) ─▶ 🗄 ベクトルストアに保存
📄 最新ニュース   ┘

ステップ2:検索(Retrieval)

ユーザーが質問すると、その質問もベクトルに変換し、ベクトルストアの中から意味的に近いドキュメントを取り出します。キーワード検索とは異なり「似た意味」で検索できるのがポイントです。

ステップ3:生成(Generation)

取り出したドキュメントをLLMへのプロンプトに組み込み「この情報を参考に答えてください」と指示します。AIはその情報を元に、正確な回答を生成します。

全体のフローをまとめると:

👤 「返品期限は?」
    │
    ▼
① 質問をベクトル化して 🗄 ベクトルストアを検索
    │
    ▼
② 関連ドキュメントを取得(例:「返品は30日以内」)
    │
    ▼
③ 「質問 + 関連ドキュメント」を 🤖 LLM に渡す
    │
    ▼
✅ 「購入後30日以内に返品が可能です」

簡単なコード例(Python)

LangChainというライブラリを使った、シンプルなRAGの実装例です。

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA

# 1. 参照させたいドキュメントを用意
documents = [
    "当社の返品ポリシーは購入後30日以内です。",
    "サポートの受付時間は平日9時〜18時です。",
    "製品の保証期間は1年間です。",
]

# 2. ベクトル化してベクトルストアに保存
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(documents, embeddings)

# 3. RAGチェーンを作成
llm = ChatOpenAI(model="gpt-4o-mini")
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever()
)

# 4. 質問する
answer = qa_chain.invoke("返品はいつまで可能ですか?")
print(answer["result"])
# → "購入後30日以内に返品が可能です。"

わずか20行ほどのコードで、ドキュメントを参照しながら回答するAIが作れます。


RAGの活用例

RAGはさまざまな場面で実用されています。

活用例 概要
💬 カスタマーサポートbot 社内のFAQや製品マニュアルを参照させ、規約に基づいた正確なサポートを実現
🏢 社内情報検索 膨大な社内ドキュメントから「あの規程はどこ?」に即答できる検索システム
📰 最新情報対応bot ニュースや法改正情報をストアに追加するだけで最新情報に対応
⚕️ 医療・法律の専門分野 専門論文や判例を参照することでハルシネーションのリスクを低減

RAGとファインチューニングの違い

よく比較される「ファインチューニング」との違いを整理します。ファインチューニングはモデル自体を追加学習させる手法で、特定のスタイルや口調を「体に染み込ませる」イメージです。一方RAGは、モデルはそのままで「参考書を持ち込める状態」にするイメージです。

ファインチューニング RAG
モデルへの変更 あり(再学習が必要) なし
情報の更新 再学習のたびにコストが発生 データを追加するだけ
回答の根拠提示 難しい 参照元のドキュメントを示せる
導入コスト 高い 比較的低い
向いている場面 スタイル・口調・専門知識の習得 最新情報・社内情報の参照

情報を頻繁に更新したい場合や、回答の根拠を明示したい場合は、RAGのほうが適しています。


まとめ

RAGは「LLMの知識の限界を、検索で補う」技術です。モデル自体を変えることなく、社内情報や最新情報を扱えるようになるため、ビジネスへの応用がしやすいのが大きな特徴です。

AIを「使う」だけでなく「自分のデータと組み合わせる」第一歩として、RAGはとても有力な選択肢です。ぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?