快速结论:MatrixOne vector search ignores score_threshold 这个报错通常出现在 Dify 使用 MatrixOne 作为向量数据库、并在检索时设置了 score_threshold 的场景。优先排查 Dify MatrixOne 向量插件的 matrixone_vector.py 中 search_by_vector 是否读取并使用了 score_threshold。
适用环境:Dify main (3453fdce44),Self Hosted(Source 源码部署),向量数据库为 MatrixOne。
最快修复方案:暂无确认的一步修复方案。该 Issue 已确认是代码缺陷,但评论中给出的修复方式尚未被验证为正式补丁,可优先尝试修改 search_by_vector,使其读取 score_threshold、计算相似度分数并过滤低于阈值的结果。
注意事项:评论中的修复方案是建议而非已验证补丁,修改后需要重新构建或加载对应的 MatrixOne 向量插件。另外,同一个 MatrixOne 集成中还存在 ID 生成问题(#39732),与本问题相互独立,排错时不要混在一起。
问题场景
在 Dify 中将 MatrixOne 配置为向量存储后,对文档进行向量检索,并设置 top_k=2、score_threshold=0.5。实际返回结果中,L2 距离为 0.25 和 2.0 的两个文档都被返回,说明 score_threshold 没有被执行,同时返回文档的 metadata 中也没有相似度分数。
报错原文
MatrixOne vector search ignores score_threshold
top_k=2, score_threshold=0.5
L2 distances: 0.25 and 2.0
Expected: only score 0.8 remains
Actual: all top_k results returned, no similarity score in metadata
原因分析
确认原因是 Dify MatrixOne 向量插件中的 search_by_vector 实现没有从 kwargs 中读取 score_threshold,也没有把 MatrixOne 返回的 L2 距离转换为标准化的相似度分数,更没有把分数写入返回文档的 metadata["score"]。代码中甚至留有 TODO: add the score threshold to the query 注释,说明该功能当时尚未实现。
同样的问题在 Pgvector、Milvus 等后端是通过查询后过滤模式处理的,即先从原始距离计算相似度分数,再按 score_threshold 过滤结果,因此 MatrixOne 的实现与它们不一致。
环境排查
- 确认 Dify 版本是否为
main (3453fdce44)或包含该提交的源码版本。 - 确认部署方式是否为 Self Hosted(Source)源码部署。
- 确认向量数据库已配置为 MatrixOne。
- 排查是否存在其他无关的 MatrixOne 集成问题,例如 #39732 的 ID 生成问题。
解决步骤
以下修复思路来自 Issue 评论,尚未被标记为已验证补丁,可优先尝试。
- 定位文件:
api/providers/vdb/vdb-matrixone/src/dify_vdb_matrixone/matrixone_vector.py,重点检查search_by_vector方法(Issue 中提到的约 160-186 行)。 - 让
search_by_vector从kwargs中读取score_threshold,默认值设为0.0。</
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


