blog

Ollama API完全リファレンス|エンドポイント・実装・運用設定【2026年版】

Ollama API完全リファレンス|エンドポイント・実装・運用設定【2026年版】

Ollama APIとは――ローカルLLMをHTTP経由で操るしくみ

Ollama APIは、ローカルマシン上で動作するオープンウェイトLLMをREST形式のHTTPリクエストで操作するためのインターフェースである。デフォルトでは http://localhost:11434 に待ち受け、curl一行・Pythonの数行でテキスト生成・マルチターンチャット・埋め込みベクトル取得まで呼び出せる。

クラウドAPIと決定的に異なる点は、推論処理がすべて手元のハードウェアで完結することだ。リクエストの内容が外部に送出されないため、機密性の高い業務文書や社内ナレッジへの適用において、データガバナンス上の懸念を解消しやすい。日本原子力研究開発機構(JAEA)が公開した技術報告書では、スーパーコンピュータを用いたオンプレミス生成AI基盤の構築においてOllamaが採用されており、機密性・閉域性を要する環境での実績が確認できる(出典:JAEA-Technology-2025-017、https://jopss.jaea.go.jp/pdfdata/JAEA-Technology-2025-017.pdf)。

本記事では、Ollama APIの全エンドポイント仕様、環境変数による運用設定、OpenAI互換APIの活用、Python/JavaScript公式クライアントの実装パターン、そして実運用で遭遇しやすいトラブルシューティングを技術者の視点で解説する。Ollama自体の概要については Ollamaとは を、インストール手順については Ollama導入ガイド を参照されたい。

Ollama APIアーキテクチャ概略図クライアントPython / JS / curlHTTP RESTOllama Serverlocalhost:11434/api/generate/api/chat /v1/chat/completionsllama.cpp / MLXモデルQwen3 / Gemma4 等
Ollama APIのアーキテクチャ概略。クライアントはHTTP RESTでOllamaサーバーに接続し、llama.cpp(またはApple Silicon向けMLX)経由でモデルを推論する。

APIサーバーの起動と環境変数による運用設定

Ollamaをインストールすると、macOSおよびWindowsではバックグラウンドサービスとして自動起動する。Linuxでは systemctl start ollama で起動する。明示的に起動する場合は以下を用いる。

ollama serve

起動後は http://localhost:11434 でHTTPリクエストを受け付ける。疎通確認は次の一行で行える。

curl http://localhost:11434/
# => "Ollama is running" と返れば正常

主要環境変数

待ち受けアドレス・CORS・モデル保存先・同時処理数など、本番運用に直結する設定は環境変数で制御する。

変数名 デフォルト値 用途・実装上の注意
OLLAMA_HOST 127.0.0.1:11434 待ち受けアドレスとポート。0.0.0.0:11434でLAN公開可能になるが、後述のセキュリティ考慮が必要
OLLAMA_ORIGINS (未設定) CORSを許可するオリジンをカンマ区切りで指定。ブラウザから直接呼び出す場合に必要
OLLAMA_MODELS ~/.ollama/models モデル保存先。大容量モデルを別ドライブに置く場合に変更する
OLLAMA_NUM_PARALLEL 1 同時処理リクエスト数の上限。増やすほどVRAMを多く消費する
OLLAMA_MAX_LOADED_MODELS 1 同時にメモリへ展開するモデル数。マルチモデル運用時に増やす
OLLAMA_KEEP_ALIVE 5m 最終リクエスト後にモデルをメモリへ保持する時間。-1で常駐化

フロントエンド開発環境(Vite等、ポート5173)からOllama APIを直接呼び出す構成では、OLLAMA_HOST=0.0.0.0:11434OLLAMA_ORIGINS=http://localhost:5173 を組み合わせるのが典型的な設定だ。

主要エンドポイント完全リファレンス

Ollama APIは「ネイティブAPI」と「OpenAI互換API」の2系統を提供する。ネイティブAPIはOllama固有の機能(モデル管理・埋め込みなど)にフルアクセスできる。OpenAI互換APIは既存のOpenAIベースコードを最小の変更でローカルLLMへ切り替えるための互換レイヤーだ。

ネイティブAPIエンドポイント一覧

メソッド エンドポイント 機能
POST /api/generate テキスト生成(単発プロンプト)
POST /api/chat マルチターンチャット
POST /api/embeddings テキスト埋め込みベクトル取得
POST /api/pull モデルのダウンロード(進捗はNDJSONストリームで返る)
POST /api/push カスタムモデルのアップロード
POST /api/create Modelfileからカスタムモデル作成
POST /api/copy モデルのコピー
DELETE /api/delete モデルの削除
GET /api/tags ローカルモデル一覧取得
POST /api/show モデル情報の詳細取得(Modelfile・パラメータ等)
GET /api/ps 現在メモリに展開中のモデル一覧
GET/HEAD/POST /api/blobs/:digest Blobファイルの存在確認・取得・プッシュ

/api/generate ― テキスト生成

単一プロンプトに対してモデルが応答を返す最も基本的なエンドポイントだ。デフォルトではNDJSON(改行区切りJSON)形式でトークンを逐次ストリーミングする。開発初期やスクリプト用途では stream: false で最終レスポンスを一括取得するほうが扱いやすい。

curl http://localhost:11434/api/generate \
  -d '{
    "model": "qwen3:8b",
    "prompt": "Rustの所有権を一言で説明してください",
    "stream": false
  }'

主要なリクエストパラメータを以下に示す。

パラメータ 説明
model string(必須) 使用するモデル名(例:qwen3:8b、gemma4:12b)
prompt string(必須) 入力プロンプトテキスト
system string システムプロンプト(Modelfileの設定を上書き)
stream bool trueでNDJSONストリーミング(デフォルトtrue)
images string[] Base64エンコード画像(マルチモーダルモデル用)
format string / object "json"またはJSON Schemaオブジェクトで構造化出力を指定
options object temperature、top_p、num_ctx等の推論パラメータ
keep_alive string / int モデルをメモリに保持する時間(例:”10m”、-1で常駐)

/api/chat ― マルチターンチャット

会話履歴を messages 配列で渡すエンドポイントだ。OpenAI Chat Completions APIに近い構造を持つため、既存コードの移行コストが低い。

curl http://localhost:11434/api/chat \
  -d '{
    "model": "qwen3:8b",
    "messages": [
      {"role": "system", "content": "あなたは日本語で回答するアシスタントです"},
      {"role": "user", "content": "量子コンピュータとは何ですか?"},
      {"role": "assistant", "content": "量子コンピュータは量子力学の原理を..."},
      {"role": "user", "content": "古典コンピュータと何が違うのですか?"}
    ],
    "stream": false
  }'

実装上の注意点が一点ある。num_ctx(コンテキストウィンドウ長)を超えると古いメッセージが切れる。長期セッションではサーバーサイドでmessages配列をトリミングするロジックが必要になる。コンテキスト長の詳細は推論パラメータの節を参照されたい。

/api/embeddings ― 埋め込みベクトル取得

RAG(検索拡張生成)や類似文書検索のバックエンドとして機能するエンドポイントだ。汎用LLMではなく、ベクトル化専用モデル(nomic-embed-textmxbai-embed-large等)を指定するほうが精度・速度のバランスに優れる。

curl http://localhost:11434/api/embeddings \
  -d '{
    "model": "nomic-embed-text",
    "prompt": "東京の天気予報サービス"
  }'

レスポンスの embedding フィールドに浮動小数点数の配列が返る。これをChromaやFAISSなどのベクトルストアへ格納し、検索結果を /api/chat に渡す構成が社内RAGの典型的な実装パターンになる。材料科学分野では、NIMS(物質・材料研究機構)のMaterials Data Repositoryにおいても、ドキュメント検索とLLM生成を組み合わせた類似技術の研究が進んでいる(出典:Digital Discovery – MDR、https://mdr.nims.go.jp/filesets/a89028d2-af55-4305-9b93-016bd3f9daa7/download)。

OpenAI互換API――既存コードのベースURLを差し替えるだけ

Ollamaは2026年時点でOpenAI互換のエンドポイントを提供しており、OpenAI SDKや対応ライブラリをそのまま流用してローカルLLMへ切り替えられる(出典:DevelopersIO、https://dev.classmethod.jp/articles/local-llm-guide-2026/)。さらに同記事によれば、Anthropic API互換のエンドポイント(/v1/messages)も提供されており、Claudeクライアントとの互換性も拡張されている。

互換エンドポイント 対応するネイティブAPI 備考
POST /v1/chat/completions /api/chat 最もよく使われる互換エンドポイント
POST /v1/completions /api/generate レガシーCompletions互換
POST /v1/embeddings /api/embeddings OpenAI Embeddings互換
GET /v1/models /api/tags ローカルモデル一覧をOpenAI形式で返す
POST /v1/messages /api/chat Anthropic API互換(2026年追加)

OpenAI Python SDKでOllamaを呼び出す実装例を示す。変更点はベースURLとapi_keyの2か所のみだ。

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # 任意の文字列を渡せばよい
)

response = client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "Pythonで素数判定を書いてください"}],
)
print(response.choices[0].message.content)

この互換性により、LangChain・LlamaIndex・Semantic KernelなどのフレームワークからOllamaを透過的に利用できる。OpenAIベースのプロトタイプをローカル実行へ移行してコスト・レイテンシを検証する際に有効な手段だ。クラウドAPIとの料金比較については Ollamaの料金 も参照されたい。他のAPIとの比較については Ollama比較記事DeepSeek APIMistral API も実装の参考になる。

Python・JavaScript公式クライアントの実装パターン

curlによる直接呼び出しのほか、公式クライアントライブラリ(ollama-python、ollama-js)を用いると型安全性と非同期対応が得られる。

Pythonクライアント(ollama-python)

pip install ollama
import ollama

# ストリーミング生成
for chunk in ollama.generate(
    model="qwen3:8b",
    prompt="ソートアルゴリズムの種類を列挙して",
    stream=True
):
    print(chunk["response"], end="", flush=True)

# チャット(同期)
response = ollama.chat(
    model="gemma4:12b",
    messages=[{"role": "user", "content": "機械学習とは"}],
)
print(response.message.content)
# 非同期チャット(FastAPIなどのASGIフレームワークと組み合わせる場合)
import asyncio
import ollama

async def main():
    client = ollama.AsyncClient()
    response = await client.chat(
        model="qwen3:8b",
        messages=[{"role": "user", "content": "非同期処理のメリットは?"}],
    )
    print(response.message.content)

asyncio.run(main())

JavaScriptクライアント(ollama-js)

npm install ollama
import ollama from 'ollama';

// ストリーミングチャット
const stream = await ollama.chat({
  model: 'qwen3:8b',
  messages: [{ role: 'user', content: 'TypeScriptの型システムを説明して' }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.message.content);
}

構造化出力(JSONスキーマ指定)

format パラメータにJSON Schemaを渡すと、モデルの出力をスキーマに強制する構造化出力(Structured Output)が有効になる。後段のパース処理が格段に安定するため、APIレスポンスをプログラムで処理する用途には積極的に使いたい機能だ。

import json
import ollama

response = ollama.chat(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "東京と大阪の都市情報をまとめて"}],
    format={
        "type": "object",
        "properties": {
            "cities": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {"type": "string"},
                        "population": {"type": "number"},
                        "feature": {"type": "string"}
                    },
                    "required": ["name", "population", "feature"]
                }
            }
        },
        "required": ["cities"]
    },
)
data = json.loads(response.message.content)
print(data)
Ollama APIを通じてローカルLLMがドキュメントを処理し構造化JSON出力を生成するフロー図
Ollama APIを通じてローカルLLMがドキュメントを処理し、構造化JSON出力を生成するフロー

推論パラメータ(options)のチューニング指針

options オブジェクトで推論の挙動を制御する。品質・速度・多様性のトレードオフは用途に応じて調整する必要がある。

パラメータ デフォルト 実装上の指針
temperature 0.8 コード生成・事実抽出は0.0〜0.3、創作用途は0.7〜1.0
top_p 0.9 temperatureと組み合わせて多様性を調整
top_k 40 低い値ほど出力が安定する
num_ctx 2048 長文処理は4096〜32768に拡張。VRAM消費が比例して増加するため注意
num_predict -1(無制限) 最大出力トークン数の上限を設けたい場合に正の整数を指定
seed 0(ランダム) 固定値を指定すると再現可能な出力が得られる。テスト・回帰検証に有用
stop (なし) 指定文字列が出力されたら停止(例:["</s>", "Human:"]
num_gpu (自動) 0でCPU専用推論に強制。GPU認識問題の切り分けに使う
repeat_penalty 1.1 繰り返し抑制。1.0でペナルティなし

モデル管理API・セキュリティ設定・トラブルシューティング

モデル管理APIをプログラムから操作する

CLIで行うモデル操作はすべてAPIからも実行できる。CI/CDパイプラインや管理ツールのバックエンドに組み込む際に使う。

# ローカルにあるモデル一覧
curl http://localhost:11434/api/tags

# 現在メモリに展開されているモデル確認
curl http://localhost:11434/api/ps

# 特定モデルの詳細情報
curl http://localhost:11434/api/show \
  -d '{"name": "qwen3:8b"}'

# モデルをダウンロード(進捗がNDJSONストリームで返る)
curl http://localhost:11434/api/pull \
  -d '{"name": "gemma4:12b"}'

# モデルを削除
curl -X DELETE http://localhost:11434/api/delete \
  -d '{"name": "gemma4:12b"}'

Modelfileを用いてシステムプロンプトを組み込んだカスタムモデルをAPIから動的に生成することも可能だ。

curl http://localhost:11434/api/create \
  -d '{
    "name": "my-support-bot",
    "modelfile": "FROM qwen3:8b\nSYSTEM あなたは日本語でサポートを行うアシスタントです。\nPARAMETER temperature 0.2"
  }'

セキュリティ設計の考え方

Ollamaはデフォルトでローカルホストのみ待ち受けるため、インターネットへの直接公開は設計の前提にない。社内サーバーやクラウドVMで外部公開する場合は以下の点を考慮する必要がある。

Ollama自体は現時点でAPIキー認証機能を持たない。外部公開する場合はnginxやTraefikなどのリバースプロキシを前段に置き、Basic認証・Bearer認証・IPホワイトリストを実装するのが定番パターンだ。

注意:OLLAMA_HOSTを0.0.0.0に設定する場合
LAN上の他マシンからアクセスできる反面、ファイアウォール設定が不十分な環境ではネットワーク内の全ホストからAPI呼び出しが可能になる。本番環境ではリバースプロキシと認証レイヤーを必ず設けること。

ブラウザのフロントエンドから直接Ollama APIを呼び出す場合、OLLAMA_ORIGINSで許可オリジンを設定する。ワイルドカード(*)も受け付けるが、認証なしの環境では必要なオリジンだけを列挙するほうが安全だ。

export OLLAMA_ORIGINS="http://localhost:3000,http://localhost:5173"
ollama serve

実運用でのトラブルシューティング

症状・エラー 原因 対処法
Connection refused(port 11434) Ollamaサービスが未起動 ollama serveまたはsystemctl start ollama
model not found 指定モデルが未ダウンロード ollama pull <model>で事前取得
CUDA out of memory VRAM不足 量子化モデル(:4b、:q4_0等)に切り替え、num_ctxを下げる
レスポンスが極端に遅い CPU推論になっている GPUドライバを確認し、ollama psでGPU使用状況を確認する
JSONパースエラー(stream:true時) NDJSONを一括パースしようとしている 行ごとに分割してjson.loadsするか、stream: falseを使う
CORSエラー(ブラウザから呼び出し時) OLLAMA_ORIGINSが未設定 OLLAMA_ORIGINSに呼び出し元オリジンを追加して再起動
モデルのロードに数十秒かかる keep_alive経過でアンロードされた keep_alive: -1で常駐化、またはウォームアップリクエストを事前送信する

ユースケース別の実装パターン

社内ドキュメントRAG:社内マニュアルや議事録を /api/embeddings でベクトル化してChromaに格納し、検索クエリも同様にベクトル化して類似ドキュメントを取得、その内容を /api/chat に渡して回答を生成する。ベクトル化モデルには nomic-embed-text、回答生成にはOllamaライブラリで配布されているQwen3系が実用的なバランスだ。すべてローカルで完結するため、機密情報をクラウドに送出する必要がない。

コード生成・レビュー自動化:コーディング特化モデル(qwen3-coderdeepseek-coder-v2等)をAPIで呼び出し、CIパイプラインに組み込んでコード自動レビューやテストコード生成を行う。temperature: 0.0〜0.1 に設定すると一貫性の高い出力が得られる。

バッチ処理・文書変換:大量文書をAPIで順次処理する場合、OLLAMA_NUM_PARALLEL を増やすことで同時処理数を上げられる。ただし並列数に比例してVRAM消費が増加するため、利用可能なVRAM量から上限を算出して設定することが重要だ。

Ollama APIの活用をさらに深めたい場合は、Ollama導入ガイドでのセットアップ手順、他ローカルLLMツールとの比較、そして Claude Code APIの料金体系 も参考にされたい。また、Grok APIディープラーニング関連記事 も実装の視野を広げる参考になる。

なお、弊社クリスタルメソッド株式会社が開発するバーチャルヒューマン/AIアバターソリューション「DeepAI」は、実在の人物の容姿・表情・声・振る舞いをデジタル空間で再現し、接客・研修・面接練習・広報などの用途で活用されている。ローカルLLMをAPIとして活用する文脈とは異なる製品領域だが、AIの実装・活用に関心をお持ちの方は ブログトップ から関連情報をご参照いただきたい。

参考文献

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について編集方針

AIブログ購読

 
クリスタルメソッドがお届けする
AIブログの更新通知を受け取る

Study about AI

AIについて学ぶ

  • 生成AIオンプレミス導入と規制リスク——Anthropic輸出規制が示す自社インフラ回帰の必然

    生成AIオンプレミス導入と規制リスク——Anthropic輸出規制が示す自社インフラ回帰の必然

    Anthropicの輸出規制命令——生成AIオンプレミス導入が「規制リスク対策」に変わった瞬間 2026年6月、米国政府はAnthropicに対し、新モデル「M...

  • EU AI規制 企業対応の実務——ENISAとAnthropicの協議が示す日本企業への含意

    EU AI規制 企業対応の実務——ENISAとAnthropicの協議が示す日本企業への含意

    ENISAがAnthropicと直接協議——EU AI規制の監視が生成AIへ本格移行 欧州サイバーセキュリティ機関ENISA(European Union Ag...

  • Claude障害が招く業務影響と対策——AI依存リスクの経営管理指針

    Claude障害が招く業務影響と対策——AI依存リスクの経営管理指針

    Claude障害の実態:2026年6月インシデントが示すもの 2026年6月18日、AnthropicのAIチャットボット「Claude」(claude.ai)...

View more