快速结论:该报错通常发生在同时开启 MTP 投机解码(speculative decoding)与工具调用结构化标签(structural tag)时,语法匹配器在终止后仍被推进。优先排查 VLLM_ENFORCE_STRICT_TOOL_CALLING 环境变量是否在服务进程启动前设置,或临时关闭 --speculative-config 验证。
适用环境:vLLM v0.27.1,Qwen3.6-27B-FP8,TP=2(2× RTX 3090),--tool-call-parser qwen3_coder,启用 --speculative-config {"method":"mtp","num_speculative_tokens":3}。
最快修复方案:暂无确认的一步修复方案。Issue 中已验证的缓解措施是:在服务进程启动前设置 VLLM_ENFORCE_STRICT_TOOL_CALLING=0(可减少约 90% 警告),或直接移除 --speculative-config 以完全消除警告(代价是失去 MTP 加速)。
注意事项:上述方案均为部分缓解,无法完全消除警告。VLLM_ENFORCE_STRICT_TOOL_CALLING=0 仅在服务进程启动前设置才生效,且无法处理已合并但未发布的 #52805 修复;该修复需等待下一个 vLLM 版本才能包含。
问题场景
用户在使用 vLLM v0.27.1 部署 Qwen3.6-27B-FP8 模型,通过 /v1/chat/completions 接口提供工具调用服务。当同时满足以下两个条件时触发问题:(1)工具调用请求实际构建了结构化标签(即 tool_choice 非 auto/none 或某个工具设置了 strict: true);(2)启用了 MTP 投机解码。单独触发任一条件均不会产生警告,只有两者同时成立才会在服务端日志中反复出现该报错。
报错原文
/project/cpp/grammar_matcher.cc:612: Warning: The matcher has terminated after
accepting the stop token, but is trying to accept new token with id 198.
原因分析
可能原因:这是 #44006 / #44297 修复后的残留问题。原修复(合并于 2026-07-04)已阻止了致命错误(如 Failed to advance FSM、请求终止或 500 错误),但并未覆盖所有语法推进路径。在批处理投机接受过程中,当语法匹配器已接受终止 token 后,某些路径仍会继续向其传递 token id 198。根本缺陷位于 batched speculative acceptance 逻辑中,它会在终止 token 之后继续推进,而当前的“推理边界修剪”逻辑未覆盖这条路径。
环境排查
- 确认 vLLM 版本是否为 v0.27.1(或更早版本);#52805 的修复已合并但尚未包含在任何发布版本中。
- 检查
--speculative-config参数是否包含"method":"mtp","num_speculative_tokens":3。 - 确认工具调用配置:
tool_choice是否为required或指定函数名;某个工具是否设置了"strict": true。 - 验证
VLLM_ENFORCE_STRICT_TOOL_CALLING环境变量是否在 vLLM 启动前已设置(需在服务进程环境中设置,而非 shell 后设或客户端设置)。 - 如使用容器,检查日志来源是否为
grammar_matcher相关的真实警告行。
解决步骤
- 临时验证:移除
--speculative-config参数,保持其他配置不变,重启服务后观察警告是否消失。若消失,可确认问题与 MTP 投机解码相关。 - 部分缓解:在启动 vLLM 服务进程前,于同一环境中设置
VLLM_ENFORCE_STRICT_TOOL_CALLING=0,然后重启服务。注意这会降低严格工具调用的强制执行,且最多只能减少约 90% 的警告,无法完全消除。 - 等待修复:关注 vLLM 发布版本,下一版本将包含 #52805 的修复(batched speculative acceptance 终止后继续推进的缺陷)。在修复发布前,上述方案只能作为过渡措施。
- 权衡取舍:如果警告影响排查其他日志,且能接受 MTP 加速损失,可保持移除
--speculative-config的方案;如果必须保留 MTP,则接受警告存在,并确认工具调用输出正确性(Issue 中验证 36 次请求中工具调用均正确)。
验证方法
重启服务后,连续发送构建结构化标签的工具调用请求(例如一个工具设置 strict: true 且 tool_choice: auto),检查服务端日志中是否仍出现 grammar_matcher.cc:612 警告。若设置 VLLM_ENFORCE_STRICT_TOOL_CALLING=0,可对比同一批请求下警告数量是否从 20/30 降至约 2/30;若移除 --speculative-config,警告应完全消失。同时确认工具调用结果仍正确返回,且模型性能(如生成速度)在可接受范围内。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: Native MTP speculative decoding degenerates into garbage token loops on deep agentic conversations (Qwen3-MoE)](https://www.chat-gpts.plus/wp-content/uploads/2026/08/47087-d5d5041b-768x403.jpg)

