SentenceTransformer无default_prompt_name属性报错排查求助
问题
更换新运行时后,执行检索文档的代码出现报错,此前运行正常。已尝试重启会话、升级SentenceTransformer,问题仍未解决。
代码如下:
import joblib loaded_db = joblib.load('/content/drive/MyDrive/Skripsi/Db/db_1000_100.joblib') retriever = loaded_db.as_retriever() query = "Apa saja jenis intervensi gizi?" retriever = loaded_db.as_retriever() retrieved_docs = retriever.get_relevant_documents(query) retrieved_docs
报错信息:
AttributeError Traceback (most recent call last) <ipython-input-11-efcb9fa990f2> in <cell line: 3>() 1 query = "Apa saja jenis intervensi gizi?" 2 retriever = loaded_db.as_retriever() ----> 3 retrieved_docs = retriever.get_relevant_documents(query) 4 retrieved_docs 9 frames /usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py in __getattr__(self, name) 1693 if name in modules: 1694 return modules[name] -> 1695 raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") 1696 1697 def __setattr__(self, name: str, value: Union[Tensor, 'Module']) -> None: AttributeError: 'SentenceTransformer' object has no attribute 'default_prompt_name'
解决方案
这个错误核心是SentenceTransformer与LangChain版本不兼容:新运行时默认安装的LangChain版本较高,而旧版本的SentenceTransformer没有default_prompt_name属性,两者交互时触发报错。
具体解决步骤:
- 固定依赖版本,匹配之前正常运行的环境
- 找到之前环境的依赖版本记录(比如
pip freeze导出的列表),锁定langchain和sentence-transformers的版本:pip install langchain==<历史兼容版本号> sentence-transformers==<历史兼容版本号>
- 找到之前环境的依赖版本记录(比如
- 重构向量数据库(若可行)
- 如果能重新生成向量数据,用当前兼容的依赖版本重新构建并保存向量存储对象,替代旧的
db_1000_100.joblib文件
- 如果能重新生成向量数据,用当前兼容的依赖版本重新构建并保存向量存储对象,替代旧的
- 优化冗余代码
- 代码中重复执行了
retriever = loaded_db.as_retriever(),可删除其中一行,不影响功能且更简洁
- 代码中重复执行了
内容的提问来源于stack exchange,提问作者phluviophilee
相关产品推荐
相关产品推荐

