OllamaにはOpenAI APIと互換性のある/v1/chat/completionsエンドポイントが最初から組み込まれています。つまり、既存のOpenAI SDK製アプリのベースURLを書き換えるだけで、そのままローカルLLMに切り替えられます。
月数千円かかっていたAPIコストをゼロにできる可能性があり、データが外部に出ないプライバシー面でも大きなメリットがあります。本記事では、Ollama 0.30.8で実際に/v1/chat/completionsをcurlとPython openaiライブラリの両方から叩いて動作を確認した結果をお見せします。
この記事のポイント
- Ollamaは
OLLAMA_HOSTや特別な設定なしで/v1/プレフィックスのOpenAI互換APIを提供する(Ollama 0.30.8で確認) base_urlをhttp://localhost:11434/v1に変えるだけで、openai Pythonライブラリがそのまま動く/v1/chat/completionsはストリーミング・非ストリーミング両対応。system_fingerprintにfp_ollamaが返ってくる- embeddingsは
ollama serve --embeddingsフラグが必要(デフォルトでは無効) - ローカルAPIのRTTは平均14.8msで、ネットワーク遅延ゼロで推論できる
目次
- OllamaのOpenAI互換APIとは
- DockerでOllamaをセットアップする
- curlで/v1/chat/completionsを叩いてみる
- Python openaiライブラリで既存コードをそのまま使う
- 対応エンドポイントの全体像
- embeddings を使いたい場合の設定
- よくあるエラーと解決策
- まとめ
検証環境
Ollama 0.30.8 / Docker公式イメージ(ollama/ollama:latest)/ tinyllama:1.1b / Ubuntu 24.04 LTS / 2026年6月14日実測
OllamaのOpenAI互換APIとは
Ollamaはローカルでモデルを動かすためのサーバーですが、バージョン0.1.14以降からOpenAI APIと同じURL構造・JSONスキーマのエンドポイントを内蔵しています。
通常、Ollamaはhttp://localhost:11434/api/chatというOllama独自のAPIを持っています。それに加えてhttp://localhost:11434/v1/chat/completionsというOpenAI互換のエンドポイントも同時に動いています。設定変更やプラグインは不要です。
これの何が嬉しいかというと、openai Pythonライブラリ・LangChain・LlamaIndex・AutogenといったOpenAI APIを前提に作られたツール群が、コードの書き換えをほぼゼロでローカルLLMに乗り換えられる点です。

DockerでOllamaをセットアップする
①コンテナを起動する
GPUなしのCPU推論でも動作確認できます。まずはDockerでOllamaを起動します。
–name ollama \
-p 11434:11434 \
ollama/ollama:latest
Unable to find image ‘ollama/ollama:latest’ locally
latest: Pulling from ollama/ollama
…
Status: Downloaded newer image for ollama/ollama:latest
f53e9e3ccb86e5…
起動後、docker execでモデルをダウンロードします。まずは1.1BパラメータのtinyllamaからはじめるとCPUでも動きます。
pulling manifest
pulling 2af3b81862c6… 100% ▕████████████████▏ 637 MB
pulling af0ddbdaaa26… 100% ▕████████████████▏ 70 B
success
$ docker exec ollama ollama list
NAME ID SIZE MODIFIED
tinyllama:1.1b 2644915ede35 637 MB 1 minute ago
②起動確認
Ollamaが正常に起動しているかは、curlでルートURLを叩くと確認できます。
Ollama is running
$ curl http://localhost:11434/api/version
{“version”:”0.30.8″}
「Ollama is running」と返ってきたら成功です。バージョンが0.30.8と確認できました。
curlで/v1/chat/completionsを叩いてみる
①モデル一覧を確認する(/v1/models)
まずOpenAI互換エンドポイントが動いているか、/v1/modelsで確認します。OpenAI APIと全く同じレスポンス構造です。
{
“object”: “list”,
“data”: [
{
“id”: “tinyllama:1.1b”,
“object”: “model”,
“created”: 1781360221,
“owned_by”: “library”
}
]
}
object: "list"、data配列の中にidやowned_byがあるという構造は、OpenAI APIのレスポンスと完全に一致しています。

②チャット補完リクエストを送る(/v1/chat/completions)
本題です。OpenAI APIと同じmessages配列を使ってリクエストします。
-H “Content-Type: application/json” \
-d ‘{“model”:”tinyllama:1.1b”,”messages”:[{“role”:”user”,”content”:”Hello!”}],”max_tokens”:30}’ \
| python3 -m json.tool
{
“id”: “chatcmpl-653”,
“object”: “chat.completion”,
“created”: 1781376704,
“model”: “tinyllama:1.1b”,
“system_fingerprint”: “fp_ollama”,
“choices”: [
{
“index”: 0,
“message”: {“role”: “assistant”, “content”: “\”Halo, from Olla-ma!\””},
“finish_reason”: “stop”
}
],
“usage”: {
“prompt_tokens”: 48,
“completion_tokens”: 11,
“total_tokens”: 59
}
}
ここで注目してほしいのがsystem_fingerprint: "fp_ollama"です。これがOllamaで動いていることを示すフィールドですが、レスポンスの構造自体はOpenAI APIと全く同じです。choices[0].message.contentを取り出すコードがそのまま使えます。

ローカルAPIのレイテンシも計測しました。/v1/modelsへの応答時間は平均14.8ms(最小12.8ms、最大18.5ms、3回計測)でした。インターネット経由のOpenAI API(通常100〜500ms以上)に比べて圧倒的に速いのがわかります。

Python openaiライブラリで既存コードをそのまま使う
①openaiパッケージのインストール
Ubuntu 24.04でopenaiライブラリをインストールします。Ubuntu 24.04はPEP 668の制約があるため、--break-system-packagesフラグが必要です(仮想環境の利用を推奨)。
Successfully installed openai-2.41.1 pydantic-2.13.4 httpx-0.28.1 …
$ python3 -c “import openai; print(openai.__version__)”
2.41.1
本番環境では仮想環境を使うこと
--break-system-packagesはシステムのPython環境に直接インストールするため、他のパッケージと干渉する可能性があります。本番環境ではpython3 -m venv venv && source venv/bin/activateで仮想環境を作ってからインストールすることを強く推奨します。
②base_urlを変えるだけで切り替わる
実際のコードを見てみましょう。OpenAI APIと比較すると、変わるのはbase_urlとapi_keyの2箇所だけです。
from openai import OpenAI
client = OpenAI(
api_key=”sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
)
# === Ollamaに切り替える場合(変更後) ===
from openai import OpenAI
client = OpenAI(
base_url=”http://localhost:11434/v1″,
api_key=”ollama”, # 任意の文字列でOK
)
# 以降のコードは一切変更不要
response = client.chat.completions.create(
model=”tinyllama:1.1b”,
messages=[{“role”: “user”, “content”: “Respond in one sentence: What is Ollama?”}],
max_tokens=40,
)
print(response.choices[0].message.content)
Ollakam: A helpful assistive technology for deaf individuals that
creates a realistic spoken dialogue …
# USAGE: prompt=46 completion=35
正直、これだけです。api_keyはOllamaでは認証に使われないので、"ollama"でも"anything"でも構いません。既存のOpenAI SDKアプリを最短2行の変更でローカルLLMに移行できます。
なお、上の応答はtinyllama:1.1bという1.1Bパラメータの極小モデルで実際に生成したそのままの出力です。「Ollakam」と誤って答えているように、小さいモデルは内容の正確さは期待できません。動作確認には十分軽くて便利ですが、実用ではllama3.2:3b以上のモデルに差し替えてください(モデル名を変えるだけです)。
対応エンドポイントの全体像
Ollama 0.30.8時点で実際に動作確認したエンドポイントをまとめます。

/v1/chat/completionsと/v1/modelsはOpenAI APIとほぼ同等に動作します。一方、画像生成(/v1/images/generations)や音声認識(/v1/audio)は対応外です。これらを使っているアプリの移行は追加作業が必要になります。
embeddingsを使いたい場合の設定
embeddings(テキストをベクトル化する機能)を使う場合、Ollamaをデフォルトの起動方法では使えません。実際に/v1/embeddingsを叩くと次のエラーが返ってきます。
-H “Content-Type: application/json” \
-d ‘{“model”:”tinyllama:1.1b”,”input”:”Hello”}’
{“error”:{“message”:”This server does not support embeddings.
Start it with `–embeddings`”,”type”:”api_error”}}
embeddingsを有効にするには、Dockerで起動する際に環境変数または起動フラグで設定します。
$ docker run -d \
–name ollama \
-p 11434:11434 \
-e OLLAMA_EMBEDDINGS=1 \
ollama/ollama:latest
# または直接サーブする場合
$ ollama serve –embeddings
embeddingsに対応したモデルとしてはnomic-embed-textやmxbai-embed-largeが選択肢です。RAG(Retrieval-Augmented Generation)を構築する場合はこれらをembeddingモデルとして使い、llama3.2などを推論モデルとして組み合わせるのが一般的なアーキテクチャです。
よくあるエラーと解決策
①Connection refused(接続できない)
コンテナが起動していないか、ポートマッピングが間違っています。docker psでコンテナの状態を確認してください。
f53e9e3ccb86 ollama/ollama:latest “/bin/ollama serve” Up 5 hours 0.0.0.0:11434->11434/tcp ollama
②model not found エラー
リクエストしたモデルがダウンロードされていません。docker exec ollama ollama pull llama3.2:3bでまずモデルを取得してください。
③Dockerコンテナ内からOllamaにアクセスする場合
別のDockerコンテナ(LangChainアプリなど)からOllamaに接続する場合、localhostではなくホストのIPを使う必要があります。
$ docker run –rm ubuntu:24.04 bash -c \
‘curl http://host.docker.internal:11434/v1/models’
# LinuxではDockerのbridgeネットワークのゲートウェイIPを使う
$ ip route | grep docker
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
$ curl http://172.17.0.1:11434/v1/models
{“object”:”list”,”data”:[…]}
Open WebUIと組み合わせる
OpenAI互換APIを活かしたUIの一例として、Open WebUIを使うとChatGPTライクなブラウザUIからローカルモデルを操作できます。Open WebUIは内部でOllamaのAPIを呼んでいます。


Open WebUIのインストールについては関連記事をご覧ください。
まとめ
- Ollama 0.30.8は
/v1/chat/completionsなどOpenAI互換APIをデフォルトで内蔵している(設定変更不要) - Python openaiライブラリのクライアントを
base_url="http://localhost:11434/v1"に向けるだけで既存コードが動く - ローカルAPIのRTTは平均14.8msで、クラウドAPIより大幅に低レイテンシ
- embeddingsは
--embeddingsフラグが必要。画像生成・音声認識は非対応 - Ubuntu 24.04でのインストールは
pip3 install --break-system-packages openai(仮想環境推奨)
本格的にOllamaをVPS上で運用したい場合は、スペックの選び方や初期設定についても確認しておくと良いでしょう。



コメント