这是我的代码:
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
openai_api_key= 'xxx'
loader = PyPDFLoader('xxx.pdf')
text = loader.load()
chunk_size = 200
chunk_overlap = 50
# Split the pdf
splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size,
chunk_overlap=chunk_overlap,
separators=['.']
)
doc = splitter.split_documents(text)
embedding = OpenAIEmbeddings(openai_api_key=openai_api_key)
persist_directory = "embedding/chroma"
vectordb = Chroma(
persist_directory = persist_directory,
embedding_function = embedding)
vectordb.persist()
这是我代码的第一部分,然后我测试了vectordb.get()['documents']中的数据,是的。
然后我检索数据库,
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
openai_api_key= 'xxx'
vectordb2 = Chroma(persist_directory=persist_directory, embedding_function=embedding)
vectordb2.get()['documents']
是的,数据在vectordb2中,一切似乎都很好。
然后我尝试将RetrievalQA与OpenAI模型结合使用,
retriever = vectordb2.as_retriever() # search_kwargs={"k": 4}
qa = RetrievalQA.from_chain_type(ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0, openai_api_key=openai_api_key),
chain_type="stuff",
retriever=retriever)
它给我带来了一个错误:
File ~/miniforge3/envs/langchain/lib/python3.9/site-packages/pydantic/main.py:341, in pydantic.main.BaseModel.__init__()
ValidationError: 1 validation error for RetrievalQA
retriever
instance of BaseRetriever expected (type=type_error.arbitrary_type; expected_arbitrary_type=BaseRetriever)
我在谷歌上搜索了一下,似乎还有一些其他类型的“1验证错误”,但它们不同。例如
ValidationError: 1 validation error for RetrievalQA retriever value is not a valid dict (type=type_error.dict)
有人能帮忙吗?任何帮助都将不胜感激。