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

基于Langchain/Chroma的RAG无法存储超99条记录求助

Chroma向量数据库无法完整保存全部文本块嵌入的问题

我通过以下代码流程处理Markdown文件:加载文件→分割为文本块→嵌入并存储到Chroma向量数据库。当前单个Markdown文件被分割为801个文本块,但所有嵌入内容无法完整保存到磁盘上的向量库中。

现有实现代码

加载文档函数

def load_documents():
    loader = DirectoryLoader(DATA_PATH, glob="*.md")
    documents = loader.load()
    return documents

文本分割函数

def split_text(documents: list[Document]):
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=300,
        chunk_overlap=100,
        length_function=len,
        add_start_index=True,
    )
    chunks = text_splitter.split_documents(documents)
    print(f"Split {len(documents)} documents into {len(chunks)} chunks.")

    document = chunks[10]
    print(document.page_content)
    print(document.metadata)

    return chunks

保存到Chroma函数

def save_to_chroma(chunks: list[Document]):
    # 先清空数据库
    if os.path.exists(CHROMA_PATH):
        shutil.rmtree(CHROMA_PATH)

    # 基于文档创建新数据库
    db = Chroma.from_documents(
        chunks, OpenAIEmbeddings(), persist_directory=CHROMA_PATH
    )

问题排查过程

我尝试用循环逐个保存文本块(代码如下),发现最多只能保存99个文本块的嵌入内容,超过这个数量就会崩溃:

for i, chunk in enumerate(chunks):
    db = Chroma.from_documents(
        chunks, OpenAIEmbeddings(), persist_directory=CHROMA_PATH
    )

用DB Browser for SQLite查看底层数据库,发现Chroma的embeddings表最多只有99条记录,但手动向该表添加记录可以超过99条。

已尝试的解决方法

  • 按10或30个文本块为批量进行保存
  • 保留已有99条记录的数据库,尝试写入更多数据
  • 调整文本块的大小和重叠度

以上方法均未解决问题,求问该问题的原因及可行的解决方法?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:21:05