如何合并两个 Chroma 数据库

ran*_*mQs 5 python combiners langchain

我使用 langchain 0.0.143 创建了两个像这样的数据库(相同的嵌入):

db1 = Chroma.from_documents(
    documents=texts1,
    embedding=embeddings, 
    persist_directory=persist_directory1,
)
db1.persist()

db21 = Chroma.from_documents(
    documents=texts2,
    embedding=embeddings, 
    persist_directory=persist_directory2,
)
db2.persist()
Run Code Online (Sandbox Code Playgroud)

然后稍后访问它们

db1 = Chroma(
    persist_directory=persist_directory1,
    embedding_function=embeddings,
)

db2 = Chroma(
    persist_directory=persist_directory2,
    embedding_function=embeddings,
)
Run Code Online (Sandbox Code Playgroud)

如何组合 db1 和 db2?我想在 ConversationalRetrievalChain 设置retrieve=db.as_retriever() 中使用它们。

我尝试了一些搜索建议,但缺少一些明显的东西

Sim*_*sky 2

更简单的选项是将两个文档加载到同一个 Chroma 对象中。它们将保留单独的元数据,因此您仍然可以知道每个嵌入来自哪个文档:

from langchain.vectorstores import Chroma

chroma_directory = 'db/'

db = Chroma(persist_directory=chroma_directory, embedding_function=embedding)

db.add_documents(documents=texts1)
db.add_documents(documents=texts2)

db.similarity_search_with_score(query="Introduction to the document")
# --> results from both documents

Run Code Online (Sandbox Code Playgroud)

更复杂的选项:默认 Chroma 存储是两个镶木地板文件和一个索引。如果您可以保证没有索引冲突,理论上您可以合并各自的 parquet 文件index/,并通过将每个文件的内容复制到与index/两个新 parquet 文件相邻的新文件夹中来合并两个文件夹。