使用LangChain FAISS时遇AttributeError:SentenceTransformer无embed_documents属性
问题解决:AttributeError: 'SentenceTransformer' object has no attribute 'embed_documents'
错误原因很直接:LangChain的FAISS.from_documents方法要求传入的嵌入模型必须实现LangChain的Embeddings接口,也就是必须包含embed_documents和embed_query这两个方法。但你直接用的原生SentenceTransformer对象并没有这些方法,所以触发了属性错误。
解决方法是用LangChain专门封装的SentenceTransformerEmbeddings类来包装原生模型,让它符合LangChain的接口要求:
修改后的代码示例
# 替换原来的embed_model初始化代码 from langchain.embeddings import SentenceTransformerEmbeddings # 用LangChain封装的类创建符合接口要求的嵌入模型 embed_model = SentenceTransformerEmbeddings(model_name='all-MiniLM-L6-v2/') # 文档分割代码保持不变 text_splitter = RecursiveCharacterTextSplitter( chunk_size = 1000, chunk_overlap = 100, length_function = len, ) combined_documents = text_splitter.transform_documents(test_data) # 现在可以正常构建FAISS向量库 vector_store = FAISS.from_documents(combined_documents, embed_model)
这样修改后,embed_model就具备了LangChain要求的embed_documents方法,能顺利和FAISS完成集成。
内容的提问来源于stack exchange,提问作者Hamid K
相关产品推荐
相关产品推荐

