Error trying to handle streaming tool call

vllm启动Qwen2.5-72B模型服务,能指定 --tool-call-parser hermes 参数配置吗?

我的启动命令如下:

export VLLM_ATTENTION_BACKEND=FLASHINFER

python3 -m vllm.entrypoints.openai.api_server --host 0.0.0.0 \
        --port 8000 \
        --model /models/Qwen2.5-72B \
        --served-model-name Qwen2.5-72B --trust-remote-code \
        --gpu-memory-utilization 0.85 \
        -tp 4 \
        --rope-scaling '{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}' \
        --max-model-len 60000 \
        --tool-call-parser hermes --enable-auto-tool-choice

服务日志有如下报错:

ERROR 07-15 02:17:44 [hermes_tool_parser.py:370] Error trying to handle streaming tool call.
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370] Traceback (most recent call last):
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]   File "/usr/local/lib/python3.12/dist-packages/vllm/entrypoints/openai/tool_parsers/hermes_tool_parser.py", line 241, in extract_tool_calls_streaming
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]     current_tool_call = partial_json_parser.loads(
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]                         ^^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]   File "/usr/local/lib/python3.12/dist-packages/partial_json_parser/core/api.py", line 15, in parse_json
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]     return parser(ensure_json(json_string, allow_partial, use_fast_fix))
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]   File "/usr/local/lib/python3.12/dist-packages/partial_json_parser/core/api.py", line 22, in ensure_json
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]     head, tail = fix_fast(json_string, allow_partial)
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]   File "/usr/local/lib/python3.12/dist-packages/partial_json_parser/core/myelin.py", line 50, in fix_fast
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]     _i, _char = stack.pop()
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370]                 ^^^^^^^^^^^
ERROR 07-15 02:17:44 [hermes_tool_parser.py:370] IndexError: pop from empty list

...

ERROR 07-15 05:01:51 [hermes_tool_parser.py:370] Error trying to handle streaming tool call.
ERROR 07-15 05:01:51 [hermes_tool_parser.py:370] Traceback (most recent call last):
ERROR 07-15 05:01:51 [hermes_tool_parser.py:370]   File "/usr/local/lib/python3.12/dist-packages/vllm/entrypoints/openai/tool_parsers/hermes_tool_parser.py", line 294, in extract_tool_calls_streaming
ERROR 07-15 05:01:51 [hermes_tool_parser.py:370]     self.prev_tool_call_arr[self.current_tool_id].get("arguments"))
ERROR 07-15 05:01:51 [hermes_tool_parser.py:370]     ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
ERROR 07-15 05:01:51 [hermes_tool_parser.py:370] IndexError: list index out of range

可以,Qwen2.5-72B模型支持通过 --tool-call-parser hermes 参数启用 Hermes 工具调用解析器,官方文档明确说明 Qwen2.5 系列已内置 Hermes 风格工具调用模板,推荐用 hermes 解析器进行自动工具调用配置(即 --enable-auto-tool-choice --tool-call-parser hermes)详见官方文档

但你遇到的 IndexError: pop from empty list 和 list index out of range 是 Hermes 工具解析器的已知bug,尤其在 Qwen3 或 Qwen2.5 大模型上高频出现,根源在于 partial_json_parser 处理流式输出时的异常,官方 issue 已有多例反馈见此。目前官方尚未彻底修复,建议关注后续 vLLM 版本更新或尝试切换 parser 或模型规避。

需要详细分析报错原因和可能的临时解决办法吗?

Sources:

对于 Qwen2.5-72B 模型,是否也支持 --tool-call-parser openai ? 如果支持,是否会有类似上述Error trying to handle streaming tool call 报错 或 其它报错

Qwen2.5-72B 官方推荐使用 --tool-call-parser hermes,不建议用 --tool-call-parser openai。openai 解析器主要用于 OpenAI 官方模型或严格遵循 OpenAI function calling 格式的模型,Qwen2.5-72B 的工具调用格式与 OpenAI 标准有差异,直接用 openai 解析器可能导致无法正确解析工具调用,甚至出现 streaming tool call 相关报错或其它解析异常详见官方文档

如需稳定工具调用体验,建议坚持使用 hermes 解析器。如果强行用 openai 解析器,遇到解析失败、字段缺失或报错是大概率事件,且官方未提供兼容性保障。

需要进一步了解两者差异或具体报错示例吗?

Sources: