如何从存储的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
相关产品推荐
相关产品推荐

