Skip to main content
PromptQuorumPromptQuorum
ホーム/ローカルLLM/ローカルLLM向けOpenAI互換API(Ollama・vLLM・LM Studio)- Python / Node.jsガイド 2026
ツール&インターフェース

ローカルLLM向けOpenAI互換API(Ollama・vLLM・LM Studio)- Python / Node.jsガイド 2026

·10分で読める·Hans Kuepper 著 · PromptQuorumの創設者、マルチモデルAIディスパッチツール · PromptQuorum

LM Studio(localhost:1234)、Ollama(localhost:11434)、vLLM(localhost:8000)はすべてOpenAI形式のREST APIを公開しています。公式OpenAI PythonまたはNode.js SDKをどのローカルモデルとでも使用できます。変更するのはbase_urlとapi_keyの2行のみ。2026年4月現在、これがクラウドコストやベンダーロックインなしにローカルLLMを本番アプリで動かす標準的な方法です。

スライドデッキ: ローカルLLM向けOpenAI互換API(Ollama・vLLM・LM Studio)- Python / Node.jsガイド 2026

以下のスライドは、OpenAI互換APIの標準、Ollamaエンドポイントのセットアップ、3ステップのPythonおよびNode.js統合、ストリーミング、Function Calling、地域コンプライアンス(EU GDPR・日本APPI・中国CAC)を解説します。ローカルLLM API統合リファレンスカードとしてPDFをダウンロード。

以下のスライドを閲覧するか、PDFとしてダウンロードしてください。 リファレンスカードをダウンロード(PDF)

重要なポイント

  • 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を学んだりコードを書き直したりする必要はありません。

OpenAIからOllamaへの切り替えに必要な変更は2行のみ -- base_urlとapi_key。他のコードはすべてそのまま。
OpenAIからOllamaへの切り替えに必要な変更は2行のみ -- base_urlとapi_key。他のコードはすべてそのまま。

OllamaのAPIエンドポイントとは?

**`ollama serve`を実行すると、Ollamaは`http://localhost:11434`にREST APIを起動します。** OpenAI互換エンドポイントは以下の通りです:

エンドポイントURL説明
Chat CompletionsPOST http://localhost:11434/v1/chat/completionsOpenAIの`/chat/completions`と同一
Text CompletionsPOST http://localhost:11434/v1/completionsOpenAIの`/completions`と同一
EmbeddingsPOST http://localhost:11434/v1/embeddingsテキストをベクトルに変換
List ModelsGET http://localhost:11434/v1/models利用可能なモデルを一覧表示
OllamaはOpenAI形式のリクエストを受け取りローカルで推論を実行 -- レスポンスはOpenAI形式のまま返される。インターネット不要。
OllamaはOpenAI形式のリクエストを受け取りローカルで推論を実行 -- レスポンスはOpenAI形式のまま返される。インターネット不要。

PythonでOllama APIを使う方法(OpenAIライブラリ)

OpenAIライブラリをインストールし、localhostに向けるだけです。

python
# 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インスタンスに接続します。

javascript
// 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 Studiolocalhost:1234GUIユーザー、ビジュアルモデル管理不要(CPUで動作)
Ollamalocalhost:11434スクリプト、自動化、本番環境不要(CPUで動作)
vLLMlocalhost:8000マルチGPU、高スループットサーバー推奨
python
# 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プロキシまたはサーバー側ミドルウェアを設定してください。

javascript
// 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
# 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)
stream=Trueを設定するとOllamaは最初のtokenを~0.1秒で配信 -- ユーザーはレスポンス全体を待たずに出力を即座に確認できます。
stream=Trueを設定するとOllamaは最初のtokenを~0.1秒で配信 -- ユーザーはレスポンス全体を待たずに出力を即座に確認できます。

ローカルモデルはFunction Callingに対応していますか?

はい、2026年4月現在、Function CallingがOpenAI APIを通じてローカルモデルで動作します。 関数スキーマを定義すると、モデルはその関数に渡す引数でレスポンスを返せます。これによりコーディング向けベストローカルLLMをツールエコシステムと統合できます。

Function Callingのサポートはモデルによります。Llama 3.3 8B、Qwen3 7B、最新の多くのモデルがサポートしています。小さいモデル(3B)は信頼性が低い場合があります。

ローカルでOpenAI互換APIを使用する場合、構造化出力とJSONモードはクラウドAPIと同じように機能します。ローカルおよびクラウドモデル全体のスキーマ準拠とフォーマット制御については、構造化出力とJSONモードをご覧ください。

OpenAI互換APIはクラウド版と同じプロンプト形式を受け入れます — システムメッセージ、ユーザーメッセージ、構造化出力。プロンプトエンジニアリング技法の完全なライブラリがローカルAPI呼び出しに直接適用されます。

python
# 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}")
OllamaでのFunction Callingフロー:ローカルモデルがtool_call JSONを返し、アプリが関数を実行 -- Llama 3.3 8B・Qwen3 7B・Mistralで対応。
OllamaでのFunction Callingフロー:ローカルモデルがtool_call JSONを返し、アプリが関数を実行 -- Llama 3.3 8B・Qwen3 7B・Mistralで対応。

ローカルLLM OpenAI APIの地域別状況

日本(METI・APPI): 経済産業省(METI)は国産AIソブリンティを推進しています。個人情報保護法(APPI)に基づき、オンプレミスモデル推論はクラウドデータ転送要件を回避します。OllamaとLM StudioはMETI AI Governance 2024フレームワークに準拠した企業展開に適しています。Ollama + Qwen3 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`を明示的に設定する必要があります。デフォルトは完全なレスポンスを待ちます。
Ollama(ポート11434)、vLLM(8000)、LM Studio(1234)はすべてOpenAI互換エンドポイントを公開 -- 同じクライアントコード、異なるポートと用途。
Ollama(ポート11434)、vLLM(8000)、LM Studio(1234)はすべてOpenAI互換エンドポイントを公開 -- 同じクライアントコード、異なるポートと用途。

ローカル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.3 8B・Qwen3 7B・Mistral)で動作します。OpenAIと同様にtools=[]を渡すだけです。

Ollamaの/api/generateと/v1/chat/completionsの違いは?

/api/generateはOllama独自の1ターンエンドポイント。/v1/chat/completionsはOpenAI互換のマルチターンエンドポイント。新しいプロジェクトでは/v1/chat/completionsを使用してください。

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クラスもあります。

参考資料

サードパーティの情報に関する注意

この記事はサードパーティのAIモデル、ベンチマーク、価格、ライセンスを参照しています。AIの状況は急速に変化しています。ベンチマークスコア、ライセンス条件、モデル名、API価格は執筆時とお読みになる時の間で変わる可能性があります。この記事に基づいてデプロイやコンプライアンスに関する決定を下す前に、各プロバイダーの公式ソース(ライセンスとベンチマークはHugging Faceのモデルカード、API価格はプロバイダーのウェブサイト、現在のGDPRとEU AI法のテキストはEUR-Lex)で最新の数値を確認してください。この記事は2026年5月時点で公開されている情報を反映しています。

ローカルLLM、独自のAPIキー、またはその両方でPromptQuorumを使用できます — バックエンドはあなたが選択します。

PromptQuorumウェイトリストに参加する →

← ローカルLLMに戻る