~/tools / Modelldateien und Chat-Templates / Ollama Template Tester

Ollama Template Tester — Ein Ollama-TEMPLATE ausführen und den genauen Prompt sehen

Fügen Sie das TEMPLATE eines Ollama-Modells ein (aus ollama show --template oder Ihrem Modelfile), ergänzen Sie ein Gespräch, tools oder einen Prompt und sehen Sie genau den Text, den Ollama an das Modell übergibt: mit Spezial-Tokens, Zeilenumbrüchen und allem anderen. Das Tool führt das Template so aus wie Ollama, mit den Template-Regeln von Go, den Daten von Ollama (Nachrichten, Tool-Aufrufe, tools, think) und seinen drei Arten, ein Template auszuführen. Es zeigt außerdem, ob Ollama Ihr TEMPLATE überhaupt verwendet oder das Chat-Template in der GGUF-Datei, und wann Ollama eine Anfrage mit tools oder thinking ablehnt. Nichts verlässt Ihren Browser.

Beispiele

ollama show --template <model> gibt das Template eines Modells aus, das Sie haben. Der Text zwischen den dreifachen Anführungszeichen nach TEMPLATE in einem Modelfile funktioniert ebenfalls.

Anfrage

Dieselbe Form wie bei /api/chat: role, content und optional thinking, tool_calls, tool_name und images.

Dieselbe Form wie tools in /api/chat. Lassen Sie das Feld leer, wenn Sie keine tools verwenden.

Erweitert: das SYSTEM des Modells und sein GGUF-Chat-Template

Die SYSTEM-Zeile des Modelfile. Ollama fügt sie hinzu, wenn die erste Nachricht keine Systemnachricht ist (bei /api/generate, wenn system leer ist).

Fügen Sie es ein, um zu sehen, ob Ollama TEMPLATE oder dieses verwendet. GGUF Metadata Viewer zeigt es an.

Was das Modell erhält

<|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 Zeichen, 955 Bytes

Über dieses Template

Wie Ollama es ausgeführt hat
Einmal, mit dem ganzen Gespräch in .Messages
Namen, die es verwendet
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
Was es unterstützt (für Ollama)
tools

Mit Ihrem eigenen Ollama prüfen

Ersetzen Sie MODEL durch den Namen Ihres Modells. _debug_render_only ist eine Debug-Option im Quellcode von Ollama und nicht in der API-Dokumentation, sie kann sich also ändern. Die Antwort enthält den Prompt in _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}'

Modelle mit einer RENDERER- oder PARSER-Zeile im Modelfile sowie gpt-oss verwenden in Ollama eingebaute Renderer und nicht TEMPLATE.

Wenn das Gespräch länger ist als der Kontext (num_ctx), verwirft Ollama die ältesten Nachrichten, behält aber die Systemnachrichten und die letzte Nachricht. Dieses Tool zählt keine Tokens und zeigt daher immer das ganze Gespräch.

Bei qwen3-Modellen und deepseek-r1 entfernt Ollama <think>…</think> aus Assistant-Nachrichten vor der letzten Nutzernachricht. Dieses Tool tut das nicht.

Wenn eine ganze Nachricht oder {{ .Messages }} ausgegeben wird, zeigt Ollama Speicheradressen (0xc…), die sich jedes Mal ändern. Das Tool zeigt einen Platzhalter.

currentDate und yesterdayDate verwenden das heutige Datum auf Ihrem Computer. Ollama verwendet das Datum des Servers.

Geprüft am 2026-11-09 gegen den Quellcode von Ollama (v0.40.15), text/template von Go und Ollama 0.40.11: Ollama: Template · template.go

Alles läuft in Ihrem Browser. Nichts wird irgendwohin gesendet.

Ollama macht aus einem Gespräch den Text, den ein Modell liest, mit dem TEMPLATE des Modells, geschrieben in der Template-Sprache von Go: {{ range .Messages }}, {{ .Role }}, {{ .Content }}, {{ if .Tools }} und so weiter. Ein kleiner Fehler, etwa ein fehlender Zeilenumbruch, ein {{-, das zu viel entfernt, oder ein Feldname, den es nicht gibt, verändert, was das Modell sieht, oder lässt jede Anfrage fehlschlagen. Dieses Tool führt Ihr Template so aus wie Ollama. Es folgt den Regeln von Go-text/template (Trim-Markierungen, Variablen, range, with, Vergleiche, printf, die Fehlermeldungen), übergibt dieselben Daten wie Ollama (System, Messages mit Role, Content, Thinking, ToolCalls, ToolName und ToolCallID, Tools, Think, ThinkLevel, IsThinkSet, Prompt, Suffix, Response) und kennt die zusätzlichen Funktionen von Ollama (json, currentDate, yesterdayDate, toTypeScriptType). Es übernimmt auch, wie Ollama die Daten aufbereitet: Systemnachrichten werden zu .System zusammengefügt, aufeinanderfolgende Nachrichten derselben Rolle werden mit einer Leerzeile verbunden, das SYSTEM des Modells wird hinzugefügt, wenn die erste Nachricht keine Systemnachricht ist, und Bilder werden zu [img-0], [img-1] und so weiter. Ein Template, das .Messages nie verwendet, läuft auf die ältere Art, einmal pro Runde mit .Prompt und .Response, und Ollama fügt {{ .Response }} zu einem Template hinzu, das keines von beiden verwendet. Seit Ollama 0.40 kann ein Modell außerdem ein Chat-Template in seiner GGUF-Datei mitbringen (tokenizer.chat_template), und Ollama wählt eines der beiden danach, was jedes kann: tools, thinking und Fill-in-the-Middle. Fügen Sie das GGUF-Chat-Template unter „Erweitert“ ein, und das Tool sagt Ihnen, welches Ollama verwenden wird. Wir haben das Tool auf drei Arten geprüft: gegen das eigene text/template von Go (Go 1.26.6), das den Template-Code von Ollama ausführt, an 243 Fällen, darunter die 20 eingebauten Templates von Ollama, deren Testausgaben es trifft; gegen Ollama 0.40.11 auf diesem Computer mit 330 /api/generate-Anfragen; und mit 49 /api/chat-Anfragen an qwen2.5:7b und an Modelle, die wir mit eigenen TEMPLATEs erstellt haben. Die Ausgabe und die Fehlermeldungen stimmten überein.

Die Kernlogik dieses Tools ist Open Source unter der MIT-Lizenz. github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

Anwendungsfälle

  • Ein TEMPLATE prüfen, das Sie für ein Modelfile schreiben, bevor Sie ollama create ausführen: Zeilenumbrüche, Spezial-Tokens, die Systemnachricht, Tool-Aufrufe und Tool-Ergebnisse
  • Herausfinden, warum eine Änderung an TEMPLATE keine Wirkung hat und ob Ollama es verwendet oder das Chat-Template in der GGUF-Datei
  • Genau sehen, was ein Modell in einem langen Gespräch mit tools erhält, um falsche oder fehlende Tool-Aufrufe zu beheben

Verwendung

  1. Fügen Sie ein Template in das Feld ein (ollama show --template <model> gibt das Template eines Modells aus, das Sie haben) oder beginnen Sie mit einem der Beispiele.
  2. Wählen Sie /api/chat und bearbeiten Sie die Nachrichten und tools als JSON, in derselben Form wie in der API, oder wählen Sie /api/generate und füllen Sie prompt, system und suffix aus. Setzen Sie think, wenn Sie es verwenden.
  3. Lesen Sie das Ergebnis, bei Bedarf mit sichtbaren Leerzeichen. Um es mit Ihrem eigenen Ollama zu vergleichen, führen Sie den curl-Befehl unten mit dem Namen Ihres Modells aus.

FAQ

Ich habe TEMPLATE geändert, aber die Ausgabe hat sich nicht verändert. Warum?

Seit Ollama 0.40 kann ein Modell zwei Templates haben: TEMPLATE aus dem Modelfile und das Chat-Template in der GGUF-Datei. Ollama wählt das, das mehr kann (tools, thinking, Fill-in-the-Middle). In unserem Test mit Ollama 0.40.11 wurde ein TEMPLATE ohne tools bei einem aus qwen2.5:7b erstellten Modell ignoriert, weil das GGUF-Chat-Template von qwen2.5:7b tools unterstützt. Das Server-Log zeigt die Wahl in der Zeile "template selection" (selected=go_template oder selected=gguf_chat_template), und wenn Sie für den Server OLLAMA_GO_TEMPLATE=1 setzen, verwendet Ollama TEMPLATE immer, wenn ein Modell eines hat.

Wie sehe ich den Prompt, den mein Ollama wirklich erzeugt?

Der Quellcode von Ollama hat eine Debug-Option, _debug_render_only, die den Prompt zurückgibt, statt das Modell auszuführen (als _debug_info.rendered_template). Wir haben damit dieses Tool geprüft. Sie steht nicht in der API-Dokumentation und kann sich daher ändern. Das Tool erstellt den curl-Befehl für Sie.

Was ist der Unterschied zwischen Templates mit .Messages und mit .Prompt?

Wenn das Template .Messages verwendet, führt Ollama es einmal mit dem ganzen Gespräch aus. Wenn nicht, führt Ollama es einmal pro Runde mit .System, .Prompt und .Response aus und schneidet das Template in der letzten Runde nach {{ .Response }} ab, sodass das Modell von dort aus weiterschreibt. Das Tool zeigt, welche Art verwendet wurde.

Warum antwortet Ollama mit "does not support tools" oder "does not support thinking"?

Ollama lehnt eine Anfrage mit tools ab, wenn das verwendete Template tools nicht unterstützt (ein TEMPLATE unterstützt sie, wenn es .Tools verwendet), und ebenso eine Anfrage mit think auf true oder mit einer Stufe, wenn das Template keinen Thinking-Teil hat. Bei einem Template, das einen Thinking-Teil hat, schaltet Ollama think ein, wenn die Anfrage es nicht setzt. Das Tool zeigt beides.

Die tools in meinem Prompt sehen nicht wie JSON aus. Ist das ein Fehler im Tool?

Wahrscheinlich nicht. In den Templates von Go wird ein Wert nur dann als JSON ausgegeben, wenn sein Typ das vorsieht. .Tools von Ollama, ein ganzes Tool und .Function.Arguments werden als JSON ausgegeben, .Function dagegen im eigenen Format von Go. In unserem Test verwendet das Template von qwen2.5:7b {{ .Function }}, und Ollama 0.40.11 schickte dem Modell Text wie {get_weather Get the weather {object <nil> <nil> [city] {…}}}. Verwenden Sie {{ json .Function }}, wenn Sie JSON möchten.

Wird mein Template irgendwohin gesendet?

Nein. Alles läuft in Ihrem Browser.

Ähnliche Tools