目次
Ollama API 入門:curl で /api/chat と /api/generate を呼び出す
Ollama はバックグラウンドで HTTP API を提供し、デフォルトのアドレスは http://localhost:11434 です。CLI、Open WebUI、各種ライブラリは、この API を通じてモデルと通信します。
/api/chat:会話
curl http://localhost:11434/api/chat -d '{
"model": "qwen3:8b",
"messages": [
{ "role": "system", "content": "日本語で回答してください。" },
{ "role": "user", "content": "空が青いのはなぜですか?2文で説明してください。" }
],
"stream": false
}'
応答の形式は次のとおりです。これは qwen3:0.6b に hi を送った実際の応答です(Ollama 0.40):
{
"model": "qwen3:0.6b",
"created_at": "2026-10-12T14:04:31.457272357Z",
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today? 😊 If you have any questions or need help, feel free to ask!",
"thinking": "Okay, the user just said \"hi\" and I need to respond. ..."
},
"done": true,
"done_reason": "stop",
"total_duration": 10507470186,
"load_duration": 26072287,
"prompt_eval_count": 11,
"prompt_eval_duration": 274566000,
"eval_count": 112,
"eval_duration": 10179865000
}
message.content:モデルの回答です。message.thinking:推論モデルの思考過程です。Qwen3 はデフォルトで思考します。不要な場合はリクエストに"think": falseを加えます。done_reason:stopは正常終了、lengthは長さの上限に達して切り詰められたことを表します。- 時間フィールドの単位はすべてナノ秒です(10507470186 ≈ 10.5 秒)。
eval_count ÷ eval_durationで、1 秒あたりに生成されたトークン数を計算できます。
複数ターンの会話
API 自体は以前の会話を記憶しません。会話を続けるには、履歴のメッセージをすべて含める必要があります。
{
"model": "qwen3:8b",
"messages": [
{ "role": "user", "content": "私の名前は小明です" },
{ "role": "assistant", "content": "こんにちは、小明さん!" },
{ "role": "user", "content": "私の名前は何ですか?" }
]
}
role には system、user、assistant、tool(ツールの結果。 ツール呼び出しを参照)を指定できます。
/api/generate:単発のテキスト生成
会話形式が必要ない場合は、/api/generate を使えます。
curl http://localhost:11434/api/generate -d '{
"model": "qwen3:8b",
"prompt": "次の文を英語に翻訳してください:今日はとてもいい天気です",
"stream": false
}'
回答は response フィールドに含まれます。通常は /api/chat を優先して使うことをおすすめします。
ストリーミング応答
stream のデフォルトは true です。モデルが短いテキストを生成するたびに JSON が 1 行返され、最後の行では done が true になります。
curl http://localhost:11434/api/chat -d '{
"model": "qwen3:8b",
"messages": [{ "role": "user", "content": "1 から 5 まで数えてください" }]
}'
{"message":{"role":"assistant","content":"1"},"done":false}
{"message":{"role":"assistant","content":"、2"},"done":false}
...
{"message":{"role":"assistant","content":""},"done":true,"eval_count":12}
ストリーミングを使うとユーザーはすぐに回答を確認できるため、ほとんどのチャットインターフェースで使われています。
options:パラメーターの調整
{
"model": "qwen3:8b",
"messages": [{ "role": "user", "content": "キャッチコピーを 1 つ書いてください" }],
"options": {
"temperature": 0.9,
"num_ctx": 8192,
"num_predict": 100,
"seed": 42
},
"stream": false
}
使用できるパラメーターは Modelfile の PARAMETER と同じです。Modelfile のチュートリアルを参照してください。
keep_alive:モデルの常駐を制御する
{ "model": "qwen3:8b", "keep_alive": "1h" }
modelのみを送信し、メッセージを送らない場合は、モデルを事前に読み込めます。"keep_alive": 0にすると、回答後すぐにアンロードされます。"keep_alive": -1にすると、アンロードされません。
画像入力
視覚モデルには、メッセージに base64 エンコードした画像を追加できます。
IMG=$(base64 -w0 photo.jpg) # macOS では base64 -i photo.jpg を使用
curl http://localhost:11434/api/chat -d "{
\"model\": \"gemma3\",
\"messages\": [{
\"role\": \"user\",
\"content\": \"この画像を説明してください\",
\"images\": [\"$IMG\"]
}],
\"stream\": false
}"
思考モード
思考に対応したモデルでは、think で制御できます。
{
"model": "qwen3:8b",
"messages": [{ "role": "user", "content": "strawberry には r がいくつありますか?" }],
"think": true,
"stream": false
}
思考内容は message.thinking、最終回答は message.content に含まれます。think に false を指定することもできます。一部のモデルでは "low"、"medium"、"high" などのレベルもサポートされています。
その他のよく使うエンドポイント
| メソッドとパス | 用途 |
|---|---|
GET /api/tags | ダウンロード済みモデルの一覧(ollama list と同じ) |
GET /api/ps | 読み込み済みモデルの一覧 |
POST /api/show | モデル情報 |
POST /api/pull | モデルのダウンロード |
DELETE /api/delete | モデルの削除 |
POST /api/embed | テキスト埋め込みの生成。テキスト埋め込みと RAGを参照してください。 |
GET /api/version | Ollama のバージョン |
curl http://localhost:11434/api/tags
curl http://localhost:11434/api/show -d '{"model": "qwen3:8b"}'
OpenAI 互換 API
Ollama は /v1 に OpenAI API 互換のエンドポイントも提供します。
| エンドポイント | 説明 |
|---|---|
/v1/chat/completions | 会話 |
/v1/completions | テキスト補完 |
/v1/embeddings | 埋め込み |
/v1/models | モデル一覧 |
/v1/responses | Responses API |
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3:8b",
"messages": [{ "role": "user", "content": "こんにちは" }]
}'
OpenAI 向けに書かれた多くのプログラムやツールは、base URL を http://localhost:11434/v1 に変更し、API key に任意の値を設定するだけで、ローカルモデルを使えます。Python の例は次のセクションを参照してください。
更新日 2026年10月12日