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

如何从存储的Chroma DB加载向量?加载后模型缺失上下文问题

问题诊断与修复方案

核心问题:加载Chroma时未匹配创建时的集合名称

你创建向量时明确指定了collection_name="local-rag",但加载代码里没传这个参数,Chroma会默认使用default空集合,导致模型无法获取到已存储的上下文数据。

修复步骤

1. 修正加载代码,指定对应集合名称

把加载部分的代码修改为:

if os.path.exists(persist_directory):
    st.write("Loading vectors from disk...")
    # 必须和创建时的collection_name保持一致
    st.session_state.vectors = Chroma(
        persist_directory=persist_directory,
        embedding_function=OllamaEmbeddings(model="nomic-embed-text"),
        collection_name="local-rag"  # 新增该行,匹配创建时的集合名
    )
    # 验证加载结果:打印集合内的文档数量,确认是否加载成功
    doc_count = st.session_state.vectors._collection.count()
    st.write(f"Loaded {doc_count} documents from disk.")
    return

2. 确保Embedding函数参数完全一致

加载时的OllamaEmbeddings实例要和创建时的参数完全对齐,避免潜在的嵌入算法差异:

st.session_state.vectors = Chroma(
    persist_directory=persist_directory,
    embedding_function=OllamaEmbeddings(model="nomic-embed-text", show_progress=True),
    collection_name="local-rag"
)

3. 检查检索逻辑是否正确调用加载后的向量库

确认你的检索代码是基于加载好的st.session_state.vectors执行相似性搜索,示例逻辑如下:

# 生成检索器
retriever = st.session_state.vectors.as_retriever(search_kwargs={"k": 3})
# 根据用户查询获取上下文文档
context_docs = retriever.get_relevant_documents(user_query)
# 将上下文拼接后传入LLM生成回答

4. 清理无效缓存(可选)

如果之前生成过默认空集合,可以删除./chroma_db目录,重新运行一次向量创建逻辑,再用修正后的代码加载,确保环境干净。

额外排查点

  • 检查./chroma_db目录下是否存在chroma.sqlite3和embeddings文件夹,确认向量文件存储完整
  • 用ollama list命令验证nomic-embed-text模型是否正常存在于本地

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:44:59