初始化LangChain的FlashrankRerank时遭遇Pydantic错误求助
解决FlashrankRerank初始化的Pydantic错误
错误原因
两个错误的核心都是FlashrankRerank的Pydantic模型依赖flashrank.Ranker类型,但该类型未提前导入或加载:
- 首次报错是因为初始化
FlashrankRerank时,Pydantic找不到Ranker的类型定义,判定模型未完全定义; - 调用
model_rebuild()时仍报错,是因为执行重建前未导入Ranker,Pydantic依旧无法识别该类型。
解决方案
提供两种可行的修复方式:
方式一:显式初始化Ranker并传入
先确保依赖安装完成:
pip install flashrank
再按以下代码顺序导入并初始化:
from flashrank import Ranker from langchain.retrievers.contextual_compression import ContextualCompressionRetriever from langchain.retrievers.document_compressors.flashrank_rerank import FlashrankRerank # 初始化Flashrank的Ranker(可指定自定义模型,默认使用cross-encoder/ms-marco-MiniLM-L-6-v2) ranker = Ranker() # 传入ranker实例构建压缩器 compressor = FlashrankRerank(ranker=ranker) compression_retriever = ContextualCompressionRetriever( base_compressor=compressor, base_retriever=retriever )
方式二:导入Ranker后重建模型定义
如果希望使用默认Ranker配置,可以先导入Ranker再重建Pydantic模型:
from flashrank import Ranker from langchain.retrievers.contextual_compression import ContextualCompressionRetriever from langchain.retrievers.document_compressors.flashrank_rerank import FlashrankRerank # 重建模型,让Pydantic识别Ranker类型 FlashrankRerank.model_rebuild() # 初始化FlashrankRerank(自动使用默认Ranker) compressor = FlashrankRerank() compression_retriever = ContextualCompressionRetriever( base_compressor=compressor, base_retriever=retriever )
内容的提问来源于stack exchange,提问作者Jerin Jude
相关产品推荐
相关产品推荐

