Mímisbrunnr知恵の泉

← ローカルLLM 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:埋め込みモデルのローカル運用 | 原理:検索拡張生成(機械学習)

要点(結論先出し)

概念 ── なぜRAGか

LLMの知識は学習時点で固定。最新情報や手元の私的文書は知りません。微調整で覚えさせるのは重く、更新も大変。RAGは実行時に関連文書を渡すだけなので、知識の追加・更新が軽い。原理は機械学習へ → 検索拡張生成

仕組み ── 6段のパイプライン

flowchart LR
  DOC["文書(PDF・md等)"] --> CH["チャンク分割"]
  CH --> EMB["埋め込みモデルでベクトル化"]
  EMB --> DB["ベクトルDBに保存"]
  Q["ユーザーの質問"] --> QE["質問もベクトル化"]
  QE --> SR["近いチャンクを検索"]
  DB --> SR
  SR --> CTX["文脈として差し込む"]
  CTX --> GEN["生成モデルが回答"]

**インデックス作成(取り込み〜保存)問い合わせ(質問〜生成)**の2フェーズに分かれます。

最小実装の流れ(対応lab)

  1. 文書をチャンク(数百トークン程度+重なり)に切る
  2. 各チャンクを埋め込み(→ 埋め込みモデルのローカル運用
  3. ベクトルをDBに保存(→ ローカルベクトルDB
  4. 質問を埋め込み、コサイン類似度で近いチャンクを取得
  5. 取得チャンクをプロンプトに入れて生成(→ OpenAI互換API

コサイン類似度の計算例は対応lab rag_local.py で実行確認できます(cp932安全)。

チャンク設計の勘所

なぜそうするか

RAGは知識の更新コストを実行時に移すことで、再学習なしに「最新・私的なデータで答える」を実現します。さらにローカルで完結させれば、検索対象の文書すら外に出ない。微調整=様式、RAG=知識と役割分担すると設計が綺麗になります(→ 微調整の選択肢(フル・LoRA・QLoRA))。

⚠️ よくある落とし穴

対応lab

関連