~/tools / Pliki modeli i szablony czatu / Ollama Template Tester

Ollama Template Tester — Uruchom TEMPLATE Ollama i zobacz dokładny prompt

Wklej TEMPLATE modelu Ollama (z ollama show --template lub ze swojego Modelfile), dodaj rozmowę, tools albo prompt i zobacz dokładny tekst, który Ollama przekazuje modelowi: ze znacznikami specjalnymi, podziałami wierszy i wszystkim innym. Narzędzie uruchamia szablon tak jak Ollama, według reguł szablonów Go, na danych Ollama (wiadomości, wywołania narzędzi, tools, think) i na trzy sposoby, na jakie Ollama uruchamia szablon. Mówi też, czy Ollama w ogóle użyje Twojego TEMPLATE, czy szablonu czatu z pliku GGUF, oraz kiedy Ollama odrzuci żądanie z tools lub thinking. Nic nie opuszcza Twojej przeglądarki.

Przykłady

ollama show --template <model> wypisuje szablon posiadanego modelu. Tekst między potrójnymi cudzysłowami po TEMPLATE w Modelfile też działa.

Żądanie

Taka sama postać jak w /api/chat: role, content oraz opcjonalnie thinking, tool_calls, tool_name i images.

Taka sama postać jak tools w /api/chat. Zostaw puste, jeśli nie ma tools.

Zaawansowane: SYSTEM modelu i jego szablon czatu GGUF

Wiersz SYSTEM z Modelfile. Ollama dodaje go, gdy pierwsza wiadomość nie jest komunikatem systemowym (w /api/generate, gdy system jest pusty).

Wklej go, aby zobaczyć, czy Ollama używa TEMPLATE, czy tego szablonu. Pokazuje go GGUF Metadata Viewer.

Co dostaje model

<|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 znaków, 955 bajtów

O tym szablonie

Jak Ollama go uruchomiła
Raz, z całą rozmową w .Messages
Używane nazwy
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
Co obsługuje (dla Ollama)
tools

Sprawdź na własnej Ollama

Zastąp MODEL nazwą swojego modelu. _debug_render_only to opcja debugowania w kodzie źródłowym Ollama, której nie ma w dokumentacji API, więc może się zmienić. Odpowiedź zawiera prompt w _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}'

Modele z wierszem RENDERER lub PARSER w Modelfile oraz gpt-oss używają rendererów wbudowanych w Ollama, a nie TEMPLATE.

Gdy rozmowa jest dłuższa niż kontekst (num_ctx), Ollama usuwa najstarsze wiadomości, ale zachowuje komunikaty systemowe i ostatnią wiadomość. To narzędzie nie liczy tokenów, więc zawsze pokazuje całą rozmowę.

Dla modeli qwen3 i deepseek-r1 Ollama usuwa <think>…</think> z wiadomości asystenta przed ostatnią wiadomością użytkownika. To narzędzie tego nie robi.

Wypisanie całej wiadomości lub {{ .Messages }} pokazuje w Ollama adresy pamięci (0xc…), które zmieniają się za każdym razem. Narzędzie pokazuje zastępnik.

currentDate i yesterdayDate używają dzisiejszej daty z Twojego komputera. Ollama używa daty serwera.

Sprawdzono 2026-11-09 z kodem źródłowym Ollama (v0.40.15), text/template Go i Ollama 0.40.11: Ollama: Template · template.go

Wszystko działa w Twojej przeglądarce. Nic nie jest nigdzie wysyłane.

Ollama zamienia rozmowę w tekst, który czyta model, za pomocą TEMPLATE modelu, zapisanego w języku szablonów Go: {{ range .Messages }}, {{ .Role }}, {{ .Content }}, {{ if .Tools }} i tak dalej. Drobny błąd, taki jak brakujący podział wiersza, {{- które obcina za dużo, albo nazwa pola, która nie istnieje, zmienia to, co widzi model, albo sprawia, że każde żądanie kończy się błędem. To narzędzie uruchamia Twój szablon tak jak Ollama. Stosuje reguły Go text/template (znaczniki przycinania, zmienne, range, with, porównania, printf, komunikaty o błędach), przekazuje te same dane co Ollama (System, Messages z Role, Content, Thinking, ToolCalls, ToolName i ToolCallID, Tools, Think, ThinkLevel, IsThinkSet, Prompt, Suffix, Response) i ma dodatkowe funkcje Ollama (json, currentDate, yesterdayDate, toTypeScriptType). Odtwarza też to, jak Ollama przygotowuje dane: komunikaty systemowe są łączone w .System, kolejne wiadomości tej samej roli są łączone pustym wierszem, SYSTEM modelu jest dodawany, gdy pierwsza wiadomość nie jest komunikatem systemowym, a obrazy zamieniają się w [img-0], [img-1] i tak dalej. Szablon, który nigdy nie używa .Messages, działa po staremu, raz na turę z .Prompt i .Response, a Ollama dopisuje {{ .Response }} do szablonu, który nie używa żadnego z nich. Od Ollama 0.40 model może też mieć szablon czatu w pliku GGUF (tokenizer.chat_template), a Ollama wybiera jeden z dwóch według tego, co każdy potrafi: tools, thinking i uzupełnianie w środku (fill-in-the-middle). Wklej szablon czatu z GGUF w sekcji „Zaawansowane”, a narzędzie powie, którego Ollama użyje. Sprawdziliśmy narzędzie na trzy sposoby: z własnym text/template Go (Go 1.26.6) uruchamiającym kod szablonów Ollama na 243 przypadkach, w tym na 20 wbudowanych szablonach Ollama, których wyniki testów odtwarza; z Ollama 0.40.11 na tym komputerze na 330 żądaniach /api/generate; oraz na 49 żądaniach /api/chat do qwen2.5:7b i do modeli, które zrobiliśmy z własnymi TEMPLATE. Wynik i komunikaty o błędach się zgadzały.

Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

Zastosowania

  • Sprawdzić TEMPLATE, który piszesz do Modelfile, zanim uruchomisz ollama create: podziały wierszy, znaczniki specjalne, komunikat systemowy, wywołania narzędzi i ich wyniki
  • Dowiedzieć się, dlaczego zmiana TEMPLATE nic nie daje i czy Ollama używa go, czy szablonu czatu z pliku GGUF
  • Zobaczyć dokładnie, co model dostaje w długiej rozmowie z tools, aby znaleźć przyczynę błędnych lub brakujących wywołań narzędzi

Jak używać

  1. Wklej szablon do pola (ollama show --template <model> wypisuje szablon posiadanego modelu) albo zacznij od jednego z przykładów.
  2. Wybierz /api/chat i edytuj wiadomości oraz tools jako JSON, w takiej samej postaci jak w API, albo wybierz /api/generate i wypełnij prompt, system i suffix. Ustaw think, jeśli go używasz.
  3. Przeczytaj wynik, w razie potrzeby z widocznymi białymi znakami. Aby porównać z własnym Ollama, uruchom polecenie curl na dole z nazwą swojego modelu.

FAQ

Zmieniłem TEMPLATE, ale wynik się nie zmienił. Dlaczego?

Od Ollama 0.40 model może mieć dwa szablony: TEMPLATE z Modelfile i szablon czatu w pliku GGUF. Ollama wybiera ten, który potrafi więcej (tools, thinking, fill-in-the-middle). W naszym teście z Ollama 0.40.11 TEMPLATE bez tools został zignorowany w modelu zrobionym z qwen2.5:7b, ponieważ szablon czatu GGUF qwen2.5:7b obsługuje tools. Log serwera pokazuje wybór w wierszu "template selection" (selected=go_template albo selected=gguf_chat_template), a ustawienie OLLAMA_GO_TEMPLATE=1 dla serwera sprawia, że Ollama używa TEMPLATE zawsze, gdy model go ma.

Jak zobaczyć prompt, który moja Ollama naprawdę buduje?

Kod źródłowy Ollama ma opcję debugowania, _debug_render_only, która zwraca prompt zamiast uruchamiać model (jako _debug_info.rendered_template). Użyliśmy jej do sprawdzenia tego narzędzia. Nie ma jej w dokumentacji API, więc może się zmienić. Narzędzie buduje dla Ciebie polecenie curl.

Czym różnią się szablony z .Messages od szablonów z .Prompt?

Jeśli szablon używa .Messages, Ollama uruchamia go raz z całą rozmową. Jeśli nie, uruchamia go raz na turę z .System, .Prompt i .Response, a w ostatniej turze obcina szablon po {{ .Response }}, tak aby model kontynuował od tego miejsca. Narzędzie pokazuje, który sposób zastosowano.

Dlaczego Ollama odpowiada "does not support tools" albo "does not support thinking"?

Ollama odrzuca żądanie z tools, gdy używany szablon nie obsługuje tools (TEMPLATE je obsługuje, gdy używa .Tools), oraz żądanie z think ustawionym na true lub na poziom, gdy szablon nie ma części thinking. Dla szablonu, który ma część thinking, Ollama włącza think, gdy żądanie go nie ustawia. Narzędzie pokazuje jedno i drugie.

Tools w moim prompcie nie wyglądają jak JSON. Czy to błąd narzędzia?

Prawdopodobnie nie. W szablonach Go wartość jest wypisywana jako JSON tylko wtedy, gdy mówi o tym jej typ. .Tools z Ollama, całe narzędzie i .Function.Arguments są wypisywane jako JSON, ale .Function jest wypisywane we własnym formacie Go. W naszym teście szablon qwen2.5:7b używa {{ .Function }}, a Ollama 0.40.11 wysłała modelowi tekst taki jak {get_weather Get the weather {object <nil> <nil> [city] {…}}}. Użyj {{ json .Function }}, jeśli chcesz JSON.

Czy mój szablon jest dokądś wysyłany?

Nie. Wszystko działa w Twojej przeglądarce.

Powiązane