故障排查GitHub issue2 分钟阅读排错/错误码

解决FastGPT私有部署版向量召回失效问题的排错方法

用户在FastGPT 4.9.0及以后的私有部署版本中,使用RAG进行问答时,部分低频问题无法被向量召回。当短问题与大量长文本共同参与筛选时,即使与目标文本的向量相似度达到100%,也无法召回该目标文本。

现象

用户在FastGPT 4.9.0及以后的私有部署版本中,使用RAG进行问答时,部分低频问题无法被向量召回。当短问题与大量长文本共同参与筛选时,即使与目标文本的向量相似度达到100%,也无法召回该目标文本。通过FastGPT控制台获取PGvector执行的SQL日志后,在独立的SQL客户端中直接执行该SQL语句,同样无法召回预期的目标内容。

可能原因

当前FastGPT默认使用内积作为向量查询算法,内积的计算结果越大,代表两个文本的相似度越高。现有代码逻辑中,先对向量查询返回的结果进行分页处理,再通过乘以-1的方式调整排序方向,以匹配相似度从高到低的展示需求。但由于分页操作先于排序调整执行,导致分页后的结果无法正确按照原始相似度从高到低排序,高相似度的结果被错误过滤或排在分页结果之外。

排查步骤

  1. 登录FastGPT部署环境的PGvector数据库,从FastGPT控制台中获取向量查询的SQL执行日志。
  2. 在独立的SQL客户端中直接执行获取到的SQL语句,验证是否无法召回预期的目标文本。
  3. 查看FastGPT源码中向量查询的处理逻辑,确认是否存在先分页再乘以-1的排序步骤。

解决与验证

提供三种可行的解决方向:

  1. 将向量查询算法切换为余弦相似度,该算法是RAG场景中常用的相似度计算方式。
  2. 修复内积算法的排序逻辑,将乘以-1的操作移至SQL层面的排序步骤之前,确保排序基于完整的查询结果执行,避免分页影响最终的召回结果。
  3. 在FastGPT界面中新增向量算法的选择配置项,允许用户根据实际业务场景指定使用的相似度算法。

验证方法:完成配置修改或代码调整后,使用原本无法召回的问题进行测试,确认目标文本可以被正常召回,且排序结果符合预期。

来源:FastGPT GitHub issue