Prhub

#37727 [Bugfix] Fix Responses API instructions leaking through previous_response_id

vllm-project/vllm · 作者 he-yufeng · 合并时间 2026-04-13 16:46

分析状态 已生成
文件变更 2提交数 2 · 评论 4
代码增减 +73 / -2
frontend bugfix v1 responses-api

执行摘要

修复 Responses API 中 previous_response_id 导致 instructions 泄漏的问题

修复issue #37697中报告的bug:当使用/v1/responses端点并指定previous_response_id时,前一个响应的instructions会泄漏到新响应中,即使新请求提供了不同的instructions。根据OpenAI Responses API规范明确说明:"When using along with previous_response_id, the instructions from a previous response will not be carried over to the next response."

该PR值得精读,特别是对于处理OpenAI兼容API的开发者。关注点:

  1. 理解OpenAI Responses API中instructions参数的设计意图
  2. 学习如何正确处理跨请求的消息历史管理
  3. 参考新增的测试用例,了解如何全面测试此类边界条件
讨论亮点

主要讨论围绕OpenAI规范的确认:

  • chaunceyjiang询问是否有相关OpenAI规范文档链接
  • he-yufeng提供了OpenAI API Reference中关于instructions参数的明确说明,以及Text Generation指南中的相关描述,确认了规范要求instructions不应跨响应传递
  • 讨论确认了修复方案符合规范要求

实现拆解

主要修改集中在两个文件:

  1. vllm/entrypoints/openai/responses/utils.py中的construct_input_messages函数:将messages.extend(prev_msg)改为messages.extend(m for m in prev_msg if m.get("role") != "system"),过滤掉历史消息中的系统消息。
  2. tests/entrypoints/openai/responses/test_responses_utils.py:新增4个单元测试,覆盖旧系统消息被剥离、新请求无instructions、非系统消息保留、无历史消息等场景。
文件 模块 状态 重要度
vllm/entrypoints/openai/responses/utils.py frontend/responses-api modified 8.0
tests/entrypoints/openai/responses/test_responses_utils.py tests/responses-api modified 7.0

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

关键符号

construct_input_messages

评论区精华

OpenAI 规范确认 正确性

chaunceyjiang 询问是否有相关 OpenAI 规范文档,he-yufeng 提供了 OpenAI API Reference 中关于 instructions 参数的明确说明

结论:确认了规范要求 instructions 不应跨响应传递,修复方案符合规范 · 已解决

风险与影响

风险较低:

  1. 回归风险:过滤系统消息可能影响依赖历史系统消息的其他功能,但根据OpenAI规范这是正确的行为
  2. 兼容性风险:修复后行为与OpenAI规范对齐,但可能影响之前依赖泄漏行为的客户端
  3. 测试覆盖:新增4个单元测试充分覆盖了各种场景,降低了回归风险
  4. 核心逻辑变更:仅修改了一行核心逻辑,影响范围可控

影响范围:

  1. 对用户:修复后/v1/responses端点行为与OpenAI规范完全一致,确保instructions不会意外泄漏,提升API的可靠性和一致性
  2. 对系统:仅影响Responses API的消息构建逻辑,不影响其他API端点或核心推理引擎
  3. 对团队:修复了一个重要的规范一致性bug,增强了vLLM与OpenAI API的兼容性
规范一致性变更 API 行为调整

关联 Issue

#37697 [Bug]: openai v1/responses api instructions from prior response leak through previous_response_id

完整报告

执行摘要

  • 一句话:修复Responses API中previous_response_id导致instructions泄漏的问题
  • 推荐动作:该PR值得精读,特别是对于处理OpenAI兼容API的开发者。关注点:
    1. 理解OpenAI Responses API中instructions参数的设计意图
    2. 学习如何正确处理跨请求的消息历史管理
    3. 参考新增的测试用例,了解如何全面测试此类边界条件

功能与动机

修复issue #37697中报告的bug:当使用/v1/responses端点并指定previous_response_id时,前一个响应的instructions会泄漏到新响应中,即使新请求提供了不同的instructions。根据OpenAI Responses API规范明确说明:"When using along with previous_response_id, the instructions from a previous response will not be carried over to the next response."

实现拆解

主要修改集中在两个文件:

  1. vllm/entrypoints/openai/responses/utils.py中的construct_input_messages函数:将messages.extend(prev_msg)改为messages.extend(m for m in prev_msg if m.get("role") != "system"),过滤掉历史消息中的系统消息。
  2. tests/entrypoints/openai/responses/test_responses_utils.py:新增4个单元测试,覆盖旧系统消息被剥离、新请求无instructions、非系统消息保留、无历史消息等场景。

关键文件:

  • vllm/entrypoints/openai/responses/utils.py(模块 frontend/responses-api): 包含核心修复逻辑,修改了construct_input_messages函数以过滤历史系统消息
  • tests/entrypoints/openai/responses/test_responses_utils.py(模块 tests/responses-api): 新增4个单元测试,全面验证修复的正确性和边界情况

关键符号:construct_input_messages

评论区精华

主要讨论围绕OpenAI规范的确认:

  • chaunceyjiang询问是否有相关OpenAI规范文档链接
  • he-yufeng提供了OpenAI API Reference中关于instructions参数的明确说明,以及Text Generation指南中的相关描述,确认了规范要求instructions不应跨响应传递
  • 讨论确认了修复方案符合规范要求

  • OpenAI规范确认 (correctness): 确认了规范要求instructions不应跨响应传递,修复方案符合规范

风险与影响

  • 风险:风险较低:
    1. 回归风险:过滤系统消息可能影响依赖历史系统消息的其他功能,但根据OpenAI规范这是正确的行为
    2. 兼容性风险:修复后行为与OpenAI规范对齐,但可能影响之前依赖泄漏行为的客户端
    3. 测试覆盖:新增4个单元测试充分覆盖了各种场景,降低了回归风险
    4. 核心逻辑变更:仅修改了一行核心逻辑,影响范围可控
  • 影响:影响范围:
    1. 对用户:修复后/v1/responses端点行为与OpenAI规范完全一致,确保instructions不会意外泄漏,提升API的可靠性和一致性
    2. 对系统:仅影响Responses API的消息构建逻辑,不影响其他API端点或核心推理引擎
    3. 对团队:修复了一个重要的规范一致性bug,增强了vLLM与OpenAI API的兼容性
  • 风险标记:规范一致性变更, API行为调整

关联脉络

  • 暂无明显关联 PR

参与讨论