ChromaDB v0.5.0中get_or_create_collection报错但可查询集合的问题咨询
ChromaDB v0.5.0 get_or_create_collection 报错排查
问题场景
在Python 3.10.12的pipenv环境中使用ChromaDB官方包v0.5.0时,调用PersistentClient.get_or_create_collection()方法获取已存在的集合时,抛出错误:Collection "test_collection" is not created.,但调用client.list_collections()能正常列出目标集合,且可正常查询该集合内的文本。空项目中复制相同代码无法复现该问题。
相关代码
import chromadb from chromadb import embedding_functions client = chromadb.PersistentClient(path="/path/to/collection/directory") print(f"Available collections: {client.list_collections()}") # 此语句能返回目标集合 embedding_function = embedding_functions.SentenceTransformerEmbeddingFunction("all-mpnet-base-v2", "cuda") client.get_or_create_collection("test_collection", embedding_function)
报错来源:*/lib/python3.10/site-packages/chromadb/api/segment.py第189行
可能原因及解决方案
1. 嵌入函数不匹配
ChromaDB会校验集合创建时使用的嵌入函数与当前传入的是否完全一致。如果原集合创建时的嵌入函数参数(模型名、设备等)和现在传入的SentenceTransformerEmbeddingFunction有差异,会被判定为不同集合,触发报错。
解决方法:
- 确认原集合创建时的嵌入函数参数,完全一致地传入
get_or_create_collection - 若不确定原参数,可先不传入嵌入函数获取集合,查看其元数据:
collection = client.get_collection("test_collection") print(collection.metadata) # 查看嵌入函数相关元数据
2. 环境依赖不一致
即使ChromaDB版本相同,当前pipenv环境的依赖(如sentence-transformers、torch版本)可能和空项目存在差异,导致嵌入函数校验逻辑异常。
解决方法:
- 对比空项目与当前环境的依赖清单,统一相关依赖版本
- 删除
Pipfile.lock后重新执行pipenv install,重建环境依赖
3. ChromaDB v0.5.0已知bug
该版本存在部分集合元数据校验相关的bug,尤其在跨环境复用集合目录时容易触发。
解决方法:
- 升级ChromaDB至v0.5.1及以上版本,官方后续版本修复了相关校验逻辑问题
- 若无法升级,可先不传入嵌入函数获取集合,再手动绑定:
collection = client.get_collection("test_collection") collection._embedding_function = embedding_function
内容的提问来源于stack exchange,提问作者hoosengold
相关产品推荐
相关产品推荐

