执行摘要
本PR修复了Qwen25模型在流式多工具调用解析中的失败问题,通过修改解析器添加回退机制,确保所有工具调用能正确解析,提升了功能一致性和用户体验。
功能与动机
该PR旨在解决issue 18102中报告的问题:在使用Qwen3-Next-80B-A3B-Thinking模型进行speculative decoding时,流式多工具调用解析失败,仅返回第一个工具调用。PR body明确指出修复目标为块状格式(如Qwen25)的流式多工具调用解析,避免因非JSON标记导致的解析错误。
实现拆解
主要改动集中在两个文件:
- python/sglang/srt/function_call/base_format_detector.py:修改了
parse_streaming_increment方法。
- 添加used_separator_branch标志以跟踪解析分支。
- 当JSON解析失败时,回退到搜索bot_token跳过非JSON标记(例如Qwen25的</tool_call>\n<tool_call>\n)。
- 扩展异常处理从仅捕获MalformedJSON到捕获MalformedJSON和json.JSONDecodeError。
if used_separator_branch and self.bot_token in current_text:
start_idx = current_text.find(self.bot_token) + len(self.bot_token)
obj, end_idx = _partial_json_loads(current_text[start_idx:], flags)
- test/registered/unit/function_call/test_function_call_parser.py:新增
TestQwen25Detector类,包含7个测试用例,覆盖单工具调用、多工具调用的流式和非流式场景,确保修复有效性。
评论区精华
Review讨论较少,两位reviewer(JustinTong0323和hnyls2002)均快速批准了PR,没有深入讨论或争议。这表明变更被认为直接、必要且风险较低。
风险与影响
- 风险:修改了解析核心路径,可能影响其他格式模型的解析行为,引入回归;异常处理逻辑变化可能掩盖潜在错误。但新增测试覆盖降低了这些风险。
- 影响:主要影响使用Qwen25模型的用户,修复后流式多工具调用解析将正确工作,提升功能一致性;对系统其他部分无直接影响,但增强了解析模块的健壮性。
关联脉络
从历史PR看,PR 21225涉及speculative decoding和解析改进,与本PR的issue场景相关(issue 18102提到speculative decoding)。这表明项目在持续优化解析和推测解码功能,本PR是这一演进方向中的一环,专注于工具调用解析的细节修复。
参与讨论