现象
用户在FastGPT私有部署环境中,将原bge重排序模型替换为conan-embedding-v1后,调用重排序接口报错。具体报错信息为IndexError: list index out of range,报错位置为代码第64行:new_docs.append({"index": index, "text": query_docs.documents[index], "score": 1 / (1 + np.exp(-score))})。经排查,报错源于代码第44行的self.reranker.compute_score(pairs, normalize=True)调用后,返回的分数列表长度与输入文档列表长度不一致。本次场景中,query_docs.documents列表长度为84,scores列表长度为168。
可能原因
调用重排序模型的compute_score接口后,返回的分数列表长度与输入的文档列表长度不匹配,导致后续通过文档索引访问列表时触发索引越界错误。本次场景中,输入的文档列表长度为84,但接口返回的分数列表长度为168,出现明显的长度不一致问题。
排查步骤
- 打印并记录
query_docs.documents的实际长度,以及调用compute_score后scores的实际长度,对比两者是否一致。 - 检查重排序模型的初始化代码,确认
FlagReranker的配置参数是否符合预期。 - 梳理构造
pairs参数的逻辑,确认每个查询与文档的配对数量是否符合模型输入要求。 - 核对重排序模型的输入格式要求,确保
pairs的结构正确。
解决与验证
- 调整
pairs的构造逻辑,确保每个查询仅与每个输入文档组成一对,避免重复配对导致分数列表长度翻倍。 - 重新运行重排序接口,确认不再触发
IndexError: list index out of range报错。 - 验证生成的
new_docs列表长度与query_docs.documents列表长度一致,确保后续索引访问不会出现越界问题。