目次
Ollama Python 入門:Python パッケージと OpenAI SDK で接続する
インストール
pip install ollama
まず、Ollama サービスが実行中で、使用するモデル(例:ollama pull qwen3:8b)をダウンロード済みであることを確認してください。
基本的なチャット
from ollama import chat
response = chat(
model="qwen3:8b",
messages=[
{"role": "system", "content": "日本語で回答してください。"},
{"role": "user", "content": "機械学習とは何か、3つのポイントで説明してください。"},
],
)
print(response.message.content)
レスポンスオブジェクトは、辞書形式でも読み取れます:response["message"]["content"]。
ストリーミング出力
テキストを生成しながら表示します。
from ollama import chat
stream = chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "100字程度の自己紹介の例を書いてください"}],
stream=True,
)
for chunk in stream:
print(chunk.message.content, end="", flush=True)
print()
複数ターンの会話:ターミナルチャットを作る
モデルは会話履歴を自分で記憶しません。各ターンのメッセージをリストに保存します。
from ollama import chat
messages = [{"role": "system", "content": "あなたは親切なアシスタントです。日本語で回答してください。"}]
while True:
user_input = input("あなた:").strip()
if user_input in {"exit", "quit", "終了"}:
break
messages.append({"role": "user", "content": user_input})
reply = ""
print("AI:", end="", flush=True)
for chunk in chat(model="qwen3:8b", messages=messages, stream=True):
piece = chunk.message.content
reply += piece
print(piece, end="", flush=True)
print()
messages.append({"role": "assistant", "content": reply})
会話が長くなるほど送信する内容が増え、最終的にコンテキスト長を超える可能性があります。実際の運用では、直近の数ターンだけを残すか、古い会話を要約してください。
パラメーターと思考モード
response = chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "1 から 100 までの合計はいくつですか?"}],
options={"temperature": 0.2, "num_ctx": 8192},
think=True,
keep_alive="30m",
)
print("思考:", response.message.thinking)
print("回答:", response.message.content)
画像を読み取る
response = chat(
model="gemma3",
messages=[{
"role": "user",
"content": "この画像には何が写っていますか?",
"images": ["./photo.jpg"], # bytes や base64 文字列も渡せます
}],
)
print(response.message.content)
その他の機能
import ollama
ollama.generate(model="qwen3:8b", prompt="台北を一言で紹介") # 1回の生成
ollama.list() # ダウンロード済みのモデル
ollama.ps() # メモリにロード済みのモデル
ollama.pull("nomic-embed-text") # モデルをダウンロード
ollama.show("qwen3:8b") # モデル情報
ollama.embed(model="nomic-embed-text", input="こんにちは") # テキスト埋め込み
別のホストに接続する
from ollama import Client
client = Client(host="http://192.168.1.50:11434")
response = client.chat(model="qwen3:8b", messages=[{"role": "user", "content": "こんにちは"}])
print(response.message.content)
環境変数 OLLAMA_HOST を設定する方法もあります。デフォルトの chat() 関数がその値を使うようになります。
非同期処理
FastAPI などの非同期フレームワークで使用します。
import asyncio
from ollama import AsyncClient
async def main():
client = AsyncClient()
response = await client.chat(
model="qwen3:8b",
messages=[{"role": "user", "content": "こんにちは"}],
)
print(response.message.content)
asyncio.run(main())
エラー処理
import ollama
try:
ollama.chat(model="not-exist", messages=[{"role": "user", "content": "hi"}])
except ollama.ResponseError as e:
print("エラー:", e.error, e.status_code)
if e.status_code == 404:
print("モデルが見つかりません。先に ollama pull を実行してください")
except ConnectionError:
print("Ollama に接続できません。サービスが実行中か確認してください")
OpenAI Python SDK に切り替える
既存のプログラムで OpenAI SDK を使っている場合は、base_url を変更するだけです。
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama", # 必須ですが、Ollama は値を検証しません
)
completion = client.chat.completions.create(
model="qwen3:8b",
messages=[{"role": "user", "content": "こんにちは、自己紹介してください"}],
)
print(completion.choices[0].message.content)
これで、同じプログラムをローカルモデルとクラウド API の間で切り替えられます。LangChain、LlamaIndex などのフレームワークも、同じ方法で Ollama に接続できます。
次の節では JavaScript / Node.js の使い方を紹介します。
更新日 2026年10月12日