使用Langchain HuggingFaceInstructEmbeddings时遇TypeError问题求助
问题分析与解决方案
第一个错误:TypeError: _load_sbert_model() got an unexpected keyword argument 'token'
这个错误源于依赖版本不兼容:新版本LangChain会自动向_load_sbert_model传递token参数,但旧版的sentence-transformers或InstructorEmbedding库不支持该参数。同时你的代码存在重复导入问题,可能引发隐性冲突。
修复步骤:
- 清理重复导入:保留
langchain_community下的导入(LangChain v0.1+已将社区组件迁移至此),删除旧的langchain.embeddings导入:# 修正后的导入语句 from langchain_community.embeddings import HuggingFaceInstructEmbeddings, HuggingFaceEmbeddings from InstructorEmbedding import INSTRUCTOR from langchain.vectorstores import FAISS - 锁定兼容的依赖版本:在
requirements.txt中指定以下版本,避免版本冲突:langchain==0.1.10 langchain_community==0.0.23 sentence-transformers==2.2.2 InstructorEmbedding==1.0.1 faiss-cpu==1.7.4 - 实例化时显式排除
token参数:若不想重新安装依赖,可在创建Embeddings对象时添加参数屏蔽token传递:embeddings = HuggingFaceInstructEmbeddings(model_kwargs={"token": None})
第二个错误:FAISS.from_documents的属性错误
这个错误通常是因为embedding实例变量名不匹配或embedding对象未正确初始化。比如你代码中创建的实例是embeddings,但调用FAISS时用了instructor_embeddings,变量名不一致会触发属性错误。
修复步骤:
- 确保变量名一致:调用FAISS时使用正确的embedding对象:
# 确保embeddings是已正确初始化的实例 db = FAISS.from_documents(documents=data, embedding=embeddings) - 若使用
sentence-transformers系列模型,改用HuggingFaceEmbeddings类初始化,避免与InstructorEmbeddings的API冲突:embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") db = FAISS.from_documents(documents=data, embedding=embeddings)
内容的提问来源于stack exchange,提问作者Ivy Kutswa
相关产品推荐
相关产品推荐

