使用Pinecone构建RetrievalQA时BaseRetriever实例化失败求助
问题:无法实例化BaseRetriever导致RetrievalQA创建失败
尝试结合本地LLM与Pinecone向量库构建RetrievalQA链时,出现以下验证错误:
ValidationError Traceback (most recent call last) /Users/dhruv/Desktop/Machine_Learning/Projects/Medical_ChatBot_Application/preprocessing/Experiment.ipynb Cell 28 line 1 ----> 1 qa=RetrievalQA.from_chain_type( 2 llm=llm, 3 chain_type="stuff", 4 retriever=docsearch.as_retriever(search_kwargs={'k': 2}), 5 return_source_documents=True, 6 chain_type_kwargs=chain_type_kwargs) File ~/anaconda3/envs/mchatbot/lib/python3.9/site-packages/langchain/chains/retrieval_qa/base.py:95, in BaseRetrievalQA.from_chain_type(cls, llm, chain_type, chain_type_kwargs, **kwargs) 91 _chain_type_kwargs = chain_type_kwargs or {} 92 combine_documents_chain = load_qa_chain( 93 llm, chain_type=chain_type, **_chain_type_kwargs 94 ) ---> 95 return cls(combine_documents_chain=combine_documents_chain, **kwargs) File ~/anaconda3/envs/mchatbot/lib/python3.9/site-packages/langchain/load/serializable.py:74, in Serializable.__init__(self, **kwargs) -> None: 73 def __init__(self, **kwargs: Any) -> None: ---> 74 super().__init__(**kwargs) 75 self._lc_kwargs = kwargs File ~/anaconda3/envs/mchatbot/lib/python3.9/site-packages/pydantic/main.py:341, in pydantic.main.BaseModel.__init__() ValidationError: 1 validation error for RetrievalQA retriever Can't instantiate abstract class BaseRetriever with abstract methods _aget_relevant_documents, _get_relevant_documents (type=type_error)
当前docsearch实例通过以下方式创建:
from langchain_pinecone import PineconeVectorStore as PC docsearch = PC.from_texts([t.page_content for t in text_chunks], embeddings, index_name = index_name)
解决方案
1. 升级依赖包版本
版本不兼容是常见触发原因,执行以下命令升级到最新稳定版:
pip install --upgrade langchain langchain-pinecone pinecone-client
2. 手动实例化PineconeRetriever
避免使用as_retriever方法,直接构建检索器实例:
from langchain_pinecone import PineconeRetriever from langchain.chains import RetrievalQA # 初始化检索器 retriever = PineconeRetriever( index_name=index_name, embedding=embeddings, search_kwargs={'k': 2} ) # 创建RetrievalQA链 qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, chain_type_kwargs=chain_type_kwargs )
3. 验证向量索引维度匹配
确保Pinecone索引的维度与你使用的嵌入模型输出维度完全一致,例如使用SentenceTransformer嵌入时通常为768维,需对应创建索引时的维度设置。
内容的提问来源于stack exchange,提问作者Dhruv Pamneja
相关产品推荐
相关产品推荐

