关于Qwen3模型开启/关闭思考模式的实现方法,结合当前技术文档和社区实践,具体说明如下:
参考文章:https://www.hiascend.com/forum/thread-0226184670714099074-1-1.html
1. 自动切换机制的理想与现状
理想情况下,模型应根据上下文复杂度和问题需求自动选择是否开启思考模式(如多步推理、深度分析)。但目前单一SOTA模型尚未实现该能力,需通过外部控制手段实现。社区建议通过Agent框架(如LangChain、AutoGPT)结合模型能力分层调用,未来可能逐步实现自动切换。
2. 手动控制方法详解
(1) Prompt动态追加关键字(建议用这种,比较方便)
- 开启思考:默认已开启,无需额外操作。
- 关闭思考:在输入Prompt末尾追加空格后接
/no_think
(注意格式为空格+/no_think
)。
示例(可以参考下图):
原理:模型通过识别特殊标识符跳过深度思考流程,直接输出简洁结果。请总结以下文本:... /no_think
限制:需确保输入格式严格符合要求,否则可能触发报错或无效。
(2) 借助Chat-Template变量控制
通过编程接口动态设置 enable_thinking
参数:
- 关闭思考:在调用
tokenizer.apply_chat_template(...)
时指定enable_thinking=False
。
代码示例(Transformers/VLLM):prompt = tokenizer.apply_chat_template( messages, enable_thinking=False # 关闭思考模式 )
- 开启思考:默认行为,或显式设置
enable_thinking=True
。
支持框架:Transformers、vLLM。
注意:部分部署环境(如MindI-2.0T17)因未传递chat_template_kwargs
参数,暂不支持此方法。
(3) 修改模型配置文件实现默认行为
若需全局默认关闭思考模式,可修改模型权重目录下的 tokenizer_config.json
文件:
- 原配置(默认开启思考):
{%- if enable_thinking is defined and enable_thinking is false %}
- 修改后(默认关闭思考):
效果:未显式指定{%- if enable_thinking is not defined or enable_thinking is false %}
enable_thinking=True
时,默认进入非思考模式。
兼容性:原有两种控制方法(Prompt关键字、API参数)仍可覆盖默认行为。
3. 方法对比与适用场景
方法 | 实时性 | 灵活性 | 部署复杂度 | 适用场景 |
---|---|---|---|---|
Prompt追加关键字 | 高 | 中 | 低 | 单次请求快速切换 |
Chat-Template变量 | 高 | 高 | 中 | API服务动态控制 |
修改配置文件 | 低 | 低 | 高 | 固定部署需求(如边缘设备) |
4. 注意事项
- 性能影响:思考模式会显著增加推理时延(尤其长上下文场景),建议根据任务类型权衡。
- 兼容性验证:不同部署框架(如Ollama、vLLM、LMStudio)对控制参数的支持存在差异,需参考具体文档。
- 未来优化:社区正在探索结合动态批处理和路由模型实现自动模式切换,可能成为下一代迭代重点。
通过上述方法,开发者可灵活控制Qwen3的思考行为,平衡推理效率与任务需求。具体实现时建议结合部署环境测试验证。