blog
AIブログ
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:11434とOLLAMA_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-textやmxbai-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に切り替えられる点が大きな利点です。
POST /v1/chat/completionsPOST /v1/completionsPOST /v1/embeddingsGET /v1/models
OpenAIのhttps://api.openai.com/v1をhttp://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)

マルチモーダル対応――画像を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ホワイトリストを実装するのが定番パターンです。
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-coderやdeepseek-coder-v2)をAPIで呼び出し、CIパイプラインに組み込んでコードの自動レビューやテストコード生成を行う構成です。temperature: 0.0〜0.1に設定すると一貫性の高いコードが得られます。
パターン3:バッチ処理・文書変換
大量の文書をAPIで順次処理する場合、OLLAMA_NUM_PARALLELと
参考文献
Study about AI
AIについて学ぶ
-
Meta インド データセンター AIインフラ——Reliance 168MW契約の深層と日本企業の実務対応
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...
-
ワーナー Sureel AI 音楽 著作権——買収の意味と日本企業への示唆
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...
-
Vector Lakebase ベクターDB RAG——Zillizが示す統合AIデータ基盤の論点
監修 河合 継(クリスタルメソッド株式会社 代表取締役) AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番...