Spring AI 集成 vLLM 部署 Qwen3.5:关闭思考过程实战
Qwen3.5 默认输出<think>推理标签,生产场景中常需隐藏该过程。本文记录如何通过Spring AI + vLLM正确关闭思考输出。
✅ 核心结论:客户端使用
.extraBody()传递chat_template_kwargs,服务端需 vLLM ≥ 0.6.4 ,我用的0.17.1,并配置专用解析器。
1. vLLM 服务端启动(关键)
nohuppython-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen3.5-9B\--host0.0.0.0\--port11454\--served-model-name qwen3\--max-num-seqs32\--max-model-len262144\--enable-auto-tool-choice\--tool-call-parser qwen3_coder\--reasoning-parser qwen3\--uvicorn-log-level debug\>~/Documents/logs/vllm.log2>&1&🔑 必配参数
| 参数 | 说明 |
|---|---|
--reasoning-parser qwen3 | 启用 Qwen3.5 推理解析,否则enable_thinking无效 |
--tool-call-parser qwen3_coder | 匹配工具调用格式 |
--served-model-name qwen3 | 客户端调用时的模型短名 |
⚠️ vLLM 版本必须≥ 0.6.4,低版本会忽略
chat_template_kwargs参数。
2. Spring AI 客户端配置
2.1 依赖 (pom.xml)
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.2</version></dependency>2.2 核心代码:关闭思考
publicChatOptionsoptionBuilder(StringmodelName){returnOpenAiChatOptions.builder().model(modelName)// 对应 --served-model-name.temperature(0.7)// 温度:高发散/低保守.maxTokens(32768)// ✅ 关键:通过 extraBody 传递 chat_template_kwargs.extraBody(Map.of("chat_template_kwargs",Map.of("enable_thinking",false))).build();}2.3 调用示例
ChatResponseresponse=chatModel.call(newPrompt("Where is this?",optionBuilder("qwen3")));Stringcontent=response.getResult().getOutput().getContent();System.out.println(content);// 输出不含 <think>3. 常见问题排查
❌ 日志警告参数被忽略
WARNING ... ignored: {'enable_thinking', 'extra_body'}原因:vLLM 版本过低(< 0.6.4)
解决:
pipinstall-Uvllm vllm--version# 确认 ≥ 0.6.4❌ 思考标签仍未消失
- 确认启动命令包含
--reasoning-parser qwen3 - 用 curl 直测服务端,排除客户端问题:
curlhttp://localhost:11454/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "qwen3", "messages": [{"role": "user", "content": "Hello"}], "chat_template_kwargs": {"enable_thinking": false} }'4. 多模态支持(可选)
importorg.springframework.ai.chat.messages.UserMessage;importorg.springframework.ai.content.Media;importorg.springframework.core.io.UrlResource;Mediamedia=newMedia("image/png",newUrlResource("https://example.com/image.png"));UserMessagemsg=newUserMessage("Where is this?",List.of(media));ChatResponseresp=chatModel.call(newPrompt(msg,optionBuilder("qwen3")));5. 总结
| 环节 | 关键点 |
|---|---|
| vLLM 版本 | ≥ 0.6.4 我用的0.17.1 |
| 启动参数 | --reasoning-parser qwen3必配 |
| 客户端传参 | .extraBody({"chat_template_kwargs": {"enable_thinking": false}}) |
| 模型名称 | 与--served-model-name保持一致 |
配置完成后,Qwen3.5 将直接输出最终答案,不再包含<think>思考链路,更适合生产环境集成。
💡 提示:若需开启思考,将
enable_thinking设为true或移除该参数即可。
