~/tools / Model dosyaları ve sohbet şablonları / Ollama Template Tester

Ollama Template Tester — Bir Ollama TEMPLATE'ini çalıştırın, istemi olduğu gibi görün

Bir Ollama modelinin TEMPLATE'ini (ollama show --template çıktısından veya Modelfile'ınızdan) yapıştırın, bir konuşma, tools ya da bir istem ekleyin ve Ollama'nın modele verdiği metni olduğu gibi görün: özel belirteçler, satır sonları ve her şeyiyle. Araç şablonu Ollama'nın yaptığı gibi çalıştırır: Go'nun şablon kurallarıyla, Ollama'nın verileriyle (mesajlar, araç çağrıları, tools, think) ve Ollama'nın bir şablonu çalıştırdığı üç yolla. Ayrıca Ollama'nın TEMPLATE'inizi mi yoksa GGUF dosyasındaki sohbet şablonunu mu kullanacağını ve Ollama'nın tools ya da thinking içeren bir isteği ne zaman reddedeceğini söyler. Hiçbir veri tarayıcınızdan çıkmaz.

Örnekler

ollama show --template <model> elinizdeki bir modelin şablonunu yazdırır. Bir Modelfile'da TEMPLATE'ten sonraki üçlü tırnak arasındaki metin de olur.

İstek

/api/chat ile aynı biçim: role, content ve isteğe bağlı olarak thinking, tool_calls, tool_name ve images.

/api/chat'teki tools ile aynı biçim. Araç yoksa boş bırakın.

Gelişmiş: modelin SYSTEM'i ve GGUF sohbet şablonu

Modelfile'daki SYSTEM satırı. Ollama, ilk mesaj sistem mesajı değilse onu ekler (/api/generate'te, system boşsa).

Ollama'nın TEMPLATE'i mi yoksa bunu mu kullandığını görmek için yapıştırın. GGUF Metadata Viewer onu gösterir.

Modelin aldığı

<|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 karakter, 955 bayt

Bu şablon hakkında

Ollama onu nasıl çalıştırdı
Bir kez, tüm konuşma .Messages içinde
Kullandığı adlar
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
Neleri destekliyor (Ollama için)
tools

Kendi Ollama'nızla denetleyin

MODEL yerine modelinizin adını yazın. _debug_render_only, Ollama'nın kaynak kodunda bulunan, API belgelerinde yer almayan bir hata ayıklama seçeneğidir, bu yüzden değişebilir. Yanıtta istem _debug_info.rendered_template içinde bulunur.

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'da RENDERER veya PARSER satırı olan modeller ve gpt-oss, TEMPLATE'i değil, Ollama'ya yerleşik oluşturucuları kullanır.

Konuşma bağlamdan (num_ctx) uzun olduğunda Ollama en eski mesajları atar ama sistem mesajlarını ve son mesajı tutar. Bu araç belirteç saymaz, bu yüzden her zaman tüm konuşmayı gösterir.

qwen3 modellerinde ve deepseek-r1'de Ollama, son kullanıcı mesajından önceki asistan mesajlarından <think>…</think> kaldırır. Bu araç kaldırmaz.

Bütün bir mesajı veya {{ .Messages }}'ı yazdırmak Ollama'da her seferinde değişen bellek adresleri (0xc…) gösterir. Araç bir yer tutucu gösterir.

currentDate ve yesterdayDate bilgisayarınızdaki bugünün tarihini kullanır. Ollama sunucudaki tarihi kullanır.

2026-11-09 tarihinde Ollama'nın kaynak kodu (v0.40.15), Go'nun text/template'i ve Ollama 0.40.11 ile denetlendi: Ollama: Template · template.go

Her şey tarayıcınızda çalışır. Hiçbir şey bir yere gönderilmez.

Ollama, bir konuşmayı modelin okuduğu metne modelin TEMPLATE'iyle dönüştürür; bu şablon Go'nun şablon dilinde yazılır: {{ range .Messages }}, {{ .Role }}, {{ .Content }}, {{ if .Tools }} ve benzerleri. Eksik bir satır sonu, fazla kırpan bir {{- ya da var olmayan bir alan adı gibi küçük bir hata, modelin gördüğünü değiştirir veya her isteğin başarısız olmasına yol açar. Bu araç şablonunuzu Ollama'nın yaptığı gibi çalıştırır. Go text/template kurallarını izler (kırpma işaretleri, değişkenler, range, with, karşılaştırmalar, printf, hata iletileri), Ollama'nın verdiği verilerin aynısını verir (System, Role, Content, Thinking, ToolCalls, ToolName ve ToolCallID içeren Messages, Tools, Think, ThinkLevel, IsThinkSet, Prompt, Suffix, Response) ve Ollama'nın ek işlevlerine sahiptir (json, currentDate, yesterdayDate, toTypeScriptType). Ollama'nın verileri nasıl hazırladığını da taklit eder: sistem mesajları .System içinde birleştirilir, aynı rolden ardışık mesajlar bir boş satırla birleştirilir, ilk mesaj sistem mesajı değilse modelin SYSTEM'i eklenir ve görüntüler [img-0], [img-1] gibi olur. .Messages'ı hiç kullanmayan bir şablon eski yöntemle çalışır, her tur için bir kez .Prompt ve .Response ile; ikisini de kullanmayan bir şablona Ollama {{ .Response }} ekler. Ollama 0.40'tan beri bir model GGUF dosyasının içinde de bir sohbet şablonu taşıyabilir (tokenizer.chat_template) ve Ollama ikisinden birini her birinin neler yapabildiğine göre seçer: tools, thinking ve ortasını doldurma (fill-in-the-middle). GGUF sohbet şablonunu "Gelişmiş" bölümüne yapıştırın, araç Ollama'nın hangisini kullanacağını söyler. Aracı üç şekilde denetledik: Go'nun kendi text/template'ine (Go 1.26.6), Ollama'nın şablon kodunu çalıştırarak, 243 durumda, Ollama'nın yerleşik 20 şablonu dahil, bunların test çıktılarıyla eşleşerek; bu bilgisayardaki Ollama 0.40.11'e 330 /api/generate isteğiyle; ve qwen2.5:7b'ye ve kendi TEMPLATE'lerimizle oluşturduğumuz modellere 49 /api/chat isteğiyle. Çıktı ve hata iletileri eşleşti.

Bu aracın temel mantığı MIT lisansıyla açık kaynaktır. github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

Kullanım örnekleri

  • ollama create çalıştırmadan önce bir Modelfile için yazdığınız TEMPLATE'i denetlemek: satır sonları, özel belirteçler, sistem mesajı, araç çağrıları ve araç sonuçları
  • TEMPLATE'i değiştirmenin neden etki etmediğini ve Ollama'nın onu mu yoksa GGUF dosyasındaki sohbet şablonunu mu kullandığını öğrenmek
  • Yanlış ya da eksik araç çağrılarının nedenini bulmak için bir modelin tools içeren uzun bir konuşmada tam olarak ne aldığını görmek

Nasıl kullanılır

  1. Bir şablonu kutuya yapıştırın (ollama show --template <model> elinizdeki bir modelin şablonunu yazdırır) ya da örneklerden biriyle başlayın.
  2. /api/chat seçip mesajları ve tools'u API'dekiyle aynı biçimde JSON olarak düzenleyin ya da /api/generate seçip prompt, system ve suffix alanlarını doldurun. Kullanıyorsanız think'i ayarlayın.
  3. Sonucu, gerekirse boşlukları göstererek okuyun. Kendi Ollama'nızla karşılaştırmak için alttaki curl komutunu modelinizin adıyla çalıştırın.

SSS

TEMPLATE'i değiştirdim ama çıktı değişmedi. Neden?

Ollama 0.40'tan beri bir modelin iki şablonu olabilir: Modelfile'daki TEMPLATE ve GGUF dosyasındaki sohbet şablonu. Ollama daha fazlasını yapabilen şablonu seçer (tools, thinking, fill-in-the-middle). Ollama 0.40.11 ile yaptığımız testte, qwen2.5:7b'den oluşturulan bir modelde tools içermeyen bir TEMPLATE yok sayıldı, çünkü qwen2.5:7b'nin GGUF sohbet şablonu tools'u destekliyor. Sunucu günlüğü seçimi "template selection" satırında gösterir (selected=go_template veya selected=gguf_chat_template); sunucu için OLLAMA_GO_TEMPLATE=1 ayarlanırsa Ollama, bir modelde TEMPLATE olduğu sürece onu kullanır.

Ollama'mın gerçekte oluşturduğu istemi nasıl görebilirim?

Ollama'nın kaynak kodunda, modeli çalıştırmak yerine istemi döndüren bir hata ayıklama seçeneği var: _debug_render_only (yanıtta _debug_info.rendered_template olarak). Bu aracı denetlerken onu kullandık. API belgelerinde yer almaz, bu yüzden değişebilir. Araç curl komutunu sizin için oluşturur.

.Messages kullanan şablonlarla .Prompt kullananlar arasındaki fark nedir?

Şablon .Messages kullanıyorsa Ollama onu tüm konuşmayla bir kez çalıştırır. Kullanmıyorsa her tur için bir kez .System, .Prompt ve .Response ile çalıştırır ve son turda şablonu {{ .Response }}'tan sonra keser, böylece model oradan devam eder. Araç hangi yolun kullanıldığını gösterir.

Ollama neden "does not support tools" veya "does not support thinking" yanıtını veriyor?

Ollama, kullandığı şablon tools'u desteklemiyorsa tools içeren bir isteği reddeder (bir TEMPLATE, .Tools kullandığında onu destekler); şablonda thinking bölümü yoksa think'i true ya da bir düzeye ayarlayan bir isteği de reddeder. Thinking bölümü olan bir şablonda, istek think'i ayarlamadığında Ollama onu açar. Araç ikisini de gösterir.

İsteminizdeki tools JSON'a benzemiyor. Bu aracın bir hatası mı?

Büyük olasılıkla hayır. Go şablonlarında bir değer yalnızca türü öyle diyorsa JSON olarak yazdırılır. Ollama'nın .Tools'u, bütün bir araç ve .Function.Arguments JSON olarak yazdırılır, ancak .Function Go'nun kendi biçiminde yazdırılır. Testimizde qwen2.5:7b'nin şablonu {{ .Function }} kullanıyor ve Ollama 0.40.11 modele {get_weather Get the weather {object <nil> <nil> [city] {…}}} gibi bir metin gönderdi. JSON istiyorsanız {{ json .Function }} kullanın.

Şablonum bir yere gönderiliyor mu?

Hayır. Her şey tarayıcınızda çalışır.

İlgili