![[Bug]: Gemma4 Tool Parser: Intermittently Missing `function.name` in Streaming Mode](https://www.chat-gpts.plus/wp-content/uploads/2026/06/45449-acacc055.jpg)
[Bug]: Gemma4 Tool Parser: Intermittently Missing `function.name` in Streaming Mode
快速结论:此报错在使用 vLLM 部署 Gemma4 模型并启用流式输出(stream=True)且 tool_choice=”auto” 时触发,表现为 SSE 响应中部分 tool call chunk 缺少 function.name 字段。优先检查 vLLM 版本是否为 v0.21.0,并升级至最新 nightly 镜像或包含 PR #45588 修复的版本。
问题场景
在 vLLM 服务中部署 google/gemma-4-31B-it 模型,使用 gemma4 工具解析器(tool parser),通过 OpenAI 兼容 API 发送流式聊天补全请求(stream=True),设置 tool_choice="auto" 和 chat_template_kwargs 中 enable_thinking=False 时触发。非流式模式(stream=False)下正常。
报错原文
# 流式响应中,部分 tool call chunk 的 function 对象结构不完整
# 正常 chunk 应包含 name、arguments、type
# 异常 chunk 仅包含 arguments 和 type,缺少 name
{
"function": {
"arguments": "{}",
"type": "function"
}
# missing "name": "sample__get_user_profile"
}
原因分析
根据 Issue 讨论和修复 PR #45588,问题出在 gemma4_tool_parser.py 中的解析逻辑。在流式模式下,某些 token 化模式会导致 function.name 字段在解析过程中被遗漏,而 LLM 本身能够正确选择工具。这是 gemma4 工具解析器的一个 bug,在非流式模式下不受影响。
环境排查
- 确认 vLLM 版本(用户报告 v0.21.0 时出现 bug)
- 确认使用的 Docker 镜像是否为
vllm/vllm-openai:v0.21.0 - 确认模型为
google/gemma-4-31B-it - 确认 Python 版本(用户使用 3.13.0)
- 确认是否启用了流式模式(stream=True)和 tool_choice=”auto”
解决步骤
- 升级 vLLM 版本:将镜像升级至
vllm/vllm-openai:nightly(至少包含 commit ae1c066f36f7)或等待下一个正式发布版本,该修复已通过 PR #45588 合并。 - 验证修复后版本:使用升级后的镜像重新运行复现脚本,确认流式响应中所有 tool call chunk 都包含完整的
function.name字段。 - 临时降级方案(可优先尝试):如果无法立即升级,可以暂时使用
stream=False作为临时绕过方案,非流式模式不受此 bug 影响。 - 备用排查:检查
chat_template_kwargs中enable_thinking是否设置为False——用户报告关闭 thinking 时问题可复现,但官方修复未要求更改此设置。
验证方法
运行 Issue 中提供的复现脚本,向带 tool_choice="auto" 的流式请求发送三个不同用户问题(例如 "Get my profile"、"List my devices" 等),检查 SSE 响应中每个 tool call chunk 的 function 对象是否都包含 name 字段。如果所有 chunk 均包含完整字段且无缺失,则问题已解决。



