# 一个 Chat Template 救活 KV 缓存

> MTP 下 Qwen3.6-27B 稳定 50+ t/s，但聊几句就刷缓存不命中、重算几十秒到几分钟。换成 Qwen-Fixed-Chat-Templates 后，聊一小时缓存失效只剩个位数次。

![Chat Template 缓存命中优化示意](/assets/articles/lcz/chat-template/hero.jpg)

> MTP 加持下 Qwen3.6-27B 稳定 50+ t/s，但聊几句控制台就刷缓存不命中警告，prompt 重新处理要几十秒到几分钟。换了一个 chat template，问题基本消失。

## 症状

llama.cpp + Hermes 跑 Qwen3.6-27B-Q4_K_M，MTP 投机解码，速度 50+ t/s 很够用了。但每聊几句，控制台就输出：

```
W slot update_slots: forcing full prompt re-processing 
due to lack of cache data
erased invalidated context checkpoint (size = 231.851 MiB)
```

然后就是漫长的 prompt 重新处理 + 重建 context checkpoint，持续几十秒到几分钟，显卡风扇呼呼转。**聊得越久、上下文越大，出现越频繁**——严重影响思路连贯性。

## 排查过程

研究了几个晚上，问遍国内外 AI 模型，尝试了各种参数组合（batch、ubatch、no-warmup、no-mmap、flash-attn 全试过），都不得其果。

## 解法：Qwen-Fixed-Chat-Templates

换了一个固定 chat template 后效果立竿见影：

- 聊了近一个小时，反复网络搜索 + 工具调用
- **缓存不命中只出现个位数次数**（之前是每隔几句就刷）
- 流畅度质变

```bash
# 启动参数关键项
--jinja --chat-template-file models/Qwen/chat_template.jinja

# 下载
hf download froggeric/Qwen-Fixed-Chat-Templates chat_template.jinja --local-dir models/Qwen
```

## 为什么有效

默认 chat template 在每轮对话时会重新组织 prompt 结构，导致 KV cache 的 prefix 对不上，llama.cpp 判定缓存失效、整段重算。**固定 template 让 prompt 前缀结构稳定**，prefix 命中，缓存就能复用。

## 一句话

本地模型跑 agent 卡顿、风扇狂转、缓存反复失效——先查 chat template 是不是固定的。这一项不改，其他参数都白调。


---
来源：https://laobanclaw.top/articles/qwen-fixed-chat-template-cache/（AI 军火库）
