blog

Ollama API の使い方|ローカルLLMをAPI化(Python等)【2026年版】

監修

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

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

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

Ollama APIは、ローカルマシン上で動かすLLM(大規模言語モデル)をREST形式のHTTPリクエストで操作するためのインターフェースです。デフォルトではhttp://localhost:11434に起動し、curl一行・Pythonの数行でテキスト生成・チャット・埋め込みベクトル取得まで呼び出せます。クラウドAPIと異なりデータが外部に送出されないため、機密性の高い業務文書や社内ナレッジへの適用でも安心して使えるのが最大の特長です。

本記事ではOllama APIの全エンドポイント仕様、認証・CORSなどの運用設定、Python/JavaScript統合の実践パターン、そして実務で遭遇しやすいトラブルシューティングまでを網羅します。Ollama自体の概要はOllamaとは、インストール手順はOllama導入ガイドをあわせてご参照ください。

APIサーバーの起動と基本設定

Ollamaをインストールすると、バックグラウンドサービスとして自動起動するケースが多いですが、明示的に起動する場合は以下のコマンドを使います。

ollama serve

起動後はhttp://localhost:11434でHTTPリクエストを受け付けます。正常起動の確認はシンプルです。

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

ホスト・ポートのカスタマイズ

デフォルトのポートや待ち受けアドレスは環境変数で変更できます。LAN内の他マシンやDockerコンテナからアクセスさせたい場合に必要です。

環境変数一覧(主要)

変数名 デフォルト 用途
OLLAMA_HOST 127.0.0.1:11434 待ち受けアドレスとポートを指定
OLLAMA_ORIGINS (なし) CORSを許可するオリジンをカンマ区切りで指定
OLLAMA_MODELS ~/.ollama/models モデル保存先ディレクトリ
OLLAMA_NUM_PARALLEL 1 同時処理リクエスト数の上限
OLLAMA_MAX_LOADED_MODELS 1 同時にメモリに展開するモデル数
OLLAMA_KEEP_ALIVE 5m 最終リクエスト後にモデルをメモリに保持する時間

実務ではOLLAMA_HOST=0.0.0.0:11434OLLAMA_ORIGINS=http://localhost:3000のように組み合わせることが多く、フロントエンド開発環境から直接Ollamaへアクセスする構成でよく使います。

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

Ollamaが提供するAPIエンドポイントは2系統あります。ひとつはOllama独自のネイティブAPI、もうひとつはOpenAI互換APIです。それぞれを詳しく解説します。

ネイティブAPI一覧

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

/api/generate ― テキスト生成

最も基本的なエンドポイントです。単一プロンプトに対してモデルが応答を返します。デフォルトではレスポンスはストリーミング形式(NDJSON)で逐次返ってきます。

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

stream: falseにすると最終レスポンスを一括で受け取れます。開発初期やシンプルなスクリプトではこちらが扱いやすいです。主要なリクエストパラメータは以下の通りです。

パラメータ 説明
model string(必須) 使用するモデル名(例:qwen3:8b, gemma4:12b, llama3.2)
prompt string(必須) 入力プロンプトテキスト
system string システムプロンプト(Modelfileの設定を上書き)
stream bool trueでストリーミング(デフォルトtrue)
images string[] Base64エンコード画像(マルチモーダルモデル用)
format string / object "json"またはJSON Schemaオブジェクトで構造化出力を指定
options object temperature, top_p, num_ctx等の推論パラメータ
context int[] 前レスポンスのcontextを渡すと会話を継続できる
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
  }'

実務でのチャットボット実装では、会話履歴をサーバーサイドで管理してmessages配列を組み立てる形が基本パターンです。ただしnum_ctx(コンテキスト長)を超えると古い会話が切れるため、長期セッションではトリミングロジックが必要になります。

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

RAG(検索拡張生成)や類似文書検索のバックエンドとして使います。ベクトル化専用モデル(nomic-embed-textmxbai-embed-large)を使うのが精度・速度の観点で推奨です。

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

レスポンスのembeddingフィールドに浮動小数点数の配列が返ります。これをChromaやFAISSなどのベクトルストアに格納する構成が、社内RAGの典型的な実装パターンです。

OpenAI互換API――既存コードをそのまま流用する

OllamaはOpenAI互換のエンドポイントを提供しています。OpenAI SDKや既存のOpenAI対応ライブラリをベースURLだけ差し替えてローカルLLMに切り替えられる点が大きな利点です。

OpenAI互換エンドポイント

  • POST /v1/chat/completions
  • POST /v1/completions
  • POST /v1/embeddings
  • GET /v1/models
変更点はベースURLのみ

OpenAIのhttps://api.openai.com/v1http://localhost:11434/v1に変えるだけ。APIキーは任意文字列(例:"ollama")を渡せばOK。

# OpenAI Python SDKでOllamaを呼び出す例
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は非常に有効です。

Python・JavaScript公式クライアントの実践的な使い方

curlによる直接呼び出しのほか、公式クライアントライブラリが提供されており、より高度な制御が可能です。

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スキーマ指定)

APIレスポンスをJSONで確実に受け取りたい場合、formatパラメータにJSON Schemaを渡します。Ollamaはモデルの出力を強制的にスキーマに合わせる(structured output)機能を持っており、後段のパース処理が格段に安定します。

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"]
    },
)
import json
data = json.loads(response.message.content)
print(data)
ローカルLLMがAPIを通じてドキュメントを処理し構造化出力を生成するイメージ
ローカルLLMがAPIを通じてドキュメントを処理し構造化出力を生成するイメージ

マルチモーダル対応――画像をAPIで処理する

Gemma 4やQwen3-VLなどのマルチモーダルモデルを使うと、画像をBase64エンコードしてAPIに渡すことができます。

import ollama, base64

with open("diagram.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

response = ollama.chat(
    model="gemma4:12b",
    messages=[{
        "role": "user",
        "content": "この図を日本語で説明してください",
        "images": [image_b64],
    }],
)
print(response.message.content)

実務では、スキャンした書類の内容抽出やUI画面のキャプチャから操作手順を自動生成するユースケースで効果を確認しています。ただしモデルサイズが大きいため、VRAM不足になりやすく、num_ctxを抑えるなどの調整が必要な場面もあります。

推論パラメータ(options)の詳細設定

optionsオブジェクトで推論の挙動を細かく制御できます。品質・速度・多様性のバランスを用途に応じてチューニングするのが実践的なAPIの使い方です。

パラメータ デフォルト 推奨用途・目安
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(無制限) 最大出力トークン数。-1で無制限、-2で最大まで
seed 0(ランダム) 固定値を指定すると再現可能な出力(テスト・デバッグ用)
stop (なし) 指定文字列が出力されたら停止(例:[““, “Human:”])
num_gpu (自動) GPUに積むレイヤー数。0でCPU専用推論
repeat_penalty 1.1 繰り返し抑制。1.0でペナルティなし

モデル管理API――プログラムからモデルを制御する

CLIで行うモデル操作は、すべてAPIからも実行できます。CI/CDパイプラインや管理ツールのバックエンドとして活用できます。

モデル一覧取得と情報確認

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

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

# 特定モデルの詳細情報(Modelfile・パラメータ等)
curl http://localhost:11434/api/show \
  -d '{"name": "qwen3:8b"}'

モデルのプル・削除

# モデルをダウンロード(進捗がストリームで返る)
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呼び出しが可能になります。本番環境ではリバースプロキシ+認証レイヤーを必ず設けてください。

CORS設定

ブラウザのフロントエンドから直接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)を一括パースしようとしている 行ごとに分割してjson.loadsする、またはstream: falseを使う
CORSエラー(ブラウザから呼び出し時) OLLAMA_ORIGINSが未設定 環境変数OLLAMA_ORIGINSに呼び出し元オリジンを追加
モデルのロードに数十秒かかる keep_alive経過でアンロードされた keep_alive: -1で常駐化、またはウォームアップリクエストを送る

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

パターン1:社内ドキュメントRAG

社内マニュアルや議事録をベクトル化してChromaに格納し、/api/embeddingsで検索クエリをベクトル化、類似ドキュメントを取得して/api/chatで回答を生成する構成です。すべてローカル完結のため、機密情報をクラウドに送らずに済みます。ベクトル化モデルにはnomic-embed-text、回答生成にはOllamaライブラリで配布されているqwen3系やllama3.2が実用的なバランスです。

パターン2:コード生成・レビュー自動化

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

パターン3:バッチ処理・文書変換

大量の文書をAPIで順次処理する場合、OLLAMA_NUM_PARALLEL

参考文献

    AIブログ購読

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

    Study about AI

    AIについて学ぶ

    • ChatGPT スーパーアプリ活用のメリットと注意点——日本企業の導入判断ガイド

      ChatGPT スーパーアプリ活用のメリットと注意点——日本企業の導入判断ガイド

      監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...

    • Ollama AIエージェント完全ガイド――構築・選定・運用の要点

      Ollama AIエージェント完全ガイド――構築・選定・運用の要点

      監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...

    • ollama rag 構築の完全ガイド|設計・実装・本番運用まで

      ollama rag 構築の完全ガイド|設計・実装・本番運用まで

      監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...

    View more