使用 OpenAI 进行多个文件加载和嵌入

问题描述 投票:0回答:1

我正在尝试加载一堆 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 方法添加另一个参数吗?

python openai-api embedding faiss
1个回答
0
投票

问题是,在循环的每次迭代中,当您创建新的矢量存储时,您都会覆盖之前的矢量存储。然后,当保存到“vectorstore.pkl”时,您仅保存最后一个矢量存储。

© www.soinside.com 2019 - 2024. All rights reserved.