Prhub

#29947 [Frontend] OpenAI Responses API supports Tool/Function calling with streaming

原始 PR 作者 chaunceyjiang 合并时间 2026-03-12 15:03 文件变更 3 提交数 12 评论 17 代码增减 +348 / -20

执行摘要

为 OpenAI Responses API 添加流式工具 / 函数调用支持。

从Issue评论中,多个用户(如loganlebanoff、Dorsivan、SaltFish11)表达了对此功能的强烈期待,表明这是提升用户体验和API完整性的重要需求。PR body中提供了测试代码示例,旨在模拟OpenAI的流式工具调用场景,确保API兼容性和功能性。

该PR值得精读,特别是_process_simple_streaming_events函数中的工具解析集成设计,展示了如何在现有流式框架中优雅地扩展新功能,同时关注测试组织和未来重构的权衡。

讨论亮点

reviewer qandrew提出了几个关键点:

  1. 建议将测试逻辑移动到tests/entrypoints/openai/responses/test_simple.py,但作者回应当前vllm serve在该文件中未启用tool-calling,同意稍后重构。
  2. 要求在测试中添加断言验证tool_call_itemresponse.completed_event.function_tool_call的匹配,作者已处理(回复'Done.')。
  3. 非阻塞意见:未来可能将逻辑移到Parser中以支持更灵活的序列(如工具调用在推理之前)。讨论以友好方式结束,无重大争议。

实现拆解

实现主要集中在三个文件:

  1. vllm/entrypoints/openai/responses/serving.py:修改_process_simple_streaming_events函数,添加tool_parser处理工具调用的流式解析,类似于已有的reasoning_parser,并新增事件类型如ResponseFunctionCallArgumentsDeltaEvent
  2. tests/v1/entrypoints/openai/serving_responses/test_function_call.py:新增两个测试函数(test_function_calling_with_streaming_expected_argumentstest_function_calling_with_streaming_types),验证流式工具调用的参数和事件类型。
  3. tests/entrypoints/openai/test_serving_responses.py:更新mock parser以支持extract_tool_calls_streaming方法,确保测试环境兼容。
文件 模块 状态 重要度
vllm/entrypoints/openai/responses/serving.py frontend/serving modified 8.0
tests/v1/entrypoints/openai/serving_responses/test_function_call.py testing modified 6.0
tests/entrypoints/openai/test_serving_responses.py testing modified 4.0

关键符号

_process_simple_streaming_events extract_tool_calls_streaming

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

评论区精华

测试文件组织 设计

qandrew 建议将测试逻辑移动到统一文件 test_simple.py,但作者回应当前配置限制(vllm serve 未启用 tool-calling),同意稍后重构。

结论:暂不移动,等待后续重构,双方达成一致。 · 已解决

测试断言添加 正确性

qandrew 建议在测试中添加断言,验证 tool_call_item 与 response.completed_event.function_tool_call 的匹配。

结论:作者已添加断言,确保测试覆盖完整性。 · 已解决

未来重构可能性 设计

qandrew 提出非阻塞意见,未来可能将逻辑移到 Parser 中以支持更灵活的序列(如工具调用在推理之前)。

结论:留待未来考虑,未在本 PR 中解决。 · pending

风险与影响

技术风险包括:新增工具解析器逻辑可能影响现有流式推理逻辑的稳定性,尤其在_process_simple_streaming_events函数中集成;新增事件类型需要确保与OpenAI API规范完全兼容,否则可能导致客户端解析错误;工具调用参数解析(如Issue评论中提到的无输入参数情况)可能引发验证错误,需进一步测试覆盖。

对用户:提供了流式工具调用功能,增强了OpenAI Responses API的实用性和兼容性,支持更自然的交互场景。对系统:扩展了前端服务层,增加了代码复杂度,但通过新增测试用例进行了验证。对团队:需要维护新增的逻辑和事件处理,但设计上复用了现有parser架构,有利于代码一致性。

新功能集成 API 兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论