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

如何向已有的Chroma向量库中批量添加嵌入向量

批量将PDF拆分片段存入Chroma向量库的正确方案

错误原因分析

你之前尝试的方法存在几个核心问题:

  • vectordb.add_document(split, embedding):Chroma没有add_document(单数)方法,正确调用应为add_documents(复数)
  • vectordb.add_documents([split], embedding=embedding):初始化Chroma时已绑定嵌入函数,无需重复传入embedding参数;若报错,大概率是splits不是LangChain标准Document对象列表
  • vectordb.add(embeddings):add方法需同时传入文档内容与对应向量,使用门槛高,不如add_documents自动生成向量简便

正确实现代码

假设你已完成批次拆分与文本分片,直接循环处理每个批次的splits即可:

import time

# 假设all_splits_batches是存储所有批次分片的列表
for splits in all_splits_batches:
    # 将当前批次的分片添加到向量库
    vectordb.add_documents(documents=splits)
    # 手动持久化,确保数据写入磁盘(可选但推荐)
    vectordb.persist()
    # 休眠规避OpenAI的TPM限制,时长可根据API配额调整
    time.sleep(8)

关键注意事项

  • 确保splits是LangChain Document对象的列表:每个对象需包含page_content(文本内容)与metadata(可选,如PDF来源、页码等)。若拆分后是纯文本,需转换格式:
    from langchain_core.documents import Document
    # 示例:将纯文本列表转为Document对象列表
    splits = [Document(page_content=text, metadata={"source": "目标PDF路径"}) for text in split_texts]
    
  • 初始化Chroma时已指定embedding_function,add_documents会自动调用该函数生成嵌入向量,无需额外传入参数
  • 分批次休眠是为了避免触发OpenAI的每分钟Token限制,时长可根据你的API配额灵活调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:33:09