開発分析
ローカルLLMのOpenAI互換APIはどれ? LM Studio・Ollama・llama.cppを比較

目次
OpenAI SDKをローカルLLMへ接続したい場合、LM Studio、Ollama、llama.cpp serverのいずれも候補になる。ただし、OpenAI互換APIはOpenAI APIの全機能が完全に同じ挙動で使えるという意味ではない。
選ぶときは、まず自分のアプリが必要とするエンドポイントと機能を決め、その契約を各ランタイムが満たすか確認する。
図: 処理や設定の流れを1枚に整理。実際の操作条件は本文で確認する。
最初に必要なAPI機能を決める
同じOpenAI SDKを使うアプリでも、必要な機能は異なる。
/v1/chat/completionsで会話する/v1/responsesを使う/v1/embeddingsで埋め込みを生成する- streamingを受け取る
- toolsやfunction callingを使う
- 応答間の状態をサーバー側で引き継ぐ
Chat Completionsだけでよいアプリと、Responses APIの状態保持まで必要なアプリでは、同じ「OpenAI互換」でも必要条件が違う。
3者の主なエンドポイント
| 実行環境 | 公式に確認できる主なv1エンドポイント | 注意点 |
|---|---|---|
| LM Studio | Models、Responses、Chat Completions、Embeddings、Completions | モデルやツール機能の対応は別に確認 |
| Ollama | Chat Completions、Completions、Models、Embeddings、Responses | 部分互換で、Responsesの状態保持に制限あり |
| llama.cpp server | Models、Completions、Chat Completions、Responses、Embeddings | モデル、テンプレート、サーバー設定を自分で管理 |
この表はエンドポイントの存在を示すもので、同名エンドポイントのすべてのrequest field、streaming形式、エラー、tool behaviorが同一という意味ではない。
LM StudioはGUIのモデル管理とAPIを組み合わせやすい
LM StudioはOpenAI互換の複数の/v1エンドポイントを案内している。既存のOpenAIクライアントでは、base URLをローカルのLM Studio serverへ向けて使う形になる。
サーバーはデスクトップアプリ側から起動でき、CLIではlms server startも案内されている。GUIでモデルを選びながら既存アプリをローカルへ接続したい場合に組み合わせやすい。
ただし、APIへ接続できることと、選んだモデルがtools、画像入力、構造化出力などを期待どおり扱えることは別だ。必要な機能はモデルとランタイムの両方で確認する必要がある。
Ollamaは部分互換として必要機能を確認する
Ollamaでは、OpenAIクライアントのbase URLをhttp://localhost:11434/v1/へ向ける公式例がある。Chat Completionsなどを既存のSDKから利用できる。
Responses APIも用意されているが、現行ドキュメントではprevious_response_idやconversationによる状態保持はサポートされていない。
そのため、単発のChat Completionsが必要なアプリと、Responses間のサーバー側状態を前提にするアプリでは適合性が違う。後者ではアプリ側で履歴を管理するなど、別の設計が必要になる。
Ollamaを選ぶ場合は「OpenAI互換」というラベルではなく、自分が使うendpointとfieldが現在の公式資料にあるかを見るのが確実だ。
llama.cpp serverはモデルとサーバーを直接管理する
llama.cpp serverもChat Completions、Responses、EmbeddingsなどのOpenAI互換エンドポイントを提供する。
一方、GGUFファイル、チャットテンプレート、GPU配置、コンテキスト、サーバー起動引数などを自分で管理する範囲が広い。どのモデルをどの条件で動かしているかを明示したい場合に扱いやすい。
/v1/modelsで扱われるモデルIDや、アプリ側が期待する名前との関係も確認しておきたい。モデル名を固定するクライアントでは、サーバー側の設定と合わせる必要がある。
llama.cpp serverの公式資料ではローカル向けの待ち受けとして127.0.0.1が使われる。別端末からアクセスできるよう待ち受け範囲を広げる場合は、選んだランタイムの認証やネットワーク設定を確認してから行う必要がある。
API互換とモデルの能力は別
/v1/chat/completionsへリクエストを送信できても、モデルが要求した機能を正しく処理できるとは限らない。
特に次の項目は個別に確認したい。
- モデルIDの指定方法
- messagesやinputの内容形式
- streaming
- JSONや構造化出力
- tool/function calling
- 画像などのマルチモーダル入力
- チャットテンプレート
APIサーバーがfieldを受け付けることと、モデルがその機能に適していることは別の条件になる。
最小の接続テストから始める
候補を選んだら、最初から本番の複雑なアプリを接続するより、必要機能を一つずつ確認した方が原因を切り分けやすい。
/v1/modelsでモデルIDを確認する/v1/chat/completionsへ短いリクエストを送る- 必要ならstreamingを確認する
- Responses、Embeddings、toolsなど必要な機能を一つずつ追加する
- unsupported fieldやエラー内容を記録する
Chat Completionsだけで足り、GUIからモデルを管理したいならLM Studioが候補になる。Ollamaのモデル管理を使いたいなら必要なendpointの部分互換を確認する。GGUFと起動条件まで直接管理したいならllama.cpp serverを比較できる。
実行環境全体の違いはLM Studio・Ollama・llama.cppの比較で、GGUF側の互換性はGGUFはLM Studio・Ollama・llama.cppでどこまで互換?で確認できる。
OpenAI互換APIを選ぶ基準は製品名ではなく、自分のアプリが必要とするendpoint、field、状態管理、ツール機能を満たすかにある。最小リクエストを実際に通してから接続先を決めるのが確実だ。
まとめ
- OpenAI互換APIは一部のエンドポイントやリクエスト形式を合わせる仕組みで、OpenAI APIとの完全な挙動一致を意味しない
- LM StudioはResponses、Chat Completions、Embeddingsなど複数のv1エンドポイントを案内している
- Ollamaは部分互換で、Responses APIのprevious_response_idやconversationによる状態保持は未対応
- llama.cpp serverもChat Completions、Responses、Embeddingsなどを提供し、モデルやチャットテンプレートを自分で管理する
公式サイトで次に進む
この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。
LM Studio
Ollama
llama.cpp
local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。
この記事で扱ったデータ
モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。