OllamaのOpenAI互換APIで既存アプリをローカルLLM化する方法

Ollama

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_urlhttp://localhost:11434/v1に変えるだけで、openai Pythonライブラリがそのまま動く
  • /v1/chat/completionsはストリーミング・非ストリーミング両対応。system_fingerprintfp_ollamaが返ってくる
  • embeddingsはollama serve --embeddingsフラグが必要(デフォルトでは無効)
  • ローカルAPIのRTTは平均14.8msで、ネットワーク遅延ゼロで推論できる

目次

  1. OllamaのOpenAI互換APIとは
  2. DockerでOllamaをセットアップする
  3. curlで/v1/chat/completionsを叩いてみる
  4. Python openaiライブラリで既存コードをそのまま使う
  5. 対応エンドポイントの全体像
  6. embeddings を使いたい場合の設定
  7. よくあるエラーと解決策
  8. まとめ

検証環境

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に乗り換えられる点です。

Ollama APIルートページ(
Ollama APIルートページ(”Ollama is running”)

DockerでOllamaをセットアップする

①コンテナを起動する

GPUなしのCPU推論でも動作確認できます。まずはDockerでOllamaを起動します。




ubuntu@vps: ~
$ docker run -d \
–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でも動きます。




ubuntu@vps: ~
$ docker exec -it ollama ollama pull tinyllama:1.1b
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を叩くと確認できます。




ubuntu@vps: ~
$ curl http://localhost:11434/
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と全く同じレスポンス構造です。




ubuntu@vps: ~
$ curl -s http://localhost:11434/v1/models | python3 -m json.tool
{
“object”: “list”,
“data”: [
{
“id”: “tinyllama:1.1b”,
“object”: “model”,
“created”: 1781360221,
“owned_by”: “library”
}
]
}

object: "list"data配列の中にidowned_byがあるという構造は、OpenAI APIのレスポンスと完全に一致しています。

/v1/modelsのJSONレスポンス(Ollama 0.30.8実測)
/v1/modelsのJSONレスポンス(Ollama 0.30.8実測)

②チャット補完リクエストを送る(/v1/chat/completions)

本題です。OpenAI APIと同じmessages配列を使ってリクエストします。




ubuntu@vps: ~
$ curl -s -X POST http://localhost:11434/v1/chat/completions \
-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を取り出すコードがそのまま使えます。

/v1/chat/completionsのレスポンス(実測)
/v1/chat/completionsのレスポンス(実測)

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

Ollama OpenAI互換API実測データ
Ollama OpenAI互換API実測データ

Python openaiライブラリで既存コードをそのまま使う

①openaiパッケージのインストール

Ubuntu 24.04でopenaiライブラリをインストールします。Ubuntu 24.04はPEP 668の制約があるため、--break-system-packagesフラグが必要です(仮想環境の利用を推奨)。




ubuntu@vps: ~
$ pip3 install –break-system-packages openai
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_urlapi_keyの2箇所だけです。




ubuntu@vps: ~/myapp
# === OpenAI APIを使う場合(変更前) ===
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以上のモデルに差し替えてください(モデル名を変えるだけです)。

著者アイコン
著者アイコン

LangChainを使っている場合は ChatOpenAI(base_url="http://localhost:11434/v1", api_key="ollama", model="llama3.2:3b") と書けばそのまま動きます。プロバイダ切り替えの仕組みが効いていますね。

対応エンドポイントの全体像

Ollama 0.30.8時点で実際に動作確認したエンドポイントをまとめます。

OpenAI API対応エンドポイント一覧(実測)
OpenAI API対応エンドポイント一覧(実測)

/v1/chat/completions/v1/modelsはOpenAI APIとほぼ同等に動作します。一方、画像生成(/v1/images/generations)や音声認識(/v1/audio)は対応外です。これらを使っているアプリの移行は追加作業が必要になります。

embeddingsを使いたい場合の設定

embeddings(テキストをベクトル化する機能)を使う場合、Ollamaをデフォルトの起動方法では使えません。実際に/v1/embeddingsを叩くと次のエラーが返ってきます。




ubuntu@vps: ~
$ curl -s -X POST http://localhost:11434/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で起動する際に環境変数または起動フラグで設定します。




ubuntu@vps: ~
# embeddings を有効化して起動
$ docker run -d \
–name ollama \
-p 11434:11434 \
-e OLLAMA_EMBEDDINGS=1 \
ollama/ollama:latest
# または直接サーブする場合
$ ollama serve –embeddings

embeddingsに対応したモデルとしてはnomic-embed-textmxbai-embed-largeが選択肢です。RAG(Retrieval-Augmented Generation)を構築する場合はこれらをembeddingモデルとして使い、llama3.2などを推論モデルとして組み合わせるのが一般的なアーキテクチャです。

よくあるエラーと解決策

①Connection refused(接続できない)




ubuntu@vps: ~
curl: (7) Failed to connect to localhost port 11434 after 0 ms: Connection refused

コンテナが起動していないか、ポートマッピングが間違っています。docker psでコンテナの状態を確認してください。




ubuntu@vps: ~
$ docker ps | grep ollama
f53e9e3ccb86 ollama/ollama:latest “/bin/ollama serve” Up 5 hours 0.0.0.0:11434->11434/tcp ollama

②model not found エラー




ubuntu@vps: ~
{“error”:{“message”:”model ‘llama3.2:3b’ not found”,”type”:”api_error”}}

リクエストしたモデルがダウンロードされていません。docker exec ollama ollama pull llama3.2:3bでまずモデルを取得してください。

③Dockerコンテナ内からOllamaにアクセスする場合

別のDockerコンテナ(LangChainアプリなど)からOllamaに接続する場合、localhostではなくホストのIPを使う必要があります。




ubuntu@vps: ~
# Dockerコンテナ内からホストのOllamaにアクセス
$ 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連携)
Open WebUI ログイン画面(Ollama連携)
Open WebUI チャット画面(tinyllama:1.1bで応答)
Open WebUI チャット画面(tinyllama:1.1bで応答)

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上で運用したい場合は、スペックの選び方や初期設定についても確認しておくと良いでしょう。

コメント

タイトルとURLをコピーしました