Ollama&vllm中部署模型think模式开启关闭
(一)Ollama中think模式开启关闭
在 Ollama 中部署 Qwen3 模型时,关闭其“思考模式”(即不显示推理过程 ``)有以下几种常用方法。
1. 在提示词中添加指令
最简单的方式是在你的提问末尾加上 /no_think 指令。这会让模型在当前轮次直接输出最终答案,而不展示思考过程。
你好,请介绍一下自己/no_think
2. 通过命令行参数设置
在启动模型时,可以使用 --think=false 或 --hidethinking 参数来全局关闭思考模式。
ollama run qwen3:4b --think=false
# 或
ollama run qwen3:4b --hidethinking
3. 在交互式会话中使用命令
如果你已经通过 ollama run 进入了交互式对话,可以在会话中输入命令来关闭思考模式。
/set nothink
输入 /? 可以查看当前会话支持的所有命令。
4. 通过 API 调用控制
在使用 Ollama 的 API 进行聊天请求时,可以在请求体中设置 "think": false 来关闭思考。
{
"model": "qwen3",
"messages": [
{"role": "user", "content": "你的问题"}
],
"think": false
}
5. 使用非思考版本的模型
有些 Qwen3 模型变体(如 qwen3:235b-a22b-instruct-2507-q4_K_M)本身就不是“思考模型”,直接使用它们就不会有思考过程。
重要说明
- 指令优先级:在对话中,模型会遵循最新的指令。如果你之前开启了思考,在最新的消息中加上
/no_think即可关闭。 - 模型限制:部分专门为深度推理设计的模型(如
qwen3-30b-a3b-thinking-2507)可能无法完全关闭思考模式。 - 参数差异:某些教程中提到的
enable_thinking参数通常是在直接使用模型库(如 Transformers 或 SGLang)时设置,在 Ollama 的上下文中,更推荐使用上述几种方法。
你可以根据自己使用 Ollama 的方式(命令行交互、API 调用等)选择最方便的方法来关闭思考模式。
(二)Vllm中think模型开启关闭
在 vLLM 中部署 Qwen3-32B 模型时,可以通过 API 请求参数 或 启动配置 来控制其“思考模式”(即是否输出推理过程 ``)的开启与关闭。
一、如何设置思考模式的开启与关闭
1. 通过 API 请求参数控制(推荐)
这是最灵活的方式,可以在每次请求时动态控制。关键参数是 chat_template_kwargs 中的 enable_thinking。
- 关闭思考模式:将
enable_thinking设为False。 - 开启思考模式:将
enable_thinking设为True(默认行为)。
2. 通过启动参数控制(全局设置)
在启动 vLLM 服务时,可以通过指定自定义聊天模板来全局禁用思考模式,即使用户在提示中要求思考也会被阻止[。
vllm serve Qwen/Qwen3-32B --chat-template ./qwen3_nonthinking.jinja
注意:此方法需要你准备一个禁用了思考功能的 Jinja 模板文件。
3. 软开关:在用户消息中指令
模型本身也支持通过特定的指令来切换模式,这是一种“软开关”。
- 关闭思考:在用户消息末尾添加
/no_think指令[[3]]。 - 开启思考:在用户消息末尾添加
/think指令。
二、调用 vLLM API 的 Python 代码示例
以下示例使用 openai Python 包(需安装 openai>=1.0.0)调用本地 vLLM 服务,并演示如何开关思考模式。
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 传递 enable_thinking 参数来控制思考模式
extra_body={
"top_k": 20,
"chat_template_kwargs": {
"enable_thinking": False # 关闭思考模式。改为 True 则开启。
}
}
)
# 4. 打印模型的回复
print("模型回复:")
print(response.choices[0].message.content)
except Exception as e:
print(f"请求发生错误:{e}")
三、重要注意事项
- 参数位置:
enable_thinking参数并非 OpenAI 官方 API 标准,因此必须放在extra_body字段中传递。 - 与思考内容解析的兼容性:如果你在启动 vLLM 时使用了
--reasoning-parser参数来解析思考内容,在 vLLM 0.8.5 版本中,这与enable_thinking=False不兼容。此问题在 vLLM 0.9.0 及更高版本中已得到解决[[5]]。 - 模型版本:确保你部署的
Qwen3-32B是支持思考能力的版本(通常是Instruct或Thinking后缀的模型)。基础预训练模型可能不具备此功能。
总结:最常用的方法是在 API 调用时,通过 extra_body 中的 chat_template_kwargs: {"enable_thinking": True/False} 来精确控制每次请求的思考模式。
更多推荐
所有评论(0)