报错是这么冒出来的。vLLM 0.6.4 从 Qwen2.5 换成 Qwen3-8B 后,同样的 chat 请求返回里没有思考段,日志提示模板里找不到 think 相关变量,前端依赖思考内容做展示。

中间走过弯路,把「旧模板文件被缓存,加载的还是 Qwen2.5 那份」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。Qwen3 模板依赖 enable_thinking 变量,默认值随版本不同。还有一种是请求没传 chat_template_kwargs,模板按关闭处理。

还有一种情况,服务端 tokenizer 配置没有跟着换。

显式传模板变量打开思考

python call_qwen3.py --thinking on

然后确认加载的模板来自新模型目录

python -c "from transformers import AutoTokenizer;print(AutoTokenizer.from_pretrained('Qwen/Qwen3-8B').chat_template[:200])"

接着清掉旧的模板缓存再重启

rm -rf ~/.cache/vllm/template

剩下的就是对比开关两种情况的输出长度

python cmp_thinking.py --on --off

别只看报错消失,验证要多做一步。打开时返回里带思考段且 finish_reason 正常,关闭时直接给答案,两种模式都不报模板变量缺失。

换模型族时 chat template 一定要重新读一遍,模板变量名各家用得不一样,照抄上一版的参数经常静默失效。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189