pdf = load_pdf(help_doc_name)
faiss_index_ft9Help = FAISS.from_documents(pdf, OpenAIEmbeddings())
faiss_index_ft9Help.save_local(index_path + "/" + help_doc_name)
# load newsletters
pdf = load_pdf(newsletters_doc_name)
faiss_index_newsletters = FAISS.from_documents(pdf, OpenAIEmbeddings())
faiss_index_newsletters.save_local(index_path + "/" + newsletters_doc_name)
# load support cases
pdf = load_pdf(supportCases_doc_name)
faiss_index_supportCases = FAISS.from_documents(pdf, OpenAIEmbeddings())
faiss_index_supportCases.save_local(index_path + "/" + supportCases_doc_name)
retriever = MultiIndexRetriever(
[faiss_index_ft9Help, faiss_index_newsletters, faiss_index_supportCases])
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
verbose=False
)
MultiIndexRetriever 方法不存在,我需要从三个 faiss 索引创建一个检索器。因为我需要随后分别使用这三个索引来通过相似性搜索来获取参考页面。有什么方法可以做到这一点或有比这更好的替代方法吗? 这是我使用这条链条的部分。
while True:
question = input("You: ")
if question.lower() == "exit":
print("Bot: Goodbye!")
break
response = qa_chain.run(question)
print("Bot: " + response + "\n\n")
请注意,我仍然没有实现参考获取部分。
您正在寻找的是
merge_from
你可以这样使用它
pdfs = [help_doc_name, newsletters_doc_name, supportCases_doc_name]
for index, pdf in enumerate(pdfs):
content = load_pdf(pdf)
if index == 0:
faiss_index = FAISS.from_documents(content, OpenAIEmbeddings())
else:
faiss_index_i = FAISS.from_documents(content, OpenAIEmbeddings())
faiss_index.merge_from(faiss_index_i)
faiss_index.save_local(index_path)
retriever = faiss_index.as_retriever(
search_type="similarity", search_kwargs={"k": 3}
)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
verbose=False
)
遍历 PDF 列表。第一次创建 faiss 索引,然后合并其余索引。