Prhub

#38362 [BugFix][Frontend] apply task instruction as system prompt in cohere v2/embed

原始 PR 作者 walterbm 合并时间 2026-03-29 02:30 文件变更 3 提交数 6 评论 3 代码增减 +242 / -39

执行摘要

修复 Cohere v2/embed API 任务指令处理 bug,确保聊天模板下用作系统提示,提升嵌入生成一致性。

PR body中提到'Followup to #37074 with some bug fixes for the /v2/embed Cohere API to ensure task instructions are used in the system prompt when a chat template is present.',目的是修复任务指令在Cohere嵌入API中不正确处理的问题,确保与聊天模板的兼容性。

建议工程师精读此PR,特别关注io_processor.py中的设计决策(如系统提示应用逻辑和回退机制),以及测试策略的改进(余弦相似性替代精确匹配),这对理解嵌入处理器的演变有价值。

讨论亮点

reviewer gemini-code-assist[bot]指出测试中mock了不存在的_resolve_chat_template方法,并缺少测试主要成功路径(既有任务前缀又有聊天模板)。作者walterbm响应并修复了这些问题,最终noooop批准PR。讨论焦点在于测试的准确性和覆盖范围,确保逻辑变更正确验证。

实现拆解

主要改动分为三个模块:

1) vllm/entrypoints/pooling/embed/io_processor.py: 修改_mixed_input_to_messages方法,将task_prefix作为系统提示加入消息列表;更新_pre_process_cohere_online方法,根据_has_chat_template决定使用聊天路径或回退到前缀文本的完成路径。
2) tests/entrypoints/pooling/embed/test_cohere_openai_parity.py: 引入余弦相似性函数_cosine_sim,替换精确匹配以容忍BF16数值漂移。
3) tests/entrypoints/pooling/embed/test_io_processor.py: 添加新单元测试TestPreProcessCohereOnline,覆盖有无聊天模板的场景。

文件 模块 状态 重要度
vllm/entrypoints/pooling/embed/io_processor.py embedding modified 8.0
tests/entrypoints/pooling/embed/test_cohere_openai_parity.py testing modified 5.0
tests/entrypoints/pooling/embed/test_io_processor.py testing modified 6.0

关键符号

_mixed_input_to_messages _pre_process_cohere_online _cosine_sim

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

评论区精华

测试 mock 错误和覆盖不全 测试

reviewer gemini-code-assist[bot] 指出测试中 mock 了不存在的方法 _resolve_chat_template,并缺少测试主要成功路径(既有任务前缀又有聊天模板)

结论:作者 walterbm 响应并修复了问题,添加了正确的 mock 和测试 · 已解决

风险与影响

技术风险包括:

1) 核心处理逻辑变更可能影响现有嵌入生成行为,尤其是_mixed_input_to_messages中系统提示的添加方式变化,需确保向后兼容。
2) 测试依赖余弦相似性,阈值设为0.9999,可能掩盖细微bug;需验证数值容差是否合理。
3) 新增单元测试覆盖了基础场景,但混合输入(如图像+文本)的极端情况测试有限。

对用户影响:使用Cohere v2/embed API的用户将获得更准确的任务指令应用,提升嵌入质量和模型输出一致性。系统影响:改进前端嵌入处理逻辑,增强与聊天模板的兼容性,减少测试波动。团队影响:提供更稳定的测试套件,便于未来维护和扩展。

核心处理逻辑变更 测试覆盖潜在缺口

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论