我正在尝试加载一堆 pdf 文件并使用 OpenAI API 查询它们。
from langchain.text_splitter import CharacterTextSplitter
#from langchain.document_loaders import UnstructuredFileLoader
from langchain.document_loaders import UnstructuredPDFLoader
from langchain.vectorstores.faiss import FAISS
from langchain.embeddings import OpenAIEmbeddings
import pickle
import os
print("Loading data...")
pdf_folder_path = "content/"
print(os.listdir(pdf_folder_path))
# Load multiple files
# location of the pdf file/files.
loaders = [UnstructuredPDFLoader(os.path.join(pdf_folder_path, fn)) for fn in os.listdir(pdf_folder_path)]
print(loaders)
alldocument = []
vectorstore = None
for loader in loaders:
print("Loading raw document..." + loader.file_path)
raw_documents = loader.load()
print("Splitting text...")
text_splitter = CharacterTextSplitter(
separator="\n\n",
chunk_size=800,
chunk_overlap=100,
length_function=len,
)
documents = text_splitter.split_documents(raw_documents)
#alldocument = alldocument + documents
print("Creating vectorstore...")
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)
#with open("vectorstore.pkl", "wb") as f:
with open("vectorstore.pkl", "ab") as f:
pickle.dump(vectorstore, f)
f.close()
我正在尝试为 QnA 加载多个文件,但索引只记住从文件夹上传的最后一个文件。
我需要改变 for 循环的结构或使用 Open 方法添加另一个参数吗?
问题是,在循环的每次迭代中,当您创建新的矢量存储时,您都会覆盖之前的矢量存储。然后,当保存到“vectorstore.pkl”时,您仅保存最后一个矢量存储。