You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将新增Chroma向量数据库合并至已有库以节省资源?

如何合并已有Chroma向量数据库与新的向量数据库

我已有一个现成的Chroma向量数据库,希望将后续传入的新向量数据库合并到已有库中,避免每次运行程序时重新创建大型文本块数据库造成资源浪费。我尝试过合并、扩展和拼接操作,但都没生效,目前编写的添加文档代码如下:

def store_save_text(self,texts):
        self.persist_directory = 'vdb_langchain_doc_small'
        # Check if the vectordb already exists
 
        if os.path.exists(self.persist_directory):
            # print("Vectordb already exists. Loading from disk...")
            existing_db=Chroma(persist_directory=self.persist_directory, embedding_function=self.embeddings_open)
           
            for doc in texts:
               
                existing_db.add_document(doc, embedding=self.embeddings_open)
            existing_db.persist()
            existing_db = None
 
        else:
            vectordb = Chroma.from_documents(documents=texts,
                                            embedding=self.embeddings_open,
                                            persist_directory=self.persist_directory)
            vectordb.persist()
            vectordb = None
           
    def load_from_disc(self):
        self.persist_directory = 'vdb_langchain_doc_small'
        self.vectordb = Chroma(persist_directory=self.persist_directory, embedding_function=self.embeddings_open)

可行实现方法

1. 修正现有文档添加逻辑

你的代码中误用了add_document(单数)方法,Chroma推荐使用add_documents(复数)直接传入文档列表,无需循环调用,既简化代码也提升效率。修正后的代码如下:

def store_save_text(self, texts):
    self.persist_directory = 'vdb_langchain_doc_small'
    if os.path.exists(self.persist_directory):
        existing_db = Chroma(persist_directory=self.persist_directory, embedding_function=self.embeddings_open)
        # 直接传入文档列表,批量添加
        existing_db.add_documents(texts, embedding=self.embeddings_open)
        existing_db.persist()
        del existing_db  # 显式删除释放资源
    else:
        vectordb = Chroma.from_documents(
            documents=texts,
            embedding=self.embeddings_open,
            persist_directory=self.persist_directory
        )
        vectordb.persist()
        del vectordb

2. 合并两个独立Chroma数据库

如果要合并的是另一个已持久化的Chroma数据库(而非新文档),可以通过提取源库文档再添加到目标库的方式实现:

def merge_chroma_dbs(self, source_persist_dir):
    # 加载已有目标数据库
    target_db = Chroma(persist_directory=self.persist_directory, embedding_function=self.embeddings_open)
    # 加载待合并的源数据库
    source_db = Chroma(persist_directory=source_persist_dir, embedding_function=self.embeddings_open)
    
    # 提取源库的文档和元数据
    source_data = source_db.get()
    source_docs = source_data['documents']
    source_metadatas = source_data['metadatas']
    
    # 批量添加到目标库
    target_db.add_documents(documents=source_docs, metadatas=source_metadatas)
    target_db.persist()
    
    # 释放资源
    del target_db
    del source_db

3. 关键注意事项

  • 必须确保两个数据库使用完全相同的嵌入模型,否则向量维度不匹配会导致合并失败或查询异常
  • 合并后可通过print(target_db._collection.count())验证文档数量,确认合并结果
  • 合并过程中尽量复用数据库连接,避免频繁创建/删除实例以提升效率

内容的提问来源于stack exchange,提问作者Mohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:12:49