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

使用ChromaDB执行向量嵌入时内核崩溃问题求助

问题描述

本地用Ollama构建聊天机器人时,ChromaDB向量嵌入环节处理完整246页PDF内核崩溃,仅处理单章节可正常运行。

问题代码

# Create the Chroma vector store
from langchain_chroma.vectorstores import Chroma
try:
    vector_db = Chroma.from_documents(
        documents=chunked_document,
        embedding=embedding_model,
        collection_name="local-rag",
        persist_directory="./db/db_nomic"
    )
    print("Embedded Documents stored in ChromaDB successfully!")
except Exception as e:
    print(f"An error occurred: {e}")

备注信息

embedding_model = OllamaEmbeddings(model="nomic-embed-text")

chunked_document = [Document(metadata={'source': 'xxx', 'page': 1, 'math_expressions': 'xxx'}, page_content=''), .... ]

补充信息

  • Python版本:3.12.7

已尝试方案

  • 将代码从Jupyter Notebook移至Python文件,问题依旧;
  • 采用批量嵌入方式,未解决;
  • 合并单章节生成的数据库,无效。

解决方案

1. 分批次增量嵌入

避免一次性传入所有文档块,分批次增量添加到ChromaDB,降低内存负载:

from langchain_chroma.vectorstores import Chroma
import math

# 设定每批次处理的文档数量
batch_size = 50
total_chunks = len(chunked_document)
vector_db = None

for i in range(0, total_chunks, batch_size):
    batch = chunked_document[i:i+batch_size]
    if not vector_db:
        # 初始化数据库
        vector_db = Chroma.from_documents(
            documents=batch,
            embedding=embedding_model,
            collection_name="local-rag",
            persist_directory="./db/db_nomic"
        )
    else:
        # 增量添加当前批次
        vector_db.add_documents(documents=batch)
    print(f"完成批次 {i//batch_size + 1}/{math.ceil(total_chunks/batch_size)} 处理")

# 持久化数据库
vector_db.persist()
print("所有文档嵌入并存储成功!")

2. 清理无效文档与优化分割

  • 过滤空内容的文档(如备注中page_content=''的条目):
# 移除无实际内容的文档块
filtered_chunks = [doc for doc in chunked_document if doc.page_content.strip() != '']
  • 调整PDF分割的chunk_size和chunk_overlap参数,缩小单个文档块的体积,减少单批次内存占用。

3. 限制嵌入模型资源占用

给Ollama嵌入模型设置批量大小和超时,避免进程过度占用内存:

from langchain_community.embeddings import OllamaEmbeddings

embedding_model = OllamaEmbeddings(
    model="nomic-embed-text",
    timeout=60,
    embed_batch_size=32  # 控制单次嵌入的文档数量
)

4. 系统资源优化

  • 关闭后台闲置程序,释放足够RAM;
  • Windows关闭虚拟内存压缩,Linux/macOS适当调整swap空间,缓解内存压力。

内容的提问来源于stack exchange,提问作者Abdullah Al Mahfuz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:40:03