Qwen 本地部署,一份被严重低估的救命模板

lxiol
📝
今天聊一个每个本地部署 Qwen 的人迟早会踩的坑 —— 聊天模板 Qwen3。5倍,驱动 Claude Codehttps://mp

原文链接:https://mp.weixin.qq.com/s/UYsP_n-QYdX5CWK_ChduHA

今天聊一个每个本地部署 Qwen 的人迟早会踩的坑 —— 聊天模板

Qwen3.6 MTP加速,本地部署加速1.5倍,驱动 Claude Code

Qwen3.6-27B 量化版本推荐,本地部署

事情是这样的,最近想用 Qwen3.6 跑点 Agent 任务,结果一上手就翻车:在 LM Studio 里偶尔工具调用刚发出去模型就 <|im_end|> 提前收摊,换到 llama.cpp 上 loop.previtem 直接报解析错误,搬到 vLLM 上想跑 Codex 工具发个 developer role 又被官方模板嫌弃……一通操作下来感觉自己不是在用模型,是在调试一个 Jinja 模板

后来才知道,这些不是我用错了,全是 Qwen 官方 jinja chat template 的锅

HuggingFace 上有个叫 froggeric 的老哥实在看不下去,干脆自己 fork 了官方模板,专门治这些病

项目名简单粗暴:Qwen-Fixed-Chat-Templates,目前已经迭代到 v19,专为 Qwen 3.5 和 Qwen 3.6 全系列(27B / 32B / 35B 都包)打造

简介

一句话讲清楚:这是一个 drop-in 直接替换 的 jinja 聊天模板,专修官方版本的渲染错误、KV Cache 失效、token 浪费和 Agent 任务下的致命卡死


直接把官方 chat_template.jinja 换成 froggeric 这个版本就行,模型权重不用动,量化文件不用重做

经过实测,在以下推理引擎上都能跑:

  • LM Studio:右侧面板换 Prompt Template 直接保存
  • llama.cpp / koboldcpp--jinja --chat-template-file chat_template.jinja
  • vLLM:替换 tokenizer_config.json 里的 chat_template 字段,配合 --tool-call-parser qwen3_coder
  • MLX / oMLX:覆盖本地模型目录的 chat_template.jinja,启动加 --jinja
  • 任意支持 HuggingFace Jinja 模板的引擎也通吃

官方模板到底有多少坑?

Qwen 官方 jinja 模板五大病症

Qwen 官方 jinja 模板五大病症
直接上 froggeric 整理的”罪状表”(v19 视角):

类别

问题

后果
Agent 死循环
提前停机 Bug

模型想边说话边调工具,结果一上头就 `<
Agent 死循环
重试自旋

工具明明报错了,模型还在原地反复发同一个失败的 <tool_call>
Agent 死循环
工具调用后过度思考

拿到数据后陷入”我该不该回答”的内心戏
Agent 死循环
误判错误

返回结果里只要带个 error 字样,立刻误以为工具失败
性能
KV Cache 失效

历史 prune 每轮都改变,整个 prompt 重新算一遍,速度起飞(向下)
性能
“空 think” 中毒

历史里残留一堆空 <think></think>,模型学会”不思考才能用工具”的诡异认知
兼容性
老旧 C++ 引擎崩溃
loop.previtem
在老版 llama.cpp / minijinja 上直接挂
兼容性
工具调用格式错

Qwen 训练时用的是 XML 格式 <function=name>,官方模板却给改成 JSON,vLLM 的 qwen3_coder 解析器直接懵
兼容性
Jinja C++ 崩溃

Python 专属过滤器 mapfirst 在 minijinja 上是一炸一个准
稳定性
对话中插系统消息崩溃

框架想中途插一句 system 指令,模板硬错
稳定性
没用户消息直接崩

纯 Agent loop 或系统消息上下文里 raise_exception 触发
稳定性
思考没关就调工具

XML 标签泄漏到工具解析器
边界 casedeveloper
角色被拒

Claude Code / Codex / OpenCode 现代 API 都用 developer 角色,官方模板不认
边界 case--reasoning off
被忽略

明明关了思考,错误升级路径里又偷偷开了 <think> 块
边界 case
关思考时幻觉 reasoning 标签

Qwen 自己会幻觉出多余的 \n,堆栈空格炸了

v19 改了什么(这是最值得看的部分)

v19 三大修复 · The Agentic Loop Cure

v19 三大修复 · The Agentic Loop Cure
v19(2026-05-18 发布)的核心是 The Agentic Loop Cure,三件大事:

1. 干掉”空 think 中毒”

之前的版本为了省 token,把历史里的 <think> 块清空成空标签,结果模型把”空思考 = 可以调工具”和”完整思考 = 必须接对话”建立了一个错乱的关联,80% 以上的过早收摊 Bug 都来自这个,v19 直接重写 AST 历史渲染,彻底不再注入空 think 块

2. 拆掉系统提示词里的”逻辑陷阱”

老版的 <IMPORTANT> 块里给了一道死命令:”</think> 之后必须调工具”,模型一遇到只想聊天的场景就 panic,v19 改成了 Universal Synthesis 指令,允许模型从 </think> 直接转入对话回复,不必再为这条规则做内心 debate

3. KV Cache 100% 命中 + Amnesia 修复

preserve_thinking 现在默认 true,过去的思考链严格按时序保留,完全治好了多步工具循环里的”失忆卡顿”,同时数学保证 100% Prefix KV Cache 命中率,本地推理速度直接拉满

这一波下来,agent loop 基本可以一气跑完,不再卡在中途乱拐弯

安装方式

按你用的引擎选一个:

LM Studio

1
2
3
4
`1. 右侧面板打开 Qwen 模型
2. 找到 Prompt Template
3. 把 chat_template.jinja 全文粘进去
4. 保存`

llama.cpp / koboldcpp

1
`--jinja --chat-template-file chat_template.jinja`

vLLM

把 tokenizer_config.json 里的 chat_template 字段整段替换成 jinja 文件原文,然后配合 Qwen 原生 XML 工具解析器:

1
`--tool-call-parser qwen3_coder`

oMLX

覆盖本地模型目录的 chat_template.jinja,启动时加 --jinja,把所有 chat_template_kwargs 覆盖项删掉,模板内部已全自动处理


Qwen 3.5 / 3.6 全系列(35B / 32B / 27B / 14B)共用同一个 chat_template.jinja,不需要分版本

思考模式开关,省钱小妙招

思考模式:一个 token 切换深浅

思考模式:一个 token 切换深浅
这套模板还有一个我特别喜欢的功能:思考模式可以在 prompt 里随时切换

直接在 system 或 user 消息里塞一个 control token:

1
2
3
4
5
6
7
`快速回答,不思考:
System: You are a coding assistant. <|think_off|>
User: What's 2+2?

深度推理:
System: You are a coding assistant. <|think_on|>
User: Implement a red-black tree in Rust.`

模板会自动拦截这个 tag,从最终上下文里删掉,模型看不到,但模式已经切了

为什么用 <|think_on|> 而不是早期社区流行的 /think?因为 Qwen 控制 token 的 delimiter 绝不会和正常文本或文件路径打架,安全等级高一档

想再省点 token?

v19 默认 preserve_thinking=true,主打 KV Cache 命中率,但如果你显存吃紧、context window 紧张,可以在引擎模板 kwargs 里关掉:

1
2
3
`{
  "preserve_thinking": false
}`

代价是多轮对话 KV Cache 命中率会下降(prompt 字符串会动态变化),但能省下一截 context

唯一的小坑:升级到 v19 的时候,preserve_thinking默认改成 true 了,如果你之前自己改过 kwargs,记得对照一下

总结

老实讲,这是那种”看起来不起眼但用过就回不去”的项目,没有花哨的功能,就是把官方挖的坑一个一个填了

适合的人群:

  • 用 llama.cpp / LM Studio / vLLM 本地跑 Qwen 3.5 / 3.6 的所有人
  • 想跑 Agent / 工具调用 / Coder 任务的开发者
  • 被 KV Cache 失效折磨到怀疑硬件的同学
  • 用 Claude Code / Codex / OpenCode 接 Qwen 的玩家

唯一的劝退点是:得自己手动替换模板,对纯小白稍微有门槛,但跟着官方 README 一步步来五分钟就能搞定

#Qwen #chat_template #llama.cpp #vLLM #Agent #本地部署

制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个🌟,谢谢你看我的文章,我们下篇再见!


💬 本文评论区已开启,但暂无读者留言。

本文转载自微信公众号,如有侵权请联系删除。

  • 标题: Qwen 本地部署,一份被严重低估的救命模板
  • 作者: lxiol
  • 创建于 : 2026-05-25 14:52:20
  • 更新于 : 2026-05-25 14:52:20
  • 链接: https://blog.lxiol.cn/2026/05/25/Qwen-本地部署一份被严重低估的救命模板/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。