~/tools / モデルのファイルとチャットテンプレート / Ollama Template Tester

Ollama Template Tester — Ollama の TEMPLATE を実行してプロンプトを確認

Ollama モデルの TEMPLATE(ollama show --template の出力、または Modelfile の中身)を貼り付け、会話、tools、プロンプトを加えると、Ollama がモデルに渡すテキストそのものを確認できます。特殊トークンも改行もそのまま表示されます。このツールは、Go のテンプレートの規則、Ollama のデータ(messages、tool calls、tools、think)、Ollama がテンプレートを実行する 3 つの方法を使って、Ollama と同じようにテンプレートを実行します。また、Ollama が貼り付けた TEMPLATE を使うのか、GGUF ファイルの中にあるチャットテンプレートを使うのか、そして tools や thinking のリクエストを Ollama が拒否するのはどんなときかも教えてくれます。データがブラウザの外に出ることはありません。

例

ollama show --template <model> で、手元のモデルのテンプレートを表示できます。Modelfile の TEMPLATE の後ろにある三重引用符の間のテキストも使えます。

リクエスト

/api/chat と同じ形です: role、content、必要に応じて thinking、tool_calls、tool_name、images。

/api/chat の tools と同じ形です。tools を使わないときは空のままにします。

詳細設定: モデルの SYSTEM と GGUF のチャットテンプレート

Modelfile の SYSTEM の行です。最初のメッセージが system メッセージでないとき(/api/generate では system が空のとき)に、Ollama が加えます。

貼り付けると、Ollama が TEMPLATE とこちらのどちらを使うかが分かります。GGUF Metadata Viewer で表示できます。

モデルが受け取るもの

<|im_start|>system
You are a helpful assistant.

# Tools

You may call one or more functions to assist with the user query.

You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"type": "function", "function": {get_weather Get the current weather for a city {object <nil> <nil> [city] {"city":{"type":"string","description":"City name"}}}}}
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call><|im_end|>
<|im_start|>user
What is the weather in Tokyo?<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "get_weather", "arguments": {"city":"Tokyo"}}
</tool_call><|im_end|>
<|im_start|>user
<tool_response>
{"temperature": 20}
</tool_response><|im_end|>
<|im_start|>assistant
It is 20°C in Tokyo.<|im_end|>
<|im_start|>user
Thanks!<|im_end|>
<|im_start|>assistant
954 文字、955 バイト

このテンプレートについて

Ollama の実行方法
会話全体を .Messages に入れて 1 回
使っている名前
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
対応していること(Ollama から見て)
tools

自分の Ollama で確認する

MODEL を自分のモデル名に置き換えてください。_debug_render_only は Ollama のソースコードにあるデバッグ用のオプションで、API ドキュメントには載っていないため、変わる可能性があります。応答のプロンプトは _debug_info.rendered_template にあります。

curl -s http://localhost:11434/api/chat -d '{"model":"MODEL","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is the weather in Tokyo?"},{"role":"assistant","content":"","tool_calls":[{"function":{"name":"get_weather","arguments":{"city":"Tokyo"}}}]},{"role":"tool","content":"{\"temperature\": 20}","tool_name":"get_weather"},{"role":"assistant","content":"It is 20°C in Tokyo."},{"role":"user","content":"Thanks!"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"Get the current weather for a city","parameters":{"type":"object","properties":{"city":{"type":"string","description":"City name"}},"required":["city"]}}}],"stream":false,"_debug_render_only":true}'

Modelfile に RENDERER や PARSER の行があるモデルと gpt-oss は、TEMPLATE ではなく Ollama に組み込まれたレンダラーを使います。

会話がコンテキスト(num_ctx)より長いとき、Ollama は system メッセージと最後のメッセージを残して、古いメッセージから削除します。このツールはトークンを数えないため、常に会話全体を表示します。

qwen3 モデルと deepseek-r1 では、Ollama は最後の user メッセージより前の assistant メッセージから <think>…</think> を取り除きます。このツールは取り除きません。

メッセージ全体や {{ .Messages }} を出力すると、Ollama ではメモリアドレス(0xc…)が表示され、毎回変わります。このツールはプレースホルダーを表示します。

currentDate と yesterdayDate は、お使いのコンピューターの今日の日付を使います。Ollama はサーバーの日付を使います。

2026-11-09 に、Ollama のソースコード(v0.40.15)、Go の text/template、Ollama 0.40.11 で確認しました: Ollama: Template · template.go

すべてブラウザの中で実行されます。どこにも送信されません。

Ollama は、モデルの TEMPLATE を使って会話をモデルが読むテキストに変換します。TEMPLATE は Go のテンプレート言語で書かれ、{{ range .Messages }}、{{ .Role }}、{{ .Content }}、{{ if .Tools }} などを使います。改行の抜け、削りすぎる {{-、存在しないフィールド名といった小さなミスで、モデルに見えるテキストが変わったり、すべてのリクエストが失敗したりします。このツールは、Ollama と同じ方法でテンプレートを実行します。Go の text/template の規則(トリムマーカー、変数、range、with、比較、printf、エラーメッセージ)に従い、Ollama と同じデータ(System、Role・Content・Thinking・ToolCalls・ToolName・ToolCallID を持つ Messages、Tools、Think、ThinkLevel、IsThinkSet、Prompt、Suffix、Response)を渡し、Ollama 独自の関数(json、currentDate、yesterdayDate、toTypeScriptType)も備えています。Ollama がデータを整える手順も再現しています。system メッセージは .System にまとめられ、同じ role が続くメッセージは空行でつなげられ、最初のメッセージが system メッセージでないときはモデルの SYSTEM が加えられ、画像は [img-0]、[img-1] のように置き換えられます。.Messages を一度も使わないテンプレートは従来の方法で、ターンごとに .Prompt と .Response を使って 1 回ずつ実行され、どちらも使わないテンプレートには Ollama が {{ .Response }} を加えます。Ollama 0.40 以降は、モデルが GGUF ファイルの中にチャットテンプレート(tokenizer.chat_template)を持つこともでき、Ollama は、tools、thinking、fill-in-the-middle という 2 つがそれぞれできることを見て、どちらかを選びます。詳細設定に GGUF のチャットテンプレートを貼り付けると、Ollama がどちらを使うかをツールが教えてくれます。このツールは 3 つの方法で確認しました。Go 自身の text/template(Go 1.26.6)で Ollama のテンプレートのコードを動かした 243 件のケース(テスト出力が一致する Ollama 組み込みの 20 個のテンプレートを含む)との比較、このコンピューター上の Ollama 0.40.11 への 330 件の /api/generate リクエスト、そして qwen2.5:7b と、私たちが自分たちの TEMPLATE で作ったモデルへの 49 件の /api/chat リクエストです。出力もエラーメッセージも一致しました。

このツールの計算部分は、オープンソース(MIT ライセンス)で公開しています。 github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

こんな時に使う

  • Modelfile 用に書いている TEMPLATE を ollama create の前に確認する: 改行、特殊トークン、system メッセージ、tool calls、tool の結果
  • TEMPLATE を変えても効果がない理由と、Ollama が TEMPLATE と GGUF ファイルのチャットテンプレートのどちらを使うのかを調べる
  • tools を含む長い会話でモデルが実際に受け取るものを見て、tool calls が間違う・出ない原因を調べる

使い方

  1. ボックスにテンプレートを貼り付けます(手元のモデルのテンプレートは ollama show --template <model> で表示できます)。例から始めることもできます。
  2. /api/chat を選んで messages と tools を API と同じ形の JSON で編集するか、/api/generate を選んで prompt、system、suffix を入力します。think を使う場合は設定します。
  3. 結果を読みます。必要なら空白を表示します。自分の Ollama と比べるには、下の curl コマンドをモデル名を入れて実行します。

FAQ

TEMPLATE を変えたのに出力が変わりません。なぜですか?

Ollama 0.40 以降は、モデルが 2 つのテンプレートを持つことがあります。Modelfile の TEMPLATE と、GGUF ファイルの中のチャットテンプレートです。Ollama は、より多くのこと(tools、thinking、fill-in-the-middle)ができるほうを選びます。Ollama 0.40.11 での私たちのテストでは、qwen2.5:7b から作ったモデルで、tools のない TEMPLATE は無視されました。qwen2.5:7b の GGUF のチャットテンプレートが tools に対応しているためです。どちらが選ばれたかは、サーバーログの "template selection" の行(selected=go_template または selected=gguf_chat_template)で分かります。サーバーに OLLAMA_GO_TEMPLATE=1 を設定すると、モデルに TEMPLATE があるときは常にそれが使われます。

Ollama が実際に作るプロンプトを見るにはどうすればよいですか?

Ollama のソースコードには、モデルを実行せずにプロンプトを返すデバッグ用のオプション _debug_render_only があります(プロンプトは _debug_info.rendered_template で返ります)。このツールの確認にも使いました。API ドキュメントには載っていないため、変わる可能性があります。ツールが curl コマンドを作ります。

.Messages を使うテンプレートと .Prompt を使うテンプレートは何が違いますか?

.Messages を使うテンプレートは、Ollama が会話全体を渡して 1 回実行します。使わないテンプレートは、ターンごとに .System、.Prompt、.Response を渡して 1 回ずつ実行し、最後のターンでは {{ .Response }} の後でテンプレートを切り落とすので、モデルはそこから続きを書きます。どちらの方法で実行されたかはツールに表示されます。

Ollama が "does not support tools" や "does not support thinking" と答えるのはなぜですか?

Ollama は、使うテンプレートが tools に対応していないとき(TEMPLATE は .Tools を使っていれば対応しています)は tools 付きのリクエストを拒否し、テンプレートに thinking の部分がないときは think に true またはレベルを指定したリクエストを拒否します。thinking の部分があるテンプレートでは、リクエストで think が指定されていないと、Ollama が think をオンにします。ツールはどちらも表示します。

プロンプトの中の tools が JSON のように見えません。ツールのバグですか?

おそらくバグではありません。Go のテンプレートでは、値の型がそうなっているときにだけ JSON として出力されます。Ollama の .Tools、tool 全体、.Function.Arguments は JSON で出力されますが、.Function は Go 自身の形式で出力されます。私たちのテストでは、qwen2.5:7b のテンプレートは {{ .Function }} を使っており、Ollama 0.40.11 はモデルに {get_weather Get the weather {object <nil> <nil> [city] {…}}} のようなテキストを送りました。JSON にしたいときは {{ json .Function }} を使います。

テンプレートはどこかに送信されますか?

いいえ。すべてブラウザの中で実行されます。

関連ツール