有没有办法在langchain中加载通过VectorstoreIndexCreator创建的索引?它是如何工作的?

2024-02-05

我正在尝试 langchains 及其应用程序,但作为一个新手,我无法理解嵌入和索引如何在这里真正协同工作。我知道这两个是什么,但我无法找到使用我创建和保存的索引的方法persist_directory.

我使用以下代码成功保存了 VectorstoreIndexCreator 创建的对象:

index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory":"./custom_save_dir_path"}).from_loaders([loader])

但我找不到使用创建的 .pkl 文件的方法。如何使用我的链中的这些文件来检索数据?

另外,openAI 中的计费是如何进行的?如果我无法使用任何保存的嵌入或索引,每次运行代码时它都会重新嵌入所有数据吗? 作为初学者,我仍在学习中,任何帮助将不胜感激。

这是完整的代码:

from langchain.document_loaders import CSVLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "sk-xxx"
# Load the documents
loader = CSVLoader(file_path='data/data.csv')

#creates an object with vectorstoreindexcreator
index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory":"./custom_save_dir_path"}).from_loaders([loader])

# Create a question-answering chain using the index
chain = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=index.vectorstore.as_retriever(), input_key="question")

# Pass a query to the chain
while True:
    query = input("query: ")
    response = chain({"question": query})
    print(response['result'])

默认情况下,VectorstoreIndexCreator 使用矢量数据库 DuckDB,它是暂时的,将数据保存在内存中。 如果你想持久化数据,你必须使用 Chromadb,并且需要显式地持久化数据并在需要时加载它(例如,当数据库存在时加载数据,否则持久化它)。

有关 chromadb 的更多详细信息,请参阅:chroma https://python.langchain.com/en/latest/modules/indexes/vectorstores/examples/chroma.html

您的案例中使用的 llm openai 负责创建嵌入(即将存储在向量数据库中的向量)。 因此,每当您处理数据并将其存储在矢量存储中时,您都会在 openai 中产生费用,如果您从数据库加载矢量存储,则需要从 openai 中产生费用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在langchain中加载通过VectorstoreIndexCreator创建的索引?它是如何工作的? 的相关文章

随机推荐