RAGは「動く」と
「正しく答える」の間に谷がある。
社内文書を検索して、その内容をもとにLLMに答えさせるのがRAG(検索拡張生成)です。作るだけなら簡単。でも、答えを外す。このページでは、外す理由と直し方を図で確かめられます。図の数値と文書は、しくみを説明するための架空の例です。
手を動かして作り切りたい人へ:Udemy講座「RAG実践|ローカルLLMで社内文書QAを作る」
RAGとは:LLMに「社内の資料を見ながら」答えさせる
LLMは、あなたの会社の規程を知りません。RAGは、質問に関係する文書を先に検索してLLMに渡し、その内容だけを根拠に答えさせるしくみです。
LLMだけ
「一般的には1食あたり数百円を補助する企業が多いです…」
→ もっともらしいが、あなたの会社の規程ではない
RAG
規程の該当する条文を検索して読み、その金額で答える。
→ 出典の条文名も示せる
答え方の違いを示すための例です。
RAGとファインチューニングの違い
| RAG | ファインチューニング | |
|---|---|---|
| 変えるもの | 参照する知識 | モデルの振る舞い(形式・口調) |
| 得意 | 社内固有・最新の情報、出典の提示 | 決まった形式への変換、文体 |
| 更新 | 文書を入れ替えるだけ | 学習し直しが必要 |
ローカルで作る理由:LLMも検索もPCの中で動かせば、機密文書を外部に送らずに済みます。
埋め込み:文章を「意味の座標」にして、近いものを探す
検索の中心は埋め込み(Embedding)です。文章を数百〜千次元の数値の並び(ベクトル)に変え、向きが近いほど意味が近いとみなします。近さはコサイン類似度で測ります。下の図は、それを2次元に簡略化したイメージです。
コサイン類似度の順位(イメージ)
図の位置と数値は、しくみを説明するための架空の例です。
チャンク分割:切り方しだいで、答えが「見つからない」
文書はそのままでは長すぎるので、小さな塊(チャンク)に分けて検索します。切り方が悪いと、見出しと数字が別の塊に分かれ、正しい答えを含む塊が検索に引っかかりにくくなります。
文書は説明用に作った架空の規程の一部です。
検索が悪いのか、生成が悪いのか:まず切り分ける
素朴なRAGを評価用の質問で測ると、「検索は正しい条文を取ってきているのに、回答が外れる」ことがよくあります。では、検索を「完璧」にしたら直るのでしょうか。説明用の架空の数値で確かめます。
質問の種類ごとの正答率(説明用の例)
説明用の例(架空の数値)。評価用の質問を種類に分けておくと、どこが弱いかが見えます。
プロンプトは、ルールを1つずつ足して測る
原因が生成側だと分かったら、プロンプトにルールを1つずつ足して、そのたびに測ります。押すと、足したルールと質問の種類ごとの変化が見られます(説明用の例・架空の数値)。
ハイブリッド検索・リランキングは効く? 測って決める
よく勧められる検索の改善策を、同じ質問で比べるとどう見えるか。説明用の架空の数値で、指標を切り替えて比べてみてください。
Recall@k:正しい条文が上位k件に入った割合。MRR:正しい条文が何位に出たか(1位なら1)。秒:1問あたりの処理時間。いずれも説明用の架空の値です。実際の値はデータや機器によって変わります。
このページの図・数値・文書は、しくみを説明するための架空の例です。講座では、外部のAI APIを使わずに、環境構築から社内文書QAの完成までを一通り手を動かして作ります。
- イントロダクション:RAGとは何か、なぜローカルか、完成デモ
- 環境構築:Ollama・Qwen・Python環境と動作確認
- Embeddingの基礎:ベクトル化、コサイン類似度、日本語モデルの比較
- ベクトルDB構築:前処理・チャンク設計・ChromaDBへの格納
- 検索パイプライン:LangChain / LCEL でRAGを組み上げる
- 精度改善とチューニング:評価セット、ハイブリッド検索、リランキング
- キャップストーン:社内文書QAシステムを完成させる
- 補講:運用・更新・スケール
・Python の基本構文(変数・関数・for文・import)が読み書きできること
・ターミナルでコマンドを入力した経験
・メモリ16GB以上のPC(Apple Silicon の Mac を推奨。Windows・Linux でもコードは動作)
・空きストレージ 15GB程度
価格・プレビューの範囲・最新の内容は、Udemy の講座ページでご確認ください。