Haystack 3.3.0调整检索结果:零匹配文档不再补满top_k,中文分词与提示内容一并修复
2026年10月1日10:39 UTC,即北京时间18:39,deepset发布Haystack 3.3.0。官方更新同时涉及检索性能和结果语义:句子窗口检索减少对文档存储的调用,内存BM25检索则不再把没有任何查询词的文档补进结果。对已有RAG应用,后一项变化尤其值得在升级前检查。
返回不足五条,不一定是检索失败
发布说明指出,默认BM25L及BM25Plus算法现在只返回至少包含一个查询词的文档;此前零匹配文档也可能取得正分并占满top_k。因此,请求五条结果时,实际可能得到两条,甚至一条也没有。该变化无论是否启用分数缩放都适用,BM25Okapi不受这一项调整影响。
设想知识库里只有两份材料提到目标型号。如果程序过去把“返回五条”当成正常工作标志,升级后就可能误报异常;如果生成环节无条件拼接五份材料,也应改为按实际结果处理。本文建议把结果数量理解为上限,并给没有匹配材料的情况准备明确出口,例如提示补充型号或转交人工。
AI模型生成的概念插图:检索从资料集合中选出相关卡片,返回数量由匹配情况决定;并非Haystack实际界面或运行结果。
旧阈值和旧切片不能直接沿用
本版也调整了BM25L和BM25Plus的分数计算:下界项只用于文档中出现的查询词。对于只匹配部分查询词的文档,新旧得分可能不同;官方明确提醒,使用固定得分门槛的团队要重新检查阈值。一次查询返回更少结果,不应直接解读为系统质量变差。
中文、日文和韩文的默认分词也得到修复:CJK字符逐个形成词元,连续无空格文本中的查询可以被匹配,分词前还会做NFC规范化。这是默认切分行为的变化,并不等于系统拥有了新的领域词典。已有自定义分词配置的项目,应分别核对自己的路径,而不能只看默认演示。
性能改动与内容修复各有验收重点
SentenceWindowRetriever现在每次同步或异步运行合并查询文档存储,取代按检索到的每份文档分别查询,官方表示输出保持不变。另一个修复针对由ChatMessage列表构成的提示模板:过去可能只保留第一段文字,新增文字、图片和文件等内容会丢失;本版会渲染各文字部分并保留其余内容。
这些改动可以分开验证。检索侧选取完全匹配、部分匹配、没有匹配和中文连续文本四类问题,对照文档编号、数量及分数;提示侧检查发送到模型前的完整消息,确认附件仍在。性能侧则记录存储调用次数和端到端耗时,避免把少一次查询自动换算成固定百分比的速度收益。
本文的判断是,3.3.0最需要关注的是已有应用对“正常结果”的假设。把空集合、分数变化和多段内容纳入回归验收,能让此次升级的价值落到真实问答链路上,而不只停留在依赖版本号的更新。
来源与核对时间
资料核对:2026年10月2日。本文依据公开资料整理,未安装或实测所述产品及服务。


