OllamaのOpenAI互換APIでローカルLLMをアプリから使う

※本ページには広告(アフィリエイトプログラム等)が含まれます。

※本ページには広告(アフィリエイトプログラム等)が含まれます。仕様は 2026年8月16日時点の Ollama 公式ドキュメントの記載、サーバーの出力は同日に運用中の VPS(Debian 12・メモリ 958MB)から採取した実測値です。

🎯 結論:既存の OpenAI クライアントはほぼ動く。ただし落ちる機能がはっきり決まっている

結論から書きます。Ollama は http://localhost:11434/v1/ に OpenAI 互換のエンドポイントを持っているので、ベース URL を差し替えるだけで既存のクライアントライブラリがそのまま動きます。API キーは必須ですが値は無視されるので、'ollama' のような適当な文字列で構いません。

ただし互換は完全ではありません。tool_choicelogprobsn・画像 URL など、落ちる機能ははっきり決まっています。ここを踏むかどうかで移植の難易度が変わります。

  • 差し替えるのはベース URL だけhttp://localhost:11434/v1/
  • API キーは必須だが無視される → 値は何でもよい
  • ⚠️ tool_choice が非対応 → ツールの強制呼び出しに依存した設計は移植できない
  • ⚠️ 画像は Base64 のみ → URL 指定は通らない
  • 一般的な VPS では動かない → GPU が無い(実証は後述)

対応しているエンドポイント

5 つのエンドポイント

エンドポイント 用途
/v1/chat/completions チャット形式の生成(主用途)
/v1/completions 単発の補完
/v1/models モデル一覧
/v1/models/{model} モデルの詳細
/v1/embeddings 埋め込みベクトルの生成

使えるパラメータ

/v1/chat/completions で通るのは model / messages / frequency_penalty / presence_penalty / response_format / seed / stop / stream / temperature / top_p / max_tokens / tools です。

tools は通るのに tool_choice が通らないのがポイントです。ツールを渡すことはできても、「必ずこのツールを使え」と強制する書き方は移植できません。

API キーは「必須だが無視される」

公式の表現がそのまま required but ignored です。クライアントライブラリがキーを要求するので何か渡す必要はありますが、値は検証されません。

$client = OpenAI::factory()
    ->withBaseUri('http://localhost:11434/v1')
    ->withApiKey('ollama')   // 必須だが無視される
    ->make();

⚠️ これは「認証が無い」という意味です。外から叩ける場所に置くなら、認証は自分で前段に用意する必要があります。

⚠️ 互換性の限界

落ちる機能の一覧

機能 状態 影響
tool_choice 非対応 ツールの強制呼び出しができない
logprobs 非対応 確信度を数値で取れない
n 非対応 1 リクエストで複数候補を得られない
logit_bias / user 非対応 トークン制御・利用者識別ができない
画像の URL 指定 Base64 のみ URL を渡す実装は書き換えが必要
prompt の配列指定 文字列のみ トークン配列を渡す実装は不可

移植前に確認する順番

既存のコードを移すなら、この 3 つを先に検索してください。該当が無ければ、たいていベース URL の差し替えだけで動きます。

  • tool_choice を指定している箇所
  • 画像を image_url の URL 形式で渡している箇所
  • nlogprobs に依存している箇所

埋め込みも制限がある

/v1/embeddings で通るのは modelinput だけです。encoding_formatdimensions は非対応なので、次元数を指定して次元削減する実装は移せません

一般的な VPS では動かない

GPU が存在しない

「借りている VPS に入れればいいのでは」と考えたくなりますが、Web サーバー用途の VPS に GPU は載っていません。手元の環境で確認するとこうです。

$ nvidia-smi
bash: nvidia-smi: command not found

$ ls /dev/nvidia*
ls: cannot access '/dev/nvidia*': No such file or directory

メモリも足りない

$ free -m
               total        used        free      shared  buff/cache   available
Mem:             958         499         163          68         532         458

使えるのは 458MB。7B クラスのモデルは載りません。CPU 推論という逃げ道も、この規模では現実的な速度になりません。

Ollama を置くなら別の箱を用意する

Web サーバーと同居させる構成は成立しません。推論用の環境は分けて考えてください。常時稼働の Web サーバーは止められない代わりに安く、GPU は高い代わりに止められる、と性質が逆だからです。

動かすなら GPU を借りる

秒課金の実価格

さくらの高火力 DOK の公式価格です。すべて税込・2026年8月16日時点。

プラン VRAM 時間単価 常時稼働の月額
NVIDIA V100 32GB 57.6 円 41,472 円
NVIDIA H100 80GB 1,008 円 725,760 円

API と比べる基準

比較の軸は単純で、「GPU を起動している時間の割合」です。

ローカル LLM は起動している限り課金されます。対して API はトークン単位なので、呼ばなければゼロです(参考までに Claude Haiku 4.5 は入力 $1.00 / 出力 $5.00 per 1M トークン・2026年8月16日時点)。

つまり散発的に使うなら API、常時大量に回すならローカルという、ごく素直な結論になります。⚠️ 為替で印象が変わるので、比較するときは自分の利用パターンの「時間」と「トークン数」を先に出してください。

ローカルを選ぶ本当の理由

費用だけで見るとローカルが有利になる場面は限られます。ローカル LLM の本命は「データを外に出さないこと」です。個人情報やトークンが混ざったログを外部 API に投げられない、という制約があるなら、費用に関係なくローカルが唯一の選択肢になります。

他ホストから叩けるようにする

既定では外に出ない

Ollama は既定で localhost にしか listen しません。別のホストから叩くには待受アドレスを変える必要があります。

# systemd の Drop-In で環境変数を足す(元の unit ファイルは触らない)
$ sudo systemctl edit ollama

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

元の unit ファイルを直接編集しないでください。パッケージ更新で上書きされます。Drop-In の考え方はsystemd のユニットファイルにまとめています。

⚠️ 認証が無いまま開けない

前述のとおり API キーは検証されません0.0.0.0 で待ち受けた時点で、到達できる全員が自由に叩ける状態になります。

公開ポートがどれだけ探索されるかは数字で確認できます。手元の VPS で直近 7 日間のエラーログを集計したところ、157 件のうち 137 件(87%)が SSH ポートへの総当たりでした。認証にすら到達していない接続がこれだけあります。

露出を減らす順番

方法 露出
localhost のまま、同じマシンで完結 なし
SSH トンネル・VPN 越しに限定
リバースプロキシで認証を前段に置く
0.0.0.0 で素のまま公開 推奨しない

よくある質問

Q1. Ollama の OpenAI 互換エンドポイントはどこですか?

結論:http://localhost:11434/v1/ です。/v1/chat/completions/v1/completions/v1/models/v1/models/{model}/v1/embeddings の 5 つが提供されています。既存の OpenAI クライアントはベース URL を差し替えるだけで動きます。

Q2. API キーは何を設定すればいいですか?

結論:何でも構いません。公式に「required but ignored」と記載されています。クライアントライブラリが要求するので 'ollama' などを渡しますが、値は検証されません。これは実質「認証が無い」という意味なので、外部公開する場合は前段に認証を用意してください。

Q3. 移植で引っかかりやすいのはどこですか?

結論:tool_choice、画像の URL 指定、nlogprobs の 3 つです。tools は通るのに tool_choice は非対応なので、ツールの強制呼び出しに依存した設計は書き換えが必要です。画像は Base64 のみ対応です。

Q4. メモリ 1GB の VPS で動きますか?

結論:動きません。手元の環境は空きメモリ 458MB で、GPU デバイスも存在しませんでした(nvidia-smi 未インストール、/dev/nvidia* 無し)。7B クラスのモデルは載らず、CPU 推論も現実的な速度になりません。

Q5. API とローカル、どちらが安いですか?

結論:起動時間の割合で決まります。ローカルは起動している限り課金され、GPU の秒課金で V100 なら常時稼働で月 41,472 円。API はトークン単位で、呼ばなければゼロです。散発的な利用なら API、常時大量に回すならローカルが有利になります。

Q6. それでもローカルを選ぶ理由は何ですか?

結論:データを外に出さないためです。個人情報やトークンが混ざったログを外部 API に送れないという制約があるなら、費用の比較に関係なくローカルが唯一の選択肢になります。

まとめ

Ollama の OpenAI 互換エンドポイントは、ベース URL の差し替えだけで既存のクライアントが動くところまでよくできています。詰まるのは互換性の穴と、置き場所のほうです。

  • 🎯 移植tool_choice / 画像 URL / n / logprobs を先に検索する
  • 🎯 置き場所 → 一般的な VPS には GPU が無い。推論用は別の箱
  • 🎯 公開API キーは検証されない。素で 0.0.0.0 に開けない

仕様と価格は変わります。この記事の数値は 2026年8月16日時点のものです。GPU の価格感は画像生成を VPS でやる話、API 側の費用はLLM API のコスト最適化、常駐の組み方はsystemd のユニットファイルにまとめています。

読んで頂いて有り難うございます!