重要なポイント
- Ollamaは`http://localhost:11434/v1`にOpenAI APIと完全互換のREST APIを公開します。
- Python OpenAIライブラリ:`api_key="openai"`を`api_key="ollama"`に、`base_url="http://localhost:11434/v1"`を設定するだけ。
- Node.jsも同様:OpenAI SDKをlocalhost:11434に向けるだけ。
- OpenAI互換APIはOllama・vLLM・LM Studioで同一です -- プロバイダーを切り替えてもコード変更不要。
- 2026年4月現在、ストリーミング(token単位)とFunction CallingがすべてのローカルモデルでこのAPIを通じて動作します。
OpenAI互換とはどういう意味か?
OpenAI互換とは、APIエンドポイントがOpenAI APIと同じ形式でレスポンスを返すことを意味します。 URLを変更するだけで、OpenAI向けに作られたライブラリやツールがローカルモデルでも動作します。このAPI標準の実装におけるOllama vs LM Studioの違いも参照ください。
OpenAI Pythonライブラリはこのような形式でリクエストを送信します:
``` POST /chat/completions { "model": "gpt-4o", "messages": [...], "temperature": 0.7 } ```
OllamaのAPIは`localhost:11434/v1/chat/completions`で全く同じリクエストを受け付け、OpenAI形式でレスポンスを返します:
``` { "choices": [{"message": {"content": "..."}}], "usage": {"prompt_tokens": 10, "completion_tokens": 20} } ```
形式が同一のため、新しいAPIを学んだりコードを書き直したりする必要はありません。
OllamaのAPIエンドポイントとは?
**`ollama serve`を実行すると、Ollamaは`http://localhost:11434`にREST APIを起動します。** OpenAI互換エンドポイントは以下の通りです:
| エンドポイント | URL | 説明 |
|---|---|---|
| Chat Completions | POST http://localhost:11434/v1/chat/completions | OpenAIの`/chat/completions`と同一 |
| Text Completions | POST http://localhost:11434/v1/completions | OpenAIの`/completions`と同一 |
| Embeddings | POST http://localhost:11434/v1/embeddings | テキストをベクトルに変換 |
| List Models | GET http://localhost:11434/v1/models | 利用可能なモデルを一覧表示 |
PythonでOllama APIを使う方法(OpenAIライブラリ)
OpenAIライブラリをインストールし、localhostに向けるだけです。
# 1. Install the OpenAI library
pip install openai
# 2. Connect to Ollama
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # dummy key; Ollama ignores it
)
# 3. Make a request
response = client.chat.completions.create(
model="llama3.2:3b",
messages=[
{"role": "user", "content": "What is 2+2?"}
]
)
print(response.choices[0].message.content)Node.jsでOllama APIを使う方法
OpenAI SDKをインストールし、ローカルOllamaインスタンスに接続します。
// 1. Install
npm install openai
// 2. Connect to Ollama
const OpenAI = require("openai").default;
const client = new OpenAI({
baseURL: "http://localhost:11434/v1",
apiKey: "ollama"
});
// 3. Make a request
const response = await client.chat.completions.create({
model: "llama3.2:3b",
messages: [{
role: "user",
content: "What is 2+2?"
}]
});
console.log(response.choices[0].message.content);LM StudioのOpenAI互換サーバー(localhost:1234)の使い方
**LM Studioは`http://localhost:1234/v1`にOpenAI互換APIを公開しています。** Local Serverタブで有効化 -- モデルを読み込み、Start Serverをクリック。PythonとNode.jsのコードはLM Studioでも同様に動作します -- ポートを11434から1234に変更するだけ。
LM StudioはGUIでモデルを視覚的に管理したいユーザーに適しています。スクリプト・自動化・CIパイプラインにはOllamaが推奨されます。
| プラットフォーム | ポート | 最適用途 | GPU必要 |
|---|---|---|---|
| LM Studio | localhost:1234 | GUIユーザー、ビジュアルモデル管理 | 不要(CPUで動作) |
| Ollama | localhost:11434 | スクリプト、自動化、本番環境 | 不要(CPUで動作) |
| vLLM | localhost:8000 | マルチGPU、高スループットサーバー | 推奨 |
# Python: Connect to LM Studio (localhost:1234)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="lm-studio" # any string; LM Studio ignores it
)
response = client.chat.completions.create(
model="llama-3.2-3b-instruct", # exact model name shown in LM Studio
messages=[
{"role": "user", "content": "What is 2+2?"}
]
)
print(response.choices[0].message.content)ブラウザのJavaScriptからOllama APIを呼び出す方法
ブラウザ側JavaScriptからOllamaを呼び出すには、ブラウザとサーバーが同じマシンにある(またはCORSを許可する)必要があります。 セキュリティ上、localhostへのブラウザリクエストはJavaScriptもlocalhostから配信される場合のみ動作します。ベストなローカルLLMフロントエンドではCORSを処理するブラウザ対応UIを紹介しています。
別のIPのブラウザからOllamaを呼び出す場合はCORSプロキシまたはサーバー側ミドルウェアを設定してください。
// Browser-side JavaScript (if server is localhost:3000, Ollama is localhost:11434)
fetch("http://localhost:11434/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "llama3.2:3b",
messages: [{ role: "user", content: "What is 2+2?" }]
})
})
.then(res => res.json())
.then(data => console.log(data.choices[0].message.content))レスポンスをtoken単位でストリーミングする方法
ストリーミングを使うと、レスポンス全体を待つことなく、生成されるにつれてtoken単位で表示できます。 2026年4月現在、OpenAI互換APIを通じてすべてのローカルモデルでストリーミングが動作します。
# Python: streaming example
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
stream = client.chat.completions.create(
model="llama3.2:3b",
messages=[{"role": "user", "content": "Count to 10"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)ローカルモデルはFunction Callingに対応していますか?
はい、2026年4月現在、Function CallingがOpenAI APIを通じてローカルモデルで動作します。 関数スキーマを定義すると、モデルはその関数に渡す引数でレスポンスを返せます。これによりコーディング向けベストローカルLLMをツールエコシステムと統合できます。
Function Callingのサポートはモデルによります。Llama 3.1 8B、Qwen2.5 7B、最新の多くのモデルがサポートしています。小さいモデル(3B)は信頼性が低い場合があります。
ローカルでOpenAI互換APIを使用する場合、構造化出力とJSONモードはクラウドAPIと同じように機能します。ローカルおよびクラウドモデル全体のスキーマ準拠とフォーマット制御については、構造化出力とJSONモードをご覧ください。
OpenAI互換APIはクラウド版と同じプロンプト形式を受け入れます — システムメッセージ、ユーザーメッセージ、構造化出力。プロンプトエンジニアリング技法の完全なライブラリがローカルAPI呼び出しに直接適用されます。
# Example: local model calls a weather function
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
}
}]
response = client.chat.completions.create(
model="llama3.2:8b",
messages=[{"role": "user", "content": "What is the weather in SF?"}],
tools=tools
)
# Check if model returned a function call
if response.choices[0].message.tool_calls:
call = response.choices[0].message.tool_calls[0]
print(f"Call function: {call.function.name} with {call.function.arguments}")ローカルLLM OpenAI APIの地域別状況
日本(METI・APPI): 経済産業省(METI)は国産AIソブリンティを推進しています。個人情報保護法(APPI)に基づき、オンプレミスモデル推論はクラウドデータ転送要件を回避します。OllamaとLM StudioはMETI AI Governance 2024フレームワークに準拠した企業展開に適しています。Ollama + Qwen2.5 7Bは標準的な企業ノートPC(8GB RAM)で30〜50 tok/secで動作し、日本語処理のリアルタイム要件を満たします。
アジア太平洋地域(データ主権): 韓国・台湾・東南アジア各国はデータ居住フレームワークを強化しています。ローカル推論はこれらの規制要件を満たし、Q4_K_M量子化により国内サーバー上でのコスト効率の高い展開が可能です。
グローバル(コスト最適化): クラウドコストとベンダー依存なしで本番アプリを運用したい開発者にとって、OllamaのOpenAI互換APIは直接的な代替手段です。既存のOpenAIコードベースを2行の変更でローカル推論に移行できます。
ローカルLLM OpenAI APIでよくある間違いは?
- APIキーが無視されることを忘れる。 Ollamaは`api_key="ollama"`(任意の文字列)を必要としますが、認証は行いません。実際のセキュリティはリクエストがlocalhostから来ることによります。
- モデル名が重要であることに気づかない。 `model="gpt-4"`で呼び出してもOllamaに`llama3.2:3b`しかプルされていなければリクエストは失敗します。`ollama list`から正確なモデル名を使用してください。
- OllamaがインターネットをN必要とすると思い込む。 不要です。ただしPythonコードがデフォルトでOpenAIのサーバーに接続しようとすると失敗します。`base_url`は必ず明示的に設定してください。
- ブラウザからのCORSエラー。 ブラウザ側スクリプトからOllamaを呼び出してCORSエラーが出た場合、セキュリティ上ブロックされています。VS Code・CursorでのローカルLLMでエディタベースの解決策を参照。
- ストリーミング時にstream=Trueを設定しない。 token単位のレスポンスには`stream=True`を明示的に設定する必要があります。デフォルトは完全なレスポンスを待ちます。
ローカルLLM APIについてのよくある質問
OllamaでOpenAIのコードを変更する必要がありますか?
不要です。`base_url="http://localhost:11434/v1"`と`api_key="ollama"`を設定するだけ。他はすべてそのままで動作します。
ネットワーク上の別のコンピューターからAPIを使用できますか?
はい。デフォルトではOllamaはlocalhostのみ。`OLLAMA_HOST=0.0.0.0:11434`を設定してから起動し、コードを`http://<マシンIP>:11434/v1`に向けてください。本番環境ではファイアウォールを設定してください。
LM StudioにはOpenAI互換APIがありますか?
はい。`http://localhost:1234/v1`に公開されています。Local ServerタブでStart Serverをクリック。Ollamaと同じコードでポートを1234に変えるだけです。
複数のモデルを同時に呼び出せますか?
Ollamaに読み込まれていれば可能です。ただし2つのモデルを同時に実行するとVRAM使用量が約2倍になります。
APIは認証されていますか?
デフォルトでは認証なし。localhost:11434にアクセスできれば誰でも使用できます。ネットワーク公開する本番環境では、リバースプロキシで認証を追加してください。
OllamaのOpenAI APIでストリーミングを使う方法は?
OpenAIライブラリの呼び出しでstream=Trueを設定します。Ollamaは各tokenのSSEを返します。Python: for chunk in client.chat.completions.create(stream=True, ...): print(chunk.choices[0].delta.content)。
OllamaはAPIを通じたFunction Callingに対応していますか?
はい、対応モデル(Llama 3.1 8B・Qwen2.5 7B・Mistral)で動作します。OpenAIと同様にtools=[]を渡すだけです。
Ollamaの/api/generateと/v1/chat/completionsの違いは?
/api/generateはOllama独自の1ターンエンドポイント。/v1/chat/completionsはOpenAI互換のマルチターンエンドポイント。新しいプロジェクトでは/v1/chat/completionsを使用してください。
vLLMをOpenAI互換APIとして使えますか?
はい。vLLMはデフォルトでhttp://localhost:8000/v1にOpenAI互換サーバーを起動します。Ollamaと同じクライアントコードが使えます。
Node.jsのopenaiパッケージでOllama APIを使う方法は?
コンストラクタでbaseURL: "http://localhost:11434/v1"とapiKey: "ollama"を設定します。あとはreal OpenAI APIと同様にclient.chat.completions.create()を呼ぶだけです。
同じコードベースでOllamaとOpenAIを切り替えるには?
環境変数を使用します:USE_LOCAL=trueでOllama(base_url localhost:11434/v1、api_key "ollama")、USE_LOCAL=falseでOpenAI。Python OpenAIライブラリはbase_urlをコンストラクタ引数として受け付けます。
OpenAI互換APIはLangChainで使えますか?
はい。ChatOpenAIにbase_url="http://localhost:11434/v1"を設定するだけです。LangChainにはOllama専用のChatOllamaクラスもあります。
参考資料
- Ollama. (2026). "Ollama OpenAI Compatibility." https://github.com/ollama/ollama/blob/main/docs/openai.md -- OllamaのOpenAI互換REST APIエンドポイントの公式ドキュメント。
- LM Studio. (2026). "LM Studio Local Server." https://lmstudio.ai/docs/local-server -- localhost:1234のLM StudioのOpenAI互換ローカルサーバーのドキュメント。
- OpenAI. (2024). "OpenAI Python Library." https://github.com/openai/openai-python -- base_urlオーバーライドでOpenAIとローカルLLM両方に接続するための公式Python SDK。
- vLLM Team. (2024). "vLLM OpenAI-Compatible Server." https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html -- vLLMのOpenAI互換APIサーバードキュメント(ポート8000、本番用途)。