Prhub

#39626 Fix Responses API streaming for multiple auto tool calls

原始 PR 作者 noobHappylife 合并时间 2026-04-14 13:28 文件变更 3 提交数 19 评论 24 代码增减 +329 / -21

执行摘要

修复 Responses API 流式处理中多自动工具调用参数错误合并的问题。

根据PR body描述,当前Responses API在tool_oice='auto'下处理多个工具调用时,function_call事件会将多个工具调用的参数合并为一个function_call_arguments,导致数据错误。修复后,确保每个工具调用的参数独立,提升API正确性。

建议工程师精读此PR,关注流式事件处理中的状态管理和错误处理设计,特别是_process_simple_streaming_events函数的变更。对于技术管理者,可作为bugfix的范例,展示如何在重构背景下简化变更和测试驱动修复。

讨论亮点

review中,gemini-code-assist[bot]指出潜在内容丢失风险:当单个delta同时包含文本和工具调用时,内容可能被忽略;并建议替换assert语句以避免服务器崩溃。sfeng33建议将PR限制为bugfix,避免扩展parse_delta以简化重构,最终PR聚焦于auto工具选择修复。chaunceyjiang要求扩展测试,添加了多工具调用测试用例。

实现拆解

修改主要涉及三个文件:

1) 在tests/entrypoints/openai/responses/test_function_call.py中扩展测试,添加第二个工具get_time并验证多个工具调用的独立参数处理;
2) 在tests/entrypoints/openai/responses/test_serving_responses.py中新增TestAutoToolStreaming类,模拟多工具调用流式事件场景;
3) 在vllm/entrypoints/openai/responses/serving.py的_process_simple_streaming_events函数中添加逻辑跟踪current_tool_call_index,当检测到新工具调用时正确关闭前一个并开始新的,避免参数合并。

文件 模块 状态 重要度
tests/entrypoints/openai/responses/test_function_call.py frontend modified 4.0
tests/entrypoints/openai/responses/test_serving_responses.py frontend modified 4.0
vllm/entrypoints/openai/responses/serving.py frontend modified 7.0

关键符号

_process_simple_streaming_events

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

内容丢失风险 正确性

gemini-code-assist[bot] 指出当单个 delta 同时包含文本和工具调用时,内容可能被忽略,因为逻辑在工具调用分支中忽略了文本内容

结论:风险被识别,但未在 PR 中解决,建议后续优化 · 已识别但未解决

assert 语句使用风险 设计

gemini-code-assist[bot] 建议替换 assert 语句以避免模型输出异常时导致服务器崩溃

结论:未在 PR 中修改,风险仍存在 · 未解决

重构和简化建议 设计

sfeng33 建议将 PR 限制为 bugfix,避免扩展 parse_delta,以配合正在进行的重构工作

结论:PR 被简化为只修复 auto 工具选择,采纳了建议 · 已采纳

风险与影响

风险包括:

1) 内容丢失风险:在serving.py中,如果delta包含文本和工具调用,逻辑可能忽略文本内容,导致数据缺失;
2) 使用assert语句:在解析器输出验证中,assert可能导致未处理异常和服务器崩溃,应替换为错误处理。风险点具体在serving.py的_process_simple_streaming_events函数相关分支。

影响Responses API的用户使用tool_choice='auto'进行流式处理时多工具调用的正确性,修复后工具调用参数将独立处理,提升API可靠性和用户体验。影响范围有限,不涉及Harmony路径,对系统性能无明显影响,但提高了测试覆盖。

潜在内容丢失 assert 使用风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论