执行摘要
- 一句话:修复Responses API中previous_response_id导致instructions泄漏的问题
- 推荐动作:该PR值得精读,特别是对于处理OpenAI兼容API的开发者。关注点:
- 理解OpenAI Responses API中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."
实现拆解
主要修改集中在两个文件:
- 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"),过滤掉历史消息中的系统消息。
- 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规范的确认:
风险与影响
- 风险:风险较低:
- 回归风险:过滤系统消息可能影响依赖历史系统消息的其他功能,但根据OpenAI规范这是正确的行为
- 兼容性风险:修复后行为与OpenAI规范对齐,但可能影响之前依赖泄漏行为的客户端
- 测试覆盖:新增4个单元测试充分覆盖了各种场景,降低了回归风险
- 核心逻辑变更:仅修改了一行核心逻辑,影响范围可控
- 影响:影响范围:
- 对用户:修复后/v1/responses端点行为与OpenAI规范完全一致,确保instructions不会意外泄漏,提升API的可靠性和一致性
- 对系统:仅影响Responses API的消息构建逻辑,不影响其他API端点或核心推理引擎
- 对团队:修复了一个重要的规范一致性bug,增强了vLLM与OpenAI API的兼容性
- 风险标记:规范一致性变更, API行为调整
关联脉络
参与讨论