目次

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日