我已经成功创建了一个聊天机器人,可以通过引用 csv 来回答问题。我的代码如下,
loader = CSVLoader(file_path='data.csv') # load the csv
index_creator = VectorstoreIndexCreator() # initiation
docsearch = index_creator.from_loaders([loader]) # embedding
我的链条如下,
chain = RetrievalQA.from_chain_type(llm=OpenAI(model_name="gpt-3.5-turbo", temperature=0), chain_type="stuff", retriever=docsearch.vectorstore.as_retriever(), input_key="question")
到目前为止一切都很完美。
但我正在尝试创建一个应用程序,通过引用此 csv 来解决问题,因此我想将矢量化数据存储到 chromadb 中,可以检索该数据而无需再次嵌入。
我明白(如果我错了请告诉我)docsearch.vectorstore已经是一个chromadb。当我
print(docsearch.vectorstore)
时,它回来了,
<langchain_community.vectorstores.chroma.Chroma object at 0x13e079130>
但是它如何将其存储为文件呢?就像嵌入 txt 或 pdf 文件后所做的那样,将其保存在文件夹中。
embedding = OpenAIEmbeddings(openai_api_key=openai_api_key)
# embedding = OpenAIEmbeddings(openai_api_key=openai_api_key, model_name='text-embedding-3-small')
persist_directory = "embedding/chroma"
# Create a Chroma vector database for the current states after embedding
vectordb = Chroma(
persist_directory = persist_directory,
embedding_function = embedding)
vectordb.persist()
database = Chroma.from_documents(doc, embedding=embedding, persist_directory = persist_directory)
然后你就可以在persist_directory中找到数据库文件了。
所以,我的问题是,如何使用 csv 数据实现类似的过程?我用谷歌搜索过,例如有没有办法在langchain中加载通过VectorstoreIndexCreator创建的索引?它是如何运作的? 但这似乎不是答案。因为答案称为“文档”和“嵌入”,我似乎无法在操作中找到它们。
非常感谢任何帮助。
请尝试这个
from langchain.chains import RetrievalQA
chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=docsearch.vectorstore.as_retriever(),
# input_key="question"
)
print(chain.invoke("question"))