~/tools / ローカルLLMをサーバーで動かす / Ollama API Request Builder
Ollama API Request Builder — /api/chat への curl リクエストを作る
フォームに入力して、Ollama の /api/chat エンドポイントへのリクエストを作ります。モデル、システムメッセージとユーザーメッセージ、format と JSON Schema による構造化出力、ツール定義、思考(thinking)、ストリーミング、temperature や num_ctx などのオプション、ストップシーケンス、keep_alive を指定できます。そのまま実行できる curl コマンドと JSON ボディが得られます。すべてのフィールドは公式の Ollama API リファレンスに載っているものです。入力した内容はブラウザの外に出ません。
オプション、ストップシーケンス、keep_alive
空の欄は送信されないため、モデルの設定がそのまま使われます。
curl コマンド
Ollama に接続できるマシンのターミナルで実行します。
curl http://localhost:11434/api/chat -d '{
"model": "qwen3:4b",
"messages": [
{
"role": "user",
"content": "Tell me about Canada."
}
],
"format": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"capital": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"capital",
"languages"
]
},
"options": {
"temperature": 0
},
"stream": false
}'JSON ボディ
{
"model": "qwen3:4b",
"messages": [
{
"role": "user",
"content": "Tell me about Canada."
}
],
"format": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"capital": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"capital",
"languages"
]
},
"options": {
"temperature": 0
},
"stream": false
}フィールドは、2026-11-03 時点の /api/chat の Ollama API リファレンスに記載されているとおりです。 Ollama API: チャットメッセージを生成する
すべてブラウザの中で処理します。ツールはコマンドを書くだけで、何も送信しません。
Ollama の /api/chat エンドポイントは、モデルと messages のリストを含む JSON ボディを受け取り、さらにいくつかの任意のフィールドを指定できます。関数呼び出し用の tools、JSON の答え、または JSON Schema に従う答えを求める format、temperature や num_ctx などの設定を渡す options、そして stream、think、keep_alive です。このボディをターミナルで手書きすると間違えやすくなります。カンマが1つ抜けると壊れ、メッセージ中のアポストロフィでシェルの引用符が閉じてしまい、文字として入力した数値が数値として読まれないこともあります。このツールは、フォームからボディを組み立て、Ollama のドキュメントにある例の形の curl コマンドに入れます。アポストロフィはシェル向けにエスケープします。JSON Schema とツールのリストが正しい JSON であること、各ツールが API リファレンスの求める type、name、parameters を備えていること、options が正しい種類の数値であることを確認します。生成したコマンドは、qwen2.5:7b を使って Ollama 0.40.11 に対して実行しました。JSON Schema を指定したリクエストではその形の答えが返り、ツールを指定したリクエストではツール呼び出しが返り、ストリーミング、json モード、ストップシーケンス、keep_alive もエラーなく動きました。
このツールの計算部分は、オープンソース(MIT ライセンス)で公開しています。 github.com/seigo5555/toolkitbox-lib/src/ollama-api-request.ts
こんな時に使う
- コードを書く前に、自分のサーバーで構造化出力を試す: JSON Schema を貼り付けて、モデルが何を返すかを見る
- アプリケーションで使う予定のツール定義で、モデルが自分の関数を呼び出すかを確認する
- パスワード付きの nginx プロキシの背後にある Ollama を、正しい URL と curl -u で呼び出す
使い方
- Ollama サーバーのアドレス(空にすると http://localhost:11434)とモデル名を入力し、ユーザーメッセージを書きます。必要ならシステムメッセージも書いてください。
- 出力形式を選び、ツール定義を JSON 配列として追加し、思考とストリーミングを設定します。オプションを開くと、temperature、num_ctx、シード、ストップシーケンス、keep_alive を設定できます。空の欄は出力されません。
- curl コマンドをコピーして、Ollama に接続できるマシンのターミナルで実行します。自分のコードから送りたい場合のために、JSON ボディは別に表示されます。
FAQ
stream は何をしますか?
API リファレンスでは、stream の既定値は true です。ストリーミングされた答えは、改行区切りの JSON として、1つずつ届きます。stream を false にすると、ドキュメントによれば答えは1つの JSON オブジェクトとして返ります。ストリーミングのページはこれを、処理しやすく、短いレスポンスや構造化出力に向いていると説明しています。ツールは、ストリーミングをオフにしたときだけ "stream": false を書き出します。
think にはどんな値を指定できますか?
API リファレンスによると、true は思考を求め、false は思考の出力を求めず、文字列はモデルが定義するレベルを選びます。数値には対応していません。ドキュメントには、モデルが対応する値は /api/show で調べるよう書かれており、think を設定するとツールがそのコマンドを表示します。私たちのテストでは、qwen2.5:7b では think を false にすると動き、true にすると "qwen2.5:7b" does not support thinking で拒否されました。
format の json と JSON Schema は何が違いますか?
API リファレンスによると、format には json か JSON schema を指定できます。json は、有効な JSON であれば何でもよいという指定です。スキーマは、プロパティ名や必須のものなど、正確な形を記述します。私たちのテストでは、答えはそのとおりの形になりました。ツールは、スキーマを文字列ではなくオブジェクトとして送ります。
ツール定義はどう書けばよいですか?
API リファレンスでは、常に function である type と、name と parameters を持つ function オブジェクトが必須です。parameters は引数の JSON Schema で、description は省略できます。ツールはこれらのフィールドを確認します。モデルが関数を呼び出すと決めたときは、答えにテキストではなく message.tool_calls が含まれます。
パスワード付きの Ollama はどう呼び出しますか?
プロキシのアドレス(https://ollama.example.com など)とユーザー名を入力します。ツールは、そのユーザー名を付けた -u を curl コマンドに加え、curl がパスワードを尋ねるため、パスワードがコマンドに含まれることはありません。このサイトの Ollama nginx Config Generator で、そのようなプロキシを作れます。
サーバーに何か送信されますか?
いいえ。ツールはコマンドを書くだけです。自分で実行するまで、何も送信されません。
関連する記事
- 小さなVPSでOllamaのメモリを見張るOllamaがメモリに何を載せ、どれだけの間そこに置き、どの設定で変わるのかを見ます。ollama ps、keep_alive、各種の上限を、公式FAQから。
- 自分のVPSでDifyとOllamaをつなぐ自分のVPSでDifyを動かし、モデルにOllamaを使う方法です。インストール、プラグインの入力欄、Dockerのアドレスの問題、埋め込みを公式ドキュメントからまとめました。
- 高価なPCなしでローカルLLMを始める:VPSを使う初心者ガイド高性能なPCがなくても大丈夫。VPSを借りて、小さなローカルLLMをブラウザから動かす6ステップ。メモリの見積もりから、外から守られたチャット画面まで、限界も正直に書いています。