blog
AIブログ
ollama 使い方 python完全ガイド|インストールからRAG実装まで
監修
河合 継(クリスタルメソッド株式会社 代表取締役)
AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針

ollama 使い方 python の全体像と前提知識
Ollamaはローカル環境でオープンウェイトLLMを動かすための実行ランナーであり、本体(ローカル実行)は無料・オープンソースで提供されている。Pythonから利用する場合、公式が提供するollamaパッケージ(PyPI)を使う方法と、Ollamaが内部的に公開するREST APIを直接叩く方法の2つがある。前者は型ヒントが整備されており、非同期処理やストリーミングも数行で書けるため、ほとんどの実装用途では公式パッケージを選ぶのが合理的だ。
Ollamaが動かすモデルはOllama自身が開発するものではなく、ollama.com/libraryで配布されるQwen3・gpt-oss・DeepSeek・Gemma 4などのオープンウェイトモデル群である(Ollama公式ライブラリ、2026-06-08確認)。モデルの選択はユースケースと手元のGPUメモリによって決まる。8GB GPU環境であればllama3.2:3bやqwen3:0.6b〜qwen3:8bが現実的な選択肢だ。24GB以上であればqwen3:30bやgpt-oss:20bが推論性能と実用性のバランスに優れる。
OllamaのPython連携を本格活用する前に、関連する基盤知識としてPythonによる機械学習の基礎を押さえておくと、モデルの選択基準や推論コストの感覚が身につく。また、Ollamaそのものの概念や全体像を掴みたい場合はOllamaの概要解説記事を先に読むことを勧める。
ollama 使い方 python|インストールと基本的なチャット呼び出し
環境構築
まずOllama本体をインストールし、サーバーを起動する。macOS・Linux・Windowsいずれも公式サイト(ollama.com)からバイナリを取得できる。詳細な手順はOllamaセットアップ手順の解説にまとめている。インストール後、以下でモデルを取得しサーバーが起動していることを確認する。
# モデルを取得(初回のみ・例: qwen3:8b)
ollama pull qwen3:8b
# サーバー起動確認(macOSはアプリ起動で自動起動)
ollama serve
次にPython側のパッケージを導入する。
pip install ollama
PyPIで公開されている公式パッケージ(ollama)はhttpxをベースに実装されており、同期・非同期の両インターフェースを提供する。
最小構成のチャット呼び出し
import ollama
response = ollama.chat(
model="qwen3:8b",
messages=[
{"role": "user", "content": "Pythonでフィボナッチ数列を生成する関数を書いてください。"}
]
)
print(response["message"]["content"])
ollama.chat()の戻り値は辞書形式で、response["message"]["content"]に生成テキストが入る。modelパラメータにはollama listで確認できるローカルモデル名をそのまま指定する。
ストリーミングレスポンス
大型モデルや長い生成では、ストリーミングを有効にすることでUXと実装の両面でメリットがある。
import ollama
stream = ollama.chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "Ollamaの仕組みを説明してください。"}],
stream=True
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
stream=Trueを渡すとジェネレータが返り、チャンクごとに逐次処理できる。FastAPIやWebSocketと組み合わせたサーバー実装においてもこのパターンが基本になる。
非同期処理(AsyncClient)
import asyncio
import ollama
async def main():
client = ollama.AsyncClient()
response = await client.chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "非同期処理のメリットは?"}]
)
print(response["message"]["content"])
asyncio.run(main())
FastAPIのような非同期フレームワークとの統合ではAsyncClientを使い、イベントループをブロックしない設計にする。
主要メソッドと用途別パターン
generate vs chat の使い分け
ollama.generate()はシングルターンのプロンプト補完用、ollama.chat()はマルチターン会話管理用である。RAGパイプラインやエージェントではチャット履歴をリスト形式で保持するため、chat()を基本とする。
import ollama
# generate: 単純なテキスト補完
resp = ollama.generate(model="qwen3:8b", prompt="機械学習とは")
print(resp["response"])
# chat: マルチターン会話
history = []
def chat_with_memory(user_input: str, model: str = "qwen3:8b") -> str:
history.append({"role": "user", "content": user_input})
resp = ollama.chat(model=model, messages=history)
assistant_msg = resp["message"]
history.append(assistant_msg)
return assistant_msg["content"]
print(chat_with_memory("Pythonのデコレータとは何ですか?"))
print(chat_with_memory("具体的なコード例を見せてください。"))
埋め込みベクトルの取得
RAGやセマンティック検索を構築する際はollama.embeddings()でベクトルを取得する。
import ollama
result = ollama.embeddings(
model="nomic-embed-text",
prompt="Ollamaを使ったRAGシステムの実装方法"
)
vector = result["embedding"]
print(f"次元数: {len(vector)}") # nomic-embed-text は768次元
ツール呼び出し(Function Calling)
Ollama 0.30系ではツール呼び出し(Function Calling)が整備されており、外部関数をLLMに渡すパターンが書きやすくなっている。
import ollama
import json
def get_current_weather(location: str) -> str:
# 実際の実装では気象APIを呼ぶ
return json.dumps({"location": location, "temperature": "22°C", "condition": "晴れ"})
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "指定された都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "都市名(例: 東京)"}
},
"required": ["location"]
}
}
}
]
messages = [{"role": "user", "content": "東京の天気を教えて"}]
resp = ollama.chat(model="qwen3:8b", messages=messages, tools=tools)
if resp["message"].get("tool_calls"):
for tool_call in resp["message"]["tool_calls"]:
fn_name = tool_call["function"]["name"]
fn_args = tool_call["function"]["arguments"]
result = get_current_weather(**fn_args)
messages.append({"role": "tool", "content": result})
final = ollama.chat(model="qwen3:8b", messages=messages)
print(final["message"]["content"])
モデルの管理操作
import ollama
# ローカルモデル一覧
models = ollama.list()
for m in models["models"]:
print(m["name"], m["size"])
# モデルのプル
ollama.pull("gemma4:12b")
# モデル情報の確認
info = ollama.show("qwen3:8b")
print(info["modelfile"])
主要モデル選択ガイドとトレードオフ比較
Ollamaライブラリで配布されているモデルはユースケース・VRAM・レイテンシの要件によって選択が変わる。2026年6月時点のOllama公式ライブラリ(ollama.com/library)に基づく比較を以下に示す。
| モデル | パラメータ | 主な用途 | 推奨VRAM | 特記事項 |
|---|---|---|---|---|
qwen3:8b |
8B | 汎用・RAG | 8GB | 最人気級(30.4M+ pulls)、日本語対応 |
gpt-oss:20b |
20B | 推論・コーディング | 16GB〜 | OpenAIオープンウェイト、推論強度調整可 |
deepseek-r1:14b |
14B | 推論・数学 | 12GB〜 | 87.1M pulls、思考ステップを出力 |
gemma4:12b |
12B | ビジョン・マルチモーダル | 12GB〜 | vision+tools+thinking、最新世代 |
qwen3-coder:30b |
30B | コーディング | 24GB〜 | agenticコーディング向け最新世代 |
llama3.2:3b |
3B | 軽量・エッジ | 4GB | 旧世代だが低VRAM環境向け実績あり |
nomic-embed-text |
— | 埋め込みベクトル | 4GB | RAG・セマンティック検索用途 |
モデル名・パラメータ数はOllama公式ライブラリ(ollama.com/library、2026-06-08確認)に基づく。VRAMはQ4量子化を前提とした目安であり、実際の消費量はコンテキスト長によって増減する。
学術機関・研究機関での利用実績
独立行政法人日本原子力研究開発機構(JAEA)が2025年に公開した技術報告書「スーパーコンピュータを用いたオンプレミス生成AI基盤の構築と展開」(JAEA-Technology-2025-017)では、Ollamaをオンプレミス環境のLLM実行基盤として採用した事例が報告されている。また、北陸大学の研究報告(hokuriku.repo.nii.ac.jp)では、Ollamaを用いたローカルLLMによるレポート自動採点システムの構築が論じられており、外部APIへのデータ送信を避けるプライバシー要件を満たす手段としてOllamaが選択されている。
これらの事例が示すように、データをローカルに閉じたまま推論できる点がOllamaの学術・業務利用における主な採用動機になっている。
RAGパイプラインとLangChain統合の実装パターン
シンプルなRAG構成(Chromadb + Ollama)
pip install chromadb langchain-community langchain-ollama
from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document
from langchain_core.runnables import RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
# ドキュメントの準備
docs = [
Document(page_content="OllamaはローカルでオープンウェイトLLMを実行するツールです。"),
Document(page_content="Pythonからはollama.chat()で呼び出せます。"),
Document(page_content="ストリーミングはstream=Trueで有効化できます。"),
]
# 埋め込みとベクトルストアの構築
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
# LLMとプロンプト
llm = ChatOllama(model="qwen3:8b")
prompt = ChatPromptTemplate.from_template(
"以下のコンテキストを使って質問に答えてください。\n\nコンテキスト: {context}\n\n質問: {question}"
)
# チェーンの組み立て
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
)
answer = chain.invoke("Ollamaのストリーミングはどうやって使いますか?")
print(answer.content)
テキストマイニングや自然言語処理のパイプラインをPythonで構築している場合は、Pythonによるテキストマイニングの実装解説と組み合わせて参照すると、前処理からRAGまでの設計が一貫する。
OpenAI互換APIとしての使用
OllamaはOpenAI互換エンドポイント(http://localhost:11434/v1)を提供するため、既存のOpenAIクライアントコードをほぼそのまま流用できる。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # ローカルのため任意の文字列でよい
)
response = client.chat.completions.create(
model="qwen3:8b",
messages=[{"role": "user", "content": "Ollamaの互換APIについて説明して"}]
)
print(response.choices[0].message.content)
このパターンは、OpenAI APIを使う既存プロダクトのモデルバックエンドをローカルOllamaに切り替える際の移行コストを最小化する。ただし、OpenAI固有の機能(一部のfinishing_reasonや課金メタデータ等)はローカルでは再現されない点に注意が必要だ。
Ollamaで実装するうえでの限界とデメリット
Ollamaは優れたローカル実行環境だが、いくつかの制約を事前に把握しておく必要がある。
- ハードウェア依存: 高精度推論には相応のGPUが必要であり、CPUのみの環境では実用的な速度が出ないモデルが多い。70B以上のモデルは民生用GPUでは量子化前提でも動作が重い。
- モデル更新の管理コスト: クラウドAPIと異なり、モデルの更新・バージョン管理は手動で行う必要がある。
ollama pullの実行や古いモデルの整理は運用負荷になる。 - スケールアウトの難しさ: 単一サーバーへのトラフィック集中には弱い。並列リクエストが多い本番環境ではOllama Cloudや別のホスト型推論サービスを検討する必要がある。
- マルチモーダル対応の限定性: ビジョン対応モデル(Gemma 4等)はサポートされているが、音声・動画入力などには対応していない。
これらのトレードオフを踏まえたOllamaと他サービスの比較はOllama比較記事に詳述している。料金面の判断材料としてはOllama料金体系の解説も参照されたい。
本番利用・応用実装に向けた補足事項
Ollama Cloud との使い分け
Ollama本体はローカルで無制限に利用できるが、2026年現在は「Ollama Cloud」としてホスト型推論サービスも提供されている(Ollama公式pricing、2026-06-08確認)。プランは以下の3種類で固定サブスク制であり、従量の超過課金は発生しない設計とされている。
- Free ($0): 同時1モデル、軽量利用向け
- Pro ($20/月 または $200/年): 同時3モデル、Free比50倍のクラウド利用枠
- Max ($100/月): 同時10モデル、常時稼働エージェント等の重負荷向け
ローカルGPUが不足している環境や、チームで共有したいケースではCloud Proが現実的な選択肢になる。なお「Ollama Turbo」という旧称は現在使われておらず、現行の正式名称は「Ollama Cloud」である。
環境変数とカスタマイズ
OllamaサーバーのエンドポイントはデフォルトでTCP 11434を使うが、OLLAMA_HOST環境変数で変更可能だ。リモートサーバー上のOllamaに接続する場合は以下のように設定する。
import ollama
# リモートサーバーへの接続
client = ollama.Client(host="http://192.168.1.100:11434")
response = client.chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "リモートからの接続テスト"}]
)
print(response["message"]["content"])
深層学習との接続点
OllamaはGGUF形式のモデルをllama.cppで実行するアーキテクチャを基本としており、PyTorchのモデルを直接動かすわけではない。自前で学習したモデルをOllamaで実行したい場合は、GGUF変換を経る必要がある。深層学習の実装基盤を学ぶには深層学習の実装解説や強化学習の実装解説も参考になる。また、Pythonの機械学習ライブラリ全般についてはPython機械学習の推薦書籍まとめを参照してほしい。
弊社DeepAIにおけるローカルLLM活用
弊社クリスタルメソッドが開発するDeepAIは、実在の人物の容姿・表情・声・振る舞いをデジタル空間で再現するバーチャルヒューマン/AIアバターソリューションであり、リップシンク・表情生成・音声合成・対話AIにRAGを組み合わせて接客・研修・広報等の用途に活用されている。このようなバーチャルヒューマンの対話AIバックエンドにおいても、Ollamaによるローカル推論はユーザーの会話データをオフプレミスに出さない要件を満たす有力な選択肢になる。
まとめ:ollama 使い方 pythonの実装判断チェックリスト
pip install ollamaで公式パッケージを導入し、ollama.chat()から始める- ストリーミングは
stream=True、非同期はAsyncClientで対応する - RAGや埋め込みには
ollama.embeddings()とnomic-embed-textを組み合わせる - 既存のOpenAI APIコードはbase_urlを変更するだけでOllamaに向けられる
- モデル選択はVRAM・用途・レイテンシ要件の三軸で決める
- 本番スケールや共有利用が必要になった時点でOllama Cloudへの移行を検討する
Ollamaの最新情報やモデルの変化は速い。本記事の情報は2026年6月時点のものであり、モデル名・バージョン・料金は公式ドキュメントで最新の状態を確認することを強く勧める。
参考文献
- Ollama 公式ライブラリ: https://ollama.com/library(2026-06-08確認)
- Ollama 公式料金ページ: https://ollama.com/pricing(2026-06-08確認)
- Ollama GitHub: https://github.com/ollama/ollama(2026-06-08確認)
- Ollama 公式ブログ: https://ollama.com/blog(2026-06-08確認)
- JAEA技術報告「スーパーコンピュータを用いたオンプレミス生成AI基盤の構築と展開」(JAEA-Technology-2025-017): https://jopss.jaea.go.jp/pdfdata/JAEA-Technology-2025-017.pdf
- 北陸大学リポジトリ「ローカル大規模言語モデルを用いたレポート自動採点システムの構築」: https://hokuriku.repo.nii.ac.jp/record/2000294/files/econ06.pdf
Study about AI
AIについて学ぶ
-
Meta インド データセンター AIインフラ——Reliance 168MW契約の深層と日本企業の実務対応
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...
-
ワーナー Sureel AI 音楽 著作権——買収の意味と日本企業への示唆
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...
-
Vector Lakebase ベクターDB RAG——Zillizが示す統合AIデータ基盤の論点
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...