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|> 切换开关,您可将其插入任何消息中。
qwen3.5/chat_template.jinja 或 qwen3.6/chat_template.jinja 的内容--jinja --chat-template-file qwen3.6/chat_template.jinja将 tokenizer_config.json 中的 chat_template 字符串替换为文件内容。
覆盖本地模型目录中的 chat_template.jinja 文件。使用 --jinja 参数加载。移除所有 chat_template_kwargs 覆盖项——模板会在内部处理所有内容。
| 文件 | 适用模型 |
|---|---|
qwen3.5/chat_template.jinja | Qwen3.5-35B-A3B、Qwen3.5-32B、Qwen3.5-14B 以及所有 Qwen 3.5 变体 |
qwen3.6/chat_template.jinja | Qwen3.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这样的合法路径。
这些模板已捆绑在以下模型中:
如果您正在使用上述模型之一,那么您已经拥有该模板。本仓库是为其他用户准备的。
官方模板使用|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