[Bug]: Qwen3 thinking switch sends enable_thinking outside chat_template_kwargs for vLLM

该报错发生在 RAGFlow v0.26.4 通过 OpenAI 兼容接口对接本地 vLLM 部署 Qwen3 系列模型时,由于 enable_thinking 参数被错误地放在请求体顶层而非 chat_template_kwargs 中,导致 vLLM 静默忽略该参数,Qwen3 模型始终以思考模

快速结论:该报错发生在 RAGFlow v0.26.4 通过 OpenAI 兼容接口对接本地 vLLM 部署 Qwen3 系列模型时,由于 enable_thinking 参数被错误地放在请求体顶层而非 chat_template_kwargs 中,导致 vLLM 静默忽略该参数,Qwen3 模型始终以思考模式运行。优先排查 RAGFlow 版本是否已包含修复补丁(PR #17592),或手动应用本地补丁。

适用环境:RAGFlow v0.26.4(Docker Compose 部署,CPU 镜像)、Ubuntu 26.04 LTS、本地 vLLM(OpenAI 兼容 API)、Qwen3 系列模型(如 Qwen3.8-27B-8fp)。

最快修复方案:暂无确认的一步修复方案。Issue 中已验证的修复方案是等待 PR #17592 合并,或手动修改 rag/llm/chat_model.py 中的 _apply_model_family_policies() 函数,将对非 DashScope 提供商的 enable_thinking 参数改为通过 chat_template_kwargs 传递。

注意事项:手动补丁需要修改容器内代码文件且重启服务,升级 RAGFlow 版本时补丁可能被覆盖;PR #17592 在 Issue 关闭时仍处于待合并状态,尚未进入正式发布版本。

问题场景

用户在使用 RAGFlow v0.26.4(Docker Compose 部署)通过 OpenAI 兼容接口对接本地 vLLM 部署的 Qwen3 系列模型时,发现模型始终以思考模式(thinking mode)运行,每次回复都包含 reasoning 内容,导致延迟和 token 成本增加,且无法从 RAGFlow 关闭思考模式。

报错原文

[Bug]: Qwen3 thinking switch sends enable_thinking outside chat_template_kwargs for vLLM

if "qwen3" in model_name_lower:
    _pop_thinking_controls()
    enable_thinking = thinking_type == "enabled" if thinking_type else False
    if backend == "litellm" and provider in {
        SupportedLiteLLMProvider.Tongyi_Qianwen,
        SupportedLiteLLMProvider.Dashscope,
    }:
        sanitized_gen_conf["enable_thinking"] = enable_thinking
    else:
        _merge_extra_body(sanitized_kwargs, {"enable_thinking": enable_thinking})

原因分析

可能原因:RAGFlow v0.26.4 中 _apply_model_family_policies() 函数在识别到模型名包含 qwen3 时,会将 enable_thinking 参数注入请求体。但对于非 Dashscope 的 OpenAI 兼容提供商(包括 vLLM),该参数被放置在请求体顶层,而 vLLM 的 OpenAI 兼容 API 并不识别这个顶层字段(它不在请求 schema 中),因此静默忽略。Qwen3 的 chat template 默认 enable_thinking=true,导致模型始终开启思考模式。vLLM 支持的传递方式是通过 chat_template_kwargs 传递该变量。

环境排查

  • 确认 RAGFlow 版本是否为 v0.26.4(可通过 docker ps 查看容器版本)
  • 确认 vLLM 版本(Issue 中验证环境为 vLLM v0.22.0)
  • 确认 Qwen3 模型是否正确部署在 vLLM 中,且通过 OpenAI 兼容接口可正常调用
  • 检查 rag/llm/chat_model.py_apply_model_family_policies() 函数当前代码逻辑
  • 确认 RAGFlow 后端推理配置中是否使用 OpenAI 兼容接口指向本地 vLLM

解决步骤

  1. 确认问题复现:在 RAGFlow 中调用 Qwen3 模型,观察返回结果是否包含 reasoning 字段,且无法通过界面关闭思考模式。
  2. 检查 PR 状态:访问 PR #17592 查看是否已合并到主分支。如果已合并,升级 RAGFlow 到包含该修复的版本。
  3. 手动补丁(可优先尝试):如果 PR 尚未合并,修改容器内 rag/llm/chat_model.py 中的 _apply_model_family_policies() 函数,将 _merge_extra_body(sanitized_kwargs, {"enable_thinking": enable_thinking}) 改为 _merge_extra_body(sanitized_kwargs, {"chat_template_kwargs": {"enable_thinking": enable_thinking}})
  4. 增强 deep-merge(可选):PR #17592 还增强了 _merge_extra_body 函数,使其能深合并嵌套字典,保留已有的 chat_template_kwargs 键。如果手动补丁,建议同步修改该函数以避免覆盖问题。
  5. 重启服务:修改完成后重启 RAGFlow 容器,使改动生效。

验证方法

在 RAGFlow 中发起一次 Qwen3 模型调用,检查返回结果中 reasoning(或 thinking 相关的)字段是否为 null。PR #17592 的验证结果显示,关闭思考模式后返回 reasoning: null,且 DashScope 路径无回归。同时确认请求延迟和 token 消耗下降,回复不再包含推理内容。

参考来源

infiniflow/ragflow #18595

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19629

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注