Prhub

#42292 [Bugifx] [Qwen3CoderTool] Restore supports_required_and_named for required tool_choice

原始 PR 作者 chaunceyjiang 合并时间 2026-05-12 10:09 文件变更 1 提交数 4 评论 2 代码增减 +2 / -1

执行摘要

恢复 Qwen3Coder 的 required tool_choice 支持

PR #40894 将 Qwen3CoderToolParser 的 supports_required_and_named 设为 False,导致用户在未启用严格工具调用(如 Xgrammar)时,tool_choice="required" 功能失效。作者认为,在结构化标签(structural_tag)默认启用之前,应继续支持 required tool_choice。

该 PR 是快速修复回归的最佳实践,推荐合并。建议后续添加测试覆盖 VLLM_ENFORCE_STRICT_TOOL_CALLING 环境的 behavior。

讨论亮点

Review 中,gemini-code-assist[bot] 指出,移除 supports_required_and_named = False 会与 structural_tag 实现冲突:当启用严格工具调用时,解析器输出 XML 格式,但 required tool_choice 会使用标准 JSON 提取器,导致解析失败。然而,审核者 bbrowning 赞同 PR,认为在不使用 Xgrammar 严格工具调用的用户不应遭受回归。最终,PR 被合并。

实现拆解

  1. 引入环境变量:在 vllm/tool_parsers/qwen3coder_tool_parser.py 中导入 VLLM_ENFORCE_STRICT_TOOL_CALLING
  2. 动态设置类属性:将类变量 supports_required_and_named 从静态的 False 改为 not VLLM_ENFORCE_STRICT_TOOL_CALLING,即默认启用 required 和 named tool 选择,仅在强制严格工具调用时禁用。
  3. 无其他改动:仅修改了一行代码,未涉及测试或配置更改。
文件 模块 状态 重要度
vllm/tool_parsers/qwen3coder_tool_parser.py 工具解析器 modified 5.16

关键源码片段

vllm/tool_parsers/qwen3coder_tool_parser.py dependency-wiring

核心修复文件,修改类属性 supports_required_and_named 的动态赋值逻辑。

# vllm/tool_parsers/qwen3coder_tool_parser.py ( 关键变更行 )
from vllm.envs import VLLM_ENFORCE_STRICT_TOOL_CALLING # 新增导入class Qwen3CoderToolParser(ToolParser):
    # 将硬编码的 False 改为依赖环境变量:
    # 当 VLLM_ENFORCE_STRICT_TOOL_CALLING 为 True 时禁用 required/named tool_choice,
    # 否则保持兼容性(不破坏用户现有行为)。
    supports_required_and_named: bool = not VLLM_ENFORCE_STRICT_TOOL_CALLING

评论区精华

移除 supports_required_and_named 与 structural_tag 的兼容性 设计

gemini-code-assist[bot] 指出,将 supports_required_and_named 恢复为 True 会导致启用 VLLM_ENFORCE_STRICT_TOOL_CALLING 时,JSON 提取器无法解析 XML 输出格式。

结论:审核者 bbrowning 认为在用户未启用严格工具调用时不应回归,因此同意合并。 · 已解决

风险与影响

低风险。变更仅为一处环境变量条件赋值,且通过环境变量 VLLM_ENFORCE_STRICT_TOOL_CALLING 保护,不会影响已启用严格工具调用的用户。主要风险是当用户启用该环境变量时,supports_required_and_named 可能返回 True,导致与 XML 格式不兼容,但这已在 PR #40894 中处理。

  • 对用户:恢复 tool_choice="required" 功能,对未启用严格工具调用的是积极改进。
  • 对系统:无性能或稳定性能影响。
  • 对团队:小范围修复,无其他依赖。
无直接风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论