[Bug]: tool_choice=”required” not enforced with Qwen3.8-Flash-Next when enable_thinking=false (streaming); xgrammar “Failed to advance FSM”

这个报错通常出现在用 vLLM 部署 Qwen3.8-Flash-Next 并开启 tool calling / 结构化输出(xgrammar)时,尤其是流式输出配合 tool_choice="required" 、 enable_thinking=false ,或开启 thinking 且使用 M

快速结论:这个报错通常出现在用 vLLM 部署 Qwen3.8-Flash-Next 并开启 tool calling / 结构化输出(xgrammar)时,尤其是流式输出配合 tool_choice="required"、enable_thinking=false,或开启 thinking 且使用 MTP 的场景。优先排查 vLLM 镜像是否包含 #54089 修复,再复现请求的流式/thinking 组合。

适用环境:Issue 确认环境为 Ubuntu 24.04.3 LTS、Python 3.12.3、PyTorch 2.13.0+cu130、CUDA 13.0、NVIDIA RTX PRO 6000 Blackwell Workstation Edition、NVIDIA 驱动 595.84;使用社区 NVFP4/FP8 检查点(primitive-ai)及其 PLE-quant overlay,镜像为 vllm/vllm-openai:qwen38-flash-next(push 于 26/08/2026,sha 8e685d198)。

最快修复方案:暂无确认的一步修复方案。Issue 维护者判断该问题可能已由 #54089 修复,可优先尝试升级到包含该 PR 的 vLLM 镜像/构建后再复测。

注意事项:报告者测试的镜像 sha 8e685d198 早于 #54089 合并,因此该构建里没有此修复;同时报告者指出其失败请求是单轮、无历史,理论上不触发 #54089 所述的 stale-</think> 机制,所以“升级即可解决”尚未在原始环境验证。报告者环境已拆除,无法按请求复跑,仅在 post-merge 构建上仍失败时才建议重新打开该 Issue。

问题场景

在 vLLM 中部署 Qwen3.8-Flash-Next,通过 OpenAI 兼容接口做 tool calling。典型触发组合为:tool_choice="required"、enable_thinking=false、流式(streaming)、parallel_tool_calls=true,请求携带较大的工具集(报告中使用 tool-eval-bench 的 UNIVERSAL_TOOLS,12 个工具,temperature 0.6,max_tokens 800)。此时模型没有返回工具调用,而是返回纯文本答案,finish_reason 为 stop。相同请求体在非流式,或开启 enable_thinking=true 时,每次都能返回工具调用;使用 2 个工具的控制组也始终正常。另一类失败出现在开启 thinking 且使用 MTP 时,xgrammar 报 FSM 相关错误。

报错原文

[Bug]: tool_choice="required" not enforced with Qwen3.8-Flash-Next when enable_thinking=false (streaming); xgrammar "Failed to advance FSM" / "matcher has terminated" with thinking on + MTP

Failed to advance FSM
matcher has terminated

原因分析

Issue 中并未确认根因,报告者明确表示“we never established a root cause”,只归纳出可复现的模式:失败只出现在 12 工具 + 流式 + enable_thinking=false 的组合下,非流式或开启 thinking 均正常。可能原因包括:xgrammar 在流式解码下与 tool_choice 约束的交互问题、大工具集导致的语法/FSM 状态推进异常,或该社区量化镜像中的特定批处理/采样路径问题。维护者提到 #54089 可能已修复该问题,但报告者指出其请求为单轮无历史,与 #54089 针对的 stale-</think> 场景不完全吻合,因此该修复是否覆盖此问题仍待验证。

环境排查

  • 确认 vLLM 镜像/构建是否包含 #54089 修复,记录镜像 tag 与 sha(报告者使用的 sha 为 8e685d198)。
  • 确认 Python 版本(报告为 3.12.3)、PyTorch 版本(报告为 2.13.0+cu130)、CUDA runtime(报告为 13.0.88)与 GPU 型号(RTX PRO 6000 Blackwell)。
  • 确认模型检查点来源与量化方式:社区 NVFP4/FP8 检查点(primitive-ai)加 PLE-quant overlay。
  • 确认请求参数:是否流式、enable_thinking 取值、tool_choice、parallel_tool_calls、工具数量、temperature、max_tokens。
  • 确认是否使用 MTP,因为 thinking 开启 + MTP 时出现 xgrammar 失败。
  • 确认 vLLM 启动参数与服务端配置,与 Issue 正文中的 launch flags 对照。

解决步骤

  1. 先固定复现请求:使用报告者公开的失败请求体(12 工具)与控制组请求体(2 工具),见 MarcoPizeta/flash-next-rtxpro6000-bench commit a2813de:eval/required-request-12tools-failing.json 与 eval/required-request-2tools-control.json。
  2. 确认当前构建是否包含 #54089;若镜像 sha 早于该 PR 合并(如报告者的 8e685d198),升级到包含该 PR 的构建。
  3. 在升级后的构建上重跑失败请求体,保持流式、enable_thinking=false、12 工具等原始条件不变。
  4. 若仍失败,再分别做变量隔离:切换为非流式、切换 enable_thinking=true、减少工具集到 2 个,确认是否仍能复现原失败模式。
  5. 若在 post-merge 构建上仍然复现,按维护者建议重新打开 #55552,并附上升级后的镜像 sha、请求体与完整报错日志。

验证方法

在相同请求体与参数下,连续多次运行,观察是否每次都返回工具调用且 finish_reason 为工具调用对应的取值,而不是纯文本加 stop。同时确认日志中不再出现 Failed to advance FSM 或 matcher has terminated。报告者的原始失败率为 12 工具流式 3 次中 2 次失败,因此建议多次重复以排除偶发。

参考来源

vllm-project/vllm #55552

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28958

发表回复

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