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

如何合并两个Chroma数据库?LangChain 0.0.143实操需求

合并两个Chroma数据库的解决方案(LangChain 0.0.143)

因为你使用的是相同嵌入模型,最稳妥且易实现的方式是提取两个数据库中的所有文档,合并后重新创建一个新的Chroma数据库,具体步骤如下:

方法一:提取文档后重新创建合并库

  1. 从已加载的db1和db2中提取所有文档及元数据(如果需要保留)
  2. 合并文档和元数据列表
  3. 基于合并后的内容创建新的Chroma数据库并持久化

代码示例

# 提取两个数据库的文档和元数据
db1_data = db1.get()
docs_db1 = db1_data["documents"]
metadatas_db1 = db1_data["metadatas"]

db2_data = db2.get()
docs_db2 = db2_data["documents"]
metadatas_db2 = db2_data["metadatas"]

# 合并文档和元数据(如需去重可基于文档ID或内容额外处理)
merged_docs = docs_db1 + docs_db2
merged_metadatas = metadatas_db1 + metadatas_db2

# 创建合并后的Chroma数据库
persist_directory_merged = "./chroma_merged"
db_merged = Chroma.from_documents(
    documents=merged_docs,
    embedding=embeddings,
    metadatas=merged_metadatas,
    persist_directory=persist_directory_merged
)
db_merged.persist()

# 后续可直接加载合并后的库使用
# db_merged = Chroma(
#     persist_directory=persist_directory_merged,
#     embedding_function=embeddings
# )

# 在ConversationalRetrievalChain中配置使用
retriever = db_merged.as_retriever()
# 构建你的ConversationalRetrievalChain逻辑...

关键注意事项

  • 若不需要保留元数据,可省略metadatas相关代码,直接合并文档列表即可
  • 你原始代码存在笔误:db21 = Chroma.from_documents(...)应改为db2 = Chroma.from_documents(...),否则执行db2.persist()会抛出未定义变量的错误

不推荐的底层文件合并方式

直接手动合并两个Chroma持久化目录下的chroma.sqlite3数据库文件和embeddings文件夹,需要处理主键冲突、向量与文档的对应关系,操作复杂且易损坏数据,仅当你熟悉Chroma存储结构时才建议尝试,否则优先用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:13