在部署通义千问 3(Qwen3)系列大模型时,"思考模式"(即模型推理过程的可视化输出)是一个高频调整项。本文将详细讲解在 Ollama 和 vLLM 两种主流部署框架中,如何灵活开启 / 关闭 Qwen3 的思考模式。

一、Ollama 中 Qwen3 思考模式的开启与关闭

Ollama 以轻量化、易部署著称,针对 Qwen3 的思考模式控制提供了多种灵活的实现方式,可根据使用场景选择。

1. 提示词指令(单轮生效)

最简单的方式是在提问末尾添加 /no_think 指令,该指令仅对当前对话轮次生效,模型会直接输出最终答案,不展示推理过程。

plaintext

你好,请介绍一下自己/no_think
AI写代码

2. 命令行参数(全局生效)

启动模型时通过参数全局关闭思考模式,适用于整个会话周期:

bash

运行

# 方式1:使用 --think=false 参数
ollama run qwen3:4b --think=false

# 方式2:使用 --hidethinking 参数(等效)
ollama run qwen3:4b --hidethinking

3. 交互式会话命令(会话内生效)

已进入ollama run交互式对话后,可通过内置命令切换模式:

plaintext

# 关闭思考模式
/set nothink

# 查看所有支持的会话命令
/?

4. API 调用控制(编程调用)

通过 Ollama API 调用模型时,在请求体中设置"think": false即可关闭思考模式:

json

{
  "model": "qwen3",
  "messages": [
    {"role": "user", "content": "请解释Python装饰器的原理"}
  ],
  "think": false
}

5. 使用非思考版本模型

部分 Qwen3 模型变体本身不包含思考功能(如qwen3:235b-a22b-instruct-2507-q4_K_M),直接使用此类模型即可默认关闭思考模式。

Ollama 模式控制重要说明

  • 指令优先级:模型遵循最新指令,若之前开启思考模式,最新消息中添加/no_think即可覆盖;
  • 模型限制:专为深度推理设计的模型(如qwen3-30b-a3b-thinking-2507)可能无法完全关闭思考模式;
  • 参数差异enable_thinking是模型库(Transformers/SGLang)的原生参数,Ollama 推荐使用上述专属参数。

二、vLLM 中 Qwen3-32B 思考模式的开启与关闭

vLLM 以高性能推理著称,针对 Qwen3-32B 的思考模式控制主要通过 API 参数、启动配置和提示词指令实现。

1. 核心控制方式

(1)API 请求参数控制(推荐,动态灵活)

通过chat_template_kwargs中的enable_thinking参数动态控制,支持单请求粒度的模式切换:

  • 关闭思考模式:enable_thinking=False
  • 开启思考模式:enable_thinking=True(默认值)
(2)启动参数控制(全局禁用)

启动 vLLM 服务时指定自定义聊天模板,全局禁用思考模式(需提前准备禁用思考的 Jinja 模板文件):

bash

运行

vllm serve Qwen/Qwen3-32B --chat-template ./qwen3_nonthinking.jinja
(3)提示词软开关(模型层指令)

与 Ollama 兼容,通过消息末尾指令实现模式切换:

  • 关闭思考:/no_think
  • 开启思考:/think

2. Python API 调用示例(完整可运行)

使用 OpenAI 兼容接口调用本地 vLLM 服务,演示思考模式的开关控制(需安装openai>=1.0.0):

python

运行

from openai import OpenAI

# 1. 初始化客户端,连接本地vLLM服务
client = OpenAI(
    api_key="EMPTY",  # vLLM无需密钥,填写任意值即可
    base_url="http://localhost:8000/v1",  # vLLM默认服务地址
)

# 2. 准备对话消息
messages = [
    {"role": "user", "content": "请解释一下引力波是如何被探测到的。"}
]

# 3. 发起API请求,控制思考模式
try:
    response = client.chat.completions.create(
        model="Qwen/Qwen3-32B",  # 需与启动服务时的--served-model-name一致
        messages=messages,
        max_tokens=1024,
        temperature=0.7,
        top_p=0.8,
        # 关键:通过extra_body传递思考模式控制参数
        extra_body={
            "top_k": 20,
            "chat_template_kwargs": {
                "enable_thinking": False  # False关闭,True开启
            }
        }
    )
    
    # 4. 输出模型回复
    print("模型回复:")
    print(response.choices[0].message.content)

except Exception as e:
    print(f"请求错误:{e}")

vLLM 模式控制重要注意事项

  • 参数位置enable_thinking非 OpenAI 标准参数,必须放在extra_body字段中传递;
  • 版本兼容:vLLM 0.8.5 中--reasoning-parserenable_thinking=False不兼容,建议升级至 0.9.0+;
  • 模型要求:需使用支持思考能力的 Qwen3 版本(如 Instruct/Thinking 后缀),基础预训练模型无此功能。

总结

  1. Ollama:优先选择提示词/no_think(单轮)或命令行--think=false(全局),API 调用需设置"think": false
  2. vLLM:推荐通过 API 请求的extra_body.chat_template_kwargs.enable_thinking参数动态控制,灵活性最高;
  3. 两种框架均兼容/no_think//think提示词指令,可作为通用软开关使用。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐