注意
LM Studio GUI 查看/编辑 Prompt Template
进入My Models页面,点击指定模型的编辑模型默认配置按钮(齿轮图标),切换至InferenceTab,展开Prompt Template。
0. Qwen3.5开启思考模式的原理
Qwen3.5的Prompt Template控制思考部分如下:
{{- '<|im_start|>assistant\n' }}
{%- if enable_thinking is defined and enable_thinking is false %}
{{- '<think>\n\n</think>\n\n' }}
{%- else %}
{{- '<think>\n' }}
{%- endif %}- 开启思考
当
enable_thinking为true时,模板在assistant角色后面直接输出:
<|im_start|>assistant
<think>由于文本停留在 <think> 标签,模型在推理时会被迫从“思考模式”开始续写。这就像是给学生一张卷子,并在卷首写好了“解:”,学生自然会接着写推导过程。
2. 跳过思考
当 enable_thinking 为 false 时,模板输出:
<|im_start|>assistant
<think>
</think>模板主动帮模型写完了闭合标签 </think>。在模型的预测逻辑中,它会判定“思考部分已经结束”,于是直接跳转到输出最终答案的阶段。
1. 简单修改Prompt Template关闭思考
直接设置变量enable_thinking,在开头添加
{%- set enable_thinking = false %}2. 使用Jinja逻辑实现提示词中控制思考
以下代码在llama-server中测试不生效,但反转改为/no_think则生效,疑似bug。
为了实现像Qwen3那样通过在提示词中输入/think控制模型思考,使用Jinjia代码判断提示词中是否包含该字样,以此来设置变量enable_thinking。
2.1. /think 控制 enable_thinking
将控制思考的代码改成:
{{- '<|im_start|>assistant\n' }}
{%- set last_msg = messages[-1] %}
{%- set enable_thinking = (last_msg.role == "user" and last_msg.content.endswith("/think")) %}
{%- if enable_thinking %}
{{- '<think>\n' }}
{%- else %}
{{- '<think>\n\n</think>\n\n' }}
{%- endif %}2.2. 移除提示词中的/think
由于沙箱机制,message[x].content是不可改的,故只能在模板输出时过滤掉/think。
Qwen3.5的Prompt Template中,通过宏render_content统一处理内容:
{%- macro render_content(content, do_vision_count, is_system_content=false) %}
{%- if content is string %}
{{- content }} <- 输出文本
{%- elif content is iterable and content is not mapping %}
{%- for item in content %}
...
{%- elif 'text' in item %}
{{- item.text }} <- 输出文本
...在宏render_content中有两处处理文本的模板输出的,我们可以从此处入手,过滤/think,将{{- content }}改为:
{%- if content.endswith("/think") %}
{{- content[:-6] }}
{%- else %}
{{- content }}
{%- endif %}{{- item.text }}同理。
警告
坑
if last_msg.content is string并非恒成立:
在大模型的推理框架中(比如 vLLM 或 Transformers),Python 中的 messages 字典在传递给底层的 Rust 模板引擎(MiniJinja)时,last_msg.content 并没有被直接转换成普通的 Rust 字符串,而是被包装成了一个延迟求值(Lazy Evaluation)的代理对象(Proxy Object)。只有在明确读取其值之后,才会成为真正的字符串。
3. 模型变体 (variant) 法
该方法可以使LM Studio GUI出现
思考切换按钮。
3.1. 创建文件
根据以下目录结构创建文件夹和model.yaml:
~/.lmstudio/
├── models/
│ └── unsloth/
│ └── Qwen3.5-27B-GGUF/
│ ├── Qwen3.5-27B-Q3_K_M.gguf
│ └── mmproj-F16.gguf
└── hub/
└── models/
└── qwen/
└── qwen3.5-27b-no-thinking/
└── model.yaml3.2. model.yaml
model.yaml是一种用于定义跨平台、可组合人工智能模型的开放标准。 欲了解更多详情,请访问:https://modelyaml.org
model: qwen/qwen3.5-27b-no-thinking
base:
- key: unsloth/qwen3.5-27b
sources:
- type: huggingface
user: unsloth
repo: Qwen3.5-27B-GGUF
metadataOverrides:
reasoning: false
customFields:
- key: enableThinking
displayName: "思考"
description: "擅长解决更复杂的问题"
type: boolean
defaultValue: false
effects:
- type: setJinjaVariable
variable: enable_thinking等待LM Studio扫描到该模型,直接加载模型即可。
该方法的原理是创建一个自定义字段,用于控制Prompt Template变量enable_thinking。