o
openharmony-models/Qwen-Fixed-Chat-Templates
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Qwen 3.5 和 3.6 的修复版聊天模板

2026-05-05 — 根据社区合并的模板(allanchan339、fakezeta)进行了审核。确认所有有用功能均已包含;from_json 字符串参数解析无法移植到 C++ 引擎。感谢 allanchan339 添加了未闭合思考块的自动关闭功能。

即插即用的 Jinja 模板,可修复官方 Qwen 聊天模板中的渲染错误、令牌浪费和功能缺失问题。适用于 LM Studio、llama.cpp、vLLM、MLX、oMLX 以及任何支持 HuggingFace Jinja 模板的引擎。

为什么需要此模板

官方 Qwen 模板存在一些 bug,影响实际使用:

问题影响
C++ 引擎上工具调用失败LM Studio、llama.cpp、MLX、oMLX 中不存在 `
developer 角色被拒绝现代 API 会发送此角色;官方模板会引发错误
空思考块占用上下文即使内容为空,每个过往对话轮次都会被标签包裹
无法切换思考模式只能使用模型默认的思考模式
Qwen 3.6:</thinking> 幻觉模型有时会生成错误的闭合标签;解析器失败
无用户查询异常中断工具调用raise_exception 会导致 OpenClaw 及类似运行时中的智能体循环崩溃并重置
工具调用前思考块未闭合模型开始推理后调用工具,但未关闭思考块 — 输出格式错误

此处已修复所有上述七个问题,并添加了简洁的 <|think_on|> / <|think_off|> 切换开关,您可将其插入任何消息中。

快速安装

LM Studio

  1. 在右侧面板中打开您的 Qwen 模型
  2. 滚动至 Prompt Template(提示模板)
  3. 将模板替换为 qwen3.5/chat_template.jinja 或 qwen3.6/chat_template.jinja 的内容
  4. 保存

llama.cpp / koboldcpp

--jinja --chat-template-file qwen3.6/chat_template.jinja

vLLM / TextGen

将 tokenizer_config.json 中的 chat_template 字符串替换为文件内容。

oMLX

覆盖本地模型目录中的 chat_template.jinja 文件。使用 --jinja 参数加载。移除所有 chat_template_kwargs 覆盖项——模板会在内部处理所有内容。

我应该使用哪个文件?

文件适用模型
qwen3.5/chat_template.jinjaQwen3.5-35B-A3B、Qwen3.5-32B、Qwen3.5-14B 以及所有 Qwen 3.5 变体
qwen3.6/chat_template.jinjaQwen3.6-27B、Qwen3.6-35B-A3B 以及所有 Qwen 3.6 变体

3.6 版本的模板是一个超集——它额外支持 preserve_thinking、</thinking> 幻觉恢复以及中断的思维流。如果您使用的是 3.6 版本模型,请使用 3.6 版本的文件。

思维模式切换

在系统提示或用户提示的任意位置插入 <|think_on|> 或 <|think_off|>。模板会拦截该标签,将其从上下文中移除(模型永远不会看到它),并切换模式。

快速回答,无需推理:

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.

标签语法(<|think_on|>、<|think_off|>)采用了Qwen的控制令牌分隔符,因此绝不会与真实文本发生冲突。早期的社区模板使用/think,这会破坏像cd /mnt/project/think这样的合法路径。

预安装模型

这些模板已捆绑在以下模型中:

  • froggeric/Qwen3.6-27B-MLX-8bit
  • froggeric/Qwen3.6-27B-MLX-4bit
  • froggeric/Qwen3.5-35B-A3B-Uncensored-FernflowerAI-MLX-8bit
  • froggeric/Qwen3.5-35B-A3B-Uncensored-FernflowerAI-MLX-4bit
  • froggeric/Qwen3.6-27B-Uncensored-Heretic-v2-MLX-8bit
  • froggeric/Qwen3.6-27B-Uncensored-Heretic-v2-MLX-6bit
  • froggeric/Qwen3.6-27B-Uncensored-Heretic-v2-MLX-4bit
  • froggeric/Qwen3.6-35B-A3B-Uncensored-Heretic-MLX-8bit
  • froggeric/Qwen3.6-35B-A3B-Uncensored-Heretic-MLX-6bit
  • froggeric/Qwen3.6-35B-A3B-Uncensored-Heretic-MLX-4bit

如果您正在使用上述模型之一,那么您已经拥有该模板。本仓库是为其他用户准备的。


技术细节 — 具体修复了哪些问题

C++引擎上的工具调用

官方模板使用|items来迭代工具调用参数:

{%- for key, value in tool_call.arguments|items %}

Python 的 Jinja 支持 |items。C++ 运行时(LM Studio、llama.cpp、MLX)不支持——模板会产生渲染错误而非输出。本模板改用直接字典键查找:

{%- for args_name in tool_call.arguments %}
    {%- set args_value = tool_call.arguments[args_name] %}

它还将 is sequence 替换为 is iterable(更严格的 C++ 运行时要求如此),移除了 |safe 包装器(这也是仅限 Python 的),并处理以原始字符串而非对象形式返回的参数。

developer 角色

OpenAI 兼容的 API 规范会为系统级指令发送 message.role == "developer"。官方 Qwen 模板仅检查 "system",遇到其他值时会抛出错误。此处的两个模板均接受 "developer" 并将其映射到系统角色。

空思考块

官方模板会将每个过往的助手轮次都包装在思考标签中:

<|im_start|>assistant