~/tools / File model dan templat obrolan / Ollama Template Tester

Ollama Template Tester — Jalankan TEMPLATE Ollama dan lihat prompt persisnya

Tempel TEMPLATE sebuah model Ollama (dari ollama show --template atau Modelfile Anda), tambahkan percakapan, tools, atau prompt, dan lihat teks persis yang diberikan Ollama kepada model: termasuk token khusus dan baris barunya. Alat ini menjalankan template seperti yang dilakukan Ollama, dengan aturan template Go, data Ollama (messages, tool calls, tools, think), dan tiga cara Ollama menjalankan template. Alat ini juga memberi tahu apakah Ollama akan memakai TEMPLATE Anda atau chat template di dalam file GGUF, dan kapan Ollama menolak permintaan dengan tools atau thinking. Tidak ada yang keluar dari browser Anda.

Contoh

ollama show --template <model> mencetak template model yang Anda punya. Teks di antara tanda kutip tiga setelah TEMPLATE di Modelfile juga bisa dipakai.

Permintaan

Bentuknya sama seperti /api/chat: role, content, dan opsional thinking, tool_calls, tool_name, serta images.

Bentuknya sama seperti tools di /api/chat. Biarkan kosong jika tanpa tools.

Lanjutan: SYSTEM milik model dan chat template GGUF-nya

Baris SYSTEM di Modelfile. Ollama menambahkannya ketika message pertama bukan system message (di /api/generate, ketika system kosong).

Tempel untuk melihat apakah Ollama memakai TEMPLATE atau yang ini. GGUF Metadata Viewer dapat menampilkannya.

Yang diterima 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 karakter, 955 byte

Tentang template ini

Cara Ollama menjalankannya
Sekali, dengan seluruh percakapan di .Messages
Nama yang dipakai
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
Yang didukungnya (menurut Ollama)
tools

Periksa dengan Ollama Anda sendiri

Ganti MODEL dengan nama model Anda. _debug_render_only adalah opsi debug di kode sumber Ollama, tidak ada di dokumentasi API, jadi bisa berubah. Jawabannya memuat prompt di _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}'

Model dengan baris RENDERER atau PARSER di Modelfile, dan gpt-oss, memakai renderer bawaan Ollama, bukan TEMPLATE.

Ketika percakapan lebih panjang daripada konteks (num_ctx), Ollama membuang message tertua tetapi mempertahankan system message dan message terakhir. Alat ini tidak menghitung token, jadi selalu menampilkan seluruh percakapan.

Untuk model qwen3 dan deepseek-r1, Ollama menghapus <think>…</think> dari assistant message sebelum user message terakhir. Alat ini tidak.

Mencetak seluruh message atau {{ .Messages }} menampilkan alamat memori di Ollama (0xc…), yang berubah setiap kali. Alat ini menampilkan placeholder.

currentDate dan yesterdayDate memakai tanggal hari ini di komputer Anda. Ollama memakai tanggal di server.

Diperiksa pada 2026-11-09 terhadap kode sumber Ollama (v0.40.15), text/template Go, dan Ollama 0.40.11: Ollama: Template · template.go

Semuanya berjalan di browser Anda. Tidak ada yang dikirim ke mana pun.

Ollama mengubah percakapan menjadi teks yang dibaca model dengan TEMPLATE milik model, yang ditulis dalam bahasa template Go: {{ range .Messages }}, {{ .Role }}, {{ .Content }}, {{ if .Tools }}, dan seterusnya. Kesalahan kecil, seperti baris baru yang hilang, {{- yang memangkas terlalu banyak, atau nama field yang tidak ada, mengubah apa yang dilihat model atau membuat setiap permintaan gagal. Alat ini menjalankan template Anda seperti yang dilakukan Ollama. Alat ini mengikuti aturan text/template Go (penanda pemangkas, variabel, range, with, perbandingan, printf, pesan error), meneruskan data yang sama seperti yang diteruskan Ollama (System, Messages dengan Role, Content, Thinking, ToolCalls, ToolName, dan ToolCallID, Tools, Think, ThinkLevel, IsThinkSet, Prompt, Suffix, Response) dan memiliki fungsi tambahan Ollama (json, currentDate, yesterdayDate, toTypeScriptType). Alat ini juga meniru cara Ollama menyiapkan data: system message digabung ke .System, message berurutan dari role yang sama digabung dengan baris kosong, SYSTEM milik model ditambahkan ketika message pertama bukan system message, dan gambar menjadi [img-0], [img-1], dan seterusnya. Template yang tidak pernah memakai .Messages berjalan dengan cara lama, sekali per giliran dengan .Prompt dan .Response, dan Ollama menambahkan {{ .Response }} ke template yang tidak memakai keduanya. Sejak Ollama 0.40, sebuah model juga dapat membawa chat template di dalam file GGUF-nya (tokenizer.chat_template), dan Ollama memilih salah satu dari keduanya berdasarkan apa yang bisa dilakukan masing-masing: tools, thinking, dan fill-in-the-middle. Tempel chat template GGUF di bagian Lanjutan dan alat ini memberi tahu mana yang akan dipakai Ollama. Kami memeriksa alat ini dengan tiga cara: terhadap text/template milik Go sendiri (Go 1.26.6) yang menjalankan kode template Ollama pada 243 kasus, termasuk 20 template bawaan Ollama, yang keluaran ujinya cocok dengan alat ini; terhadap Ollama 0.40.11 di komputer ini dengan 330 permintaan /api/generate; dan dengan 49 permintaan /api/chat ke qwen2.5:7b dan ke model yang kami buat dengan TEMPLATE kami sendiri. Keluaran dan pesan error cocok.

Logika utama alat ini bersifat sumber terbuka dengan lisensi MIT. github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

Kapan dipakai

  • Memeriksa TEMPLATE yang sedang Anda tulis untuk Modelfile sebelum menjalankan ollama create: baris baru, token khusus, system message, tool calls, dan hasil tool
  • Mencari tahu mengapa mengubah TEMPLATE tidak berpengaruh, dan apakah Ollama memakainya atau chat template di file GGUF
  • Melihat persis apa yang diterima model dalam percakapan panjang dengan tools, untuk men-debug tool calls yang salah atau hilang

Cara pakai

  1. Tempel template ke kotak (ollama show --template <model> mencetak template model yang Anda punya), atau mulai dari salah satu contoh.
  2. Pilih /api/chat dan edit messages dan tools sebagai JSON, dengan bentuk yang sama seperti API, atau pilih /api/generate dan isi prompt, system, dan suffix. Atur think jika Anda memakainya.
  3. Baca hasilnya, dengan spasi ditampilkan jika perlu. Untuk membandingkan dengan Ollama Anda sendiri, jalankan perintah curl di bagian bawah dengan nama model Anda.

Tanya jawab

Saya mengubah TEMPLATE, tetapi keluarannya tidak berubah. Mengapa?

Sejak Ollama 0.40, sebuah model dapat memiliki dua template: TEMPLATE dari Modelfile dan chat template di dalam file GGUF. Ollama memilih yang bisa melakukan lebih banyak (tools, thinking, fill-in-the-middle). Dalam pengujian kami dengan Ollama 0.40.11, TEMPLATE tanpa tools diabaikan pada model yang dibuat dari qwen2.5:7b, karena chat template GGUF milik qwen2.5:7b mendukung tools. Log server menunjukkan pilihannya di baris "template selection" (selected=go_template atau selected=gguf_chat_template), dan mengatur OLLAMA_GO_TEMPLATE=1 untuk server membuat Ollama memakai TEMPLATE setiap kali model memilikinya.

Bagaimana cara melihat prompt yang sebenarnya dibuat Ollama saya?

Kode sumber Ollama memiliki opsi debug, _debug_render_only, yang mengembalikan prompt alih-alih menjalankan model (sebagai _debug_info.rendered_template). Kami memakainya untuk memeriksa alat ini. Opsi ini tidak ada di dokumentasi API, jadi bisa berubah. Alat ini membuatkan perintah curl untuk Anda.

Apa bedanya template dengan .Messages dan dengan .Prompt?

Jika template memakai .Messages, Ollama menjalankannya sekali dengan seluruh percakapan. Jika tidak, Ollama menjalankannya sekali per giliran dengan .System, .Prompt, dan .Response, dan pada giliran terakhir memotong template setelah {{ .Response }}, sehingga model melanjutkan dari sana. Alat ini menunjukkan cara mana yang dipakai.

Mengapa Ollama menjawab "does not support tools" atau "does not support thinking"?

Ollama menolak permintaan dengan tools ketika template yang dipakainya tidak mendukung tools (sebuah TEMPLATE mendukungnya bila memakai .Tools), dan menolak permintaan dengan think diatur ke true atau suatu level ketika template tidak punya bagian thinking. Untuk template yang punya bagian thinking, Ollama menyalakan think ketika permintaan tidak mengaturnya. Alat ini menunjukkan keduanya.

Tools di prompt saya tidak terlihat seperti JSON. Apakah itu bug di alat ini?

Kemungkinan bukan. Dalam template Go, sebuah nilai dicetak sebagai JSON hanya bila tipenya menentukan demikian. .Tools milik Ollama, satu tool utuh, dan .Function.Arguments dicetak sebagai JSON, tetapi .Function dicetak dalam format Go sendiri. Dalam pengujian kami, template qwen2.5:7b memakai {{ .Function }}, dan Ollama 0.40.11 mengirim ke model teks seperti {get_weather Get the weather {object <nil> <nil> [city] {…}}}. Pakai {{ json .Function }} jika Anda menginginkan JSON.

Apakah template saya dikirim ke suatu tempat?

Tidak. Semuanya berjalan di browser Anda.

Terkait