Mímisbrunnr知恵の泉

← ローカルLLM 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:OpenAI互換API | 原理:検索拡張生成(機械学習)

要点(結論先出し)

概念 ── ベクトル化は「意味の座標」を与える

埋め込みは、似た意味の文を近い位置に配置するようテキストをベクトルにします。これにより「キーワード一致」ではなく意味で検索できる。RAG(第7章)の土台であり、原理は機械学習へ → 検索拡張生成

生成モデルとは目的が違うので、別のモデルを使い分けるのが普通です(例:nomic-embed-textmxbai-embed-largebge 系など・要最新確認)。

動くコード(埋め込みAPI・Python)

from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="local")

texts = ["ローカルLLMはオフラインで動く", "犬は散歩が好きだ"]
resp = client.embeddings.create(
    model="nomic-embed-text",   # 埋め込み用モデル。要最新確認
    input=texts,
)
vecs = [d.embedding for d in resp.data]
print("ベクトル次元:", len(vecs[0]))   # 例: 768 など

類似度はコサイン類似度で測ります(計算例は対応lab)。

仕組み ── 生成と埋め込みは別ライン

flowchart LR
  DOC["文書・クエリ"] --> EMB["埋め込みモデル"]
  EMB --> VEC["ベクトル"]
  VEC --> DB["ベクトルDBに保存・検索"]
  DB --> CTX["近い文書を取り出す"]
  CTX --> GEN["生成モデルへ文脈として渡す"]

埋め込み=検索の足回り、生成=回答。2つを分けて運用するのがRAGの基本形です(→ ローカルRAGの構成)。

運用の勘所

なぜそうするか

意味検索を外部APIに投げると、検索対象の文書まで外に出ます。埋め込みをローカルに置けば、文書もクエリも一切外に出さずにRAGが成立する。プライバシー要件の強い用途(社内文書・個人ノート)で、埋め込みのローカル化は生成のローカル化と同じくらい重要です。

⚠️ よくある落とし穴

対応lab

関連