OllamaのEmbeddingモデルを使う方法(Python + Chroma DB)

この記事では、Ollamaで埋め込み(Embedding)モデルを使い、Python + Chroma DBでベクトル検索やRAGに応用する方法を試してみます。

前回の記事ではChroma DB内部の埋め込み計算を利用しましたが、Ollamaを活用すれば外部モデルの管理が楽になります。

pareido.jpPythonでRAGを実装:Ollama(llama3.1)+Chroma DBで“検索して答える” – パレイドPythonからRAGを試す最短ルートとして、Ollamaのllama3.1とChroma DBで「ユーザー側検索→LLM生成」を実装します。動く最小コードと、つまずきやすいA…pareido.jp

本記事を読むことで、ローカル環境でOllamaのEmbeddingモデルを動かし、Chroma DBにベクトルを保存・検索する基本パイプラインが構築できます。

OllamaのEmbeddingモデルとは

OllamaはLLM実行環境で、Embeddingに特化した軽量モデルも提供しています。

Embeddingとはテキストを数値ベクトルに変換する処理で、類似度検索やRAG(Retrieval-Augmented Generation)に使います。

Ollama公式でもEmbeddingのサポートがあり、CLI・Python・REST APIから呼び出せます。 Embedding models · Ollama Blog

公式ドキュメントでは推奨モデルとして embeddinggemmaqwen3-embeddingall-minilm などが紹介されています。

ここではコンテキスト長に余裕のあるnomic-embed-textを例にとって説明します。

まずはローカルのOllamaにEmbeddingモデルをダウンロードします。ターミナルで次のようにします 例では nomic-embed-text を使いますが、違うモデルを試す場合は適宜読み替えてください。

ollama pull nomic-embed-text

Ollamaのembeddingモデルを使って、Chroma DBの検索を実行してみましょう。

Embeddingモデルを準備する

下記はPythonでOllamaとChroma DBを連携させる例です。

ポイントは2つで、コレクション生成時の埋め込みをOllamaで計算しておくことと、検索時にもOllama経由で埋め込みを計算してChroma DBの検索に用いることです。ここが理解できればコーディング自体は難しくはありません。

import ollama
import chromadb
from chromadb.config import Settings

# Ollamaクライアントの初期化
ollama_client = ollama.Client()

# Chroma DB の初期化
chroma_client = chromadb.Client(Settings())
collection = chroma_client.get_or_create_collection(name="sample_texts")

texts = [
    "大吉:今日は新しい挑戦が実を結びやすい日です。思い切った行動が良い流れを呼び込みます。",
    "大吉:迷っていた決断に追い風が吹きます。直感を信じて動くと成果につながります。",
    "大吉:周囲の協力を得やすい運気です。積極的に声をかけると道が開けます。",
    テストデータを列挙...
]

# コレクションにデータを追加(IDと埋め込みを明示的に指定)
if texts:
    ids = [f"doc_{i}" for i in range(len(texts))]
    embed_resp = ollama.embed(model="nomic-embed-text", input=texts)
    collection.add(documents=texts, ids=ids, embeddings=embed_resp.embeddings)

# 検索クエリ
query = "大吉"

# クエリの埋め込みを作成して類似検索
q_embed_resp = ollama.embed(model="nomic-embed-text", input=query)
query_embedding = q_embed_resp.embeddings[0]
results = collection.query(
    query_embeddings=[query_embedding],
    n_results=2
)

print(query)
for doc in results.get("documents", [[]])[0]:
    print(doc)
大吉 
大吉:周囲の協力を得やすい運気です。積極的に声をかけると道が開けます。 
吉:計画通りに物事が進みやすい日です。基本を大切にしましょう。

「大吉」が含まれる文章が類似度順に返されましたが。「吉」が含まれてしまっています。
恐らく「大」「吉」と分けて解釈されているためで、実用時はテキスト処理のチューニングが必要です。

Chrom DB付属の例との違い

前回の記事の例は、Chromaが内部で用意したEmbeddingモデルをそのまま利用する構成でした。
Chromaはデフォルトで`all-MiniLM-L6-v2`を使います。

一方、今回のOllama Embeddingを使う構成では、Embedding生成をLLMランタイム側(Ollama)に明示的に切り出し、モデル選択や再利用を制御できる点が違いです。
その結果、RAG全体をローカルLLM基盤として統一しやすく、将来的なモデル差し替えや精度調整が容易になります。

まとめ

この記事では、OllamaのEmbeddingモデルをPythonから利用し、Chroma DBでベクトル検索を行う方法を解説しました。

Chroma DBから外部Embeddingモデルを活用することで、RAGや類似度検索の精度向上が期待でき管理も楽になります。

前回の記事で紹介したRAGの全体構成に、このEmbeddingモデルを組み込むことで、より高度な情報検索と生成を試してみてください。

パレイドOllamaをCLIで使う:上級者向け導入ガイドこの記事のポイント(30秒で要点) OllamaをCLI(コマンドライン)で使う方法を解説。GUIでは触れられない高度な操作が可能 インストール → 動作確認… パレイドVSCodeでOllamaをローカル実行|Continue拡張でコード補完・チャット(config.yaml対応)こんにちは、パレイド技術部の夏目です。 クラウドの大型 LLM がコーディング支援で優位なのは、2026 年の今も変わりません。ただ「手元のマシンだけ… パレイドRAG実装をLangChainでリファクタリングする方法とポイント既存のRAG実装を拡張しやすくするために、LangChainを使った実装方法と注意点を解説します。
▶ 関連動画 · YOUTUBE
━━ 観るのを再開 ━━
前の記事を読む
同部門 · PythonでRAGを実装:Ollama(llama3.1)+Chroma DBで“検索して答える”
動画を観る
YouTube
次の記事を読む
同部門 · OllamaのFunction CallingでRAGを実装する方法(Python+Chroma DB)
━━ 他の観測領域 ━━
TECH · 技術部
ファミリーベーシック 機械語対応(1)|なぜ機械語か
PHIL · 思想部
技術部 試験放送 総括 ── 3つの BGM 生成エンジンを実配信で比べて。速さの SA3、バランスの Turbo、音質の XL
FRONT · 辺境部
【スーパーマリオ256W】世界11を歩く — ファミコンのバグ面 11-1〜11-4