[Bug]: GLM-5 tool calls in stream mode get error tool name

用户在使用 vLLM 部署 GLM-5 或 GLM-5.1 模型(如 zai-org/GLM-5.1-FP8 ),开启 stream=True 进行工具调用(tool call)时,流式返回的 tool_calls[].function.name 出现错误或截断,导致下游工具调用逻辑失败。该问题在代

[Bug]: GLM-5 tool calls in stream mode get error tool name

[Bug]: GLM-5 tool calls in stream mode get error tool name

快速结论:该报错发生在 vLLM 流式(stream mode)调用 GLM-5 或 GLM-5.1 模型进行工具调用时,stream 返回的 tool name 可能不正确或被截断(例如完整名 run_in_terminal 被截断为 run_in)。优先排查是否已合并或应用 PR #39899 及相关 GLM-5.1 解析器补丁,并确保 --chat-template-content-format string 已启用。

问题场景

用户在使用 vLLM 部署 GLM-5 或 GLM-5.1 模型(如 zai-org/GLM-5.1-FP8),开启 stream=True 进行工具调用(tool call)时,流式返回的 tool_calls[].function.name 出现错误或截断,导致下游工具调用逻辑失败。该问题在代码助手(code agent)场景以及重复多次调用脚本中均可复现。

报错原文

tool calls still fail intermittently because the streamed tool name is sometimes incorrect or truncated.
For example, my tool name is run_in_terminal, but the model may output run_in instead.

此外,用户还报告了参数(params)同样可能被破坏,导致 JSON 解析失败或参数校验不通过。

原因分析

根本原因尚未由官方最终确定,但根据社区讨论线索,可能原因包括:

  • 流式 tool name 拼接/截断 Bug:vLLM 在流式输出时,当模型生成多个 token 组成完整 tool name 时,底层解析器在某些分片或边界条件下未正确拼接,导致 name 被截断。
  • GLM-5.1 工具解析器不完善:GLM 系列模型使用自定义的 --tool-call-parser glm47--reasoning-parser glm45,相关解析器在流式场景下可能存在未处理的分片逻辑。
  • 可能受 --speculative-config 影响:启用推测解码(MTP spec decode)可能改变了 token 生成顺序,间接触发了解析器对名字切分异常。

目前已有社区成员在尝试实现修复,并有一个关联 PR(#39899)被提出,但尚未确认合并后是否能完全解决。

环境排查

  • vLLM 版本:用户测试过 nightly 版本,问题依然存在。
  • Python 版本:3.12.13
  • PyTorch 版本:2.10.0+cu129
  • CUDA 版本:12.9(driver 570.172.08)
  • GPU:NVIDIA H200 × 8
  • 系统:Ubuntu 22.04.5 LTS
  • vLLM 启动参数中涉及的重要配置:--tool-call-parser glm47--reasoning-parser glm45--enable-auto-tool-choice--chat-template-content-format string--speculative-config.method mtp--speculative-config.num_speculative_tokens 3

解决步骤

  1. 确认基础补丁:如果使用 GLM-5.1 模型,请先确认已合并或手动应用了 GLM-5.1 相关的工具调用修复 patch(参考官方相关 PR 对 tool parser 的改动)。
  2. 尝试合并 PR #39899:社区讨论中提到 PR #39899 可能与此问题相关。可优先尝试将该 PR 的改动合并到本地 vLLM 代码中,重新编译测试。
  3. 检查启动参数
    • 确保已添加 --chat-template-content-format string(用户测试发现该参数不能完全解决,但仍是必要前提)。
    • 尝试临时关闭推测解码:移除 --speculative-config.method mtp 及相关 speculative 参数,观察 tool name 截断是否复现。
  4. 降级或使用官方基线镜像:如果本地 patch 过多,建议从官方未修改的基线开始逐步恢复,排除 patch 冲突。
  5. 简化测试脚本:参考评论中提供的测试脚本(循环调用流式完成,并校验每个返回的 tool name 是否在预期集合中),用该脚本持续复测以判断修复是否有效。

验证方法

运行一个循环测试脚本,每次调用 client.chat.completions.create(model=..., messages=..., tools=..., stream=True),在流式 chunk 处理结束后检查所有 tool_calls[index].function.name 是否与预先注册的工具名称完全一致(区分大小写)。如果在连续多次调用中不再出现 name 截断或错误,且 JSON 参数解析无失败,即可认为问题已解决。

参考来源

vllm-project/vllm #39757

vllm-project/vllm PR #39899

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 8930

发表回复

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