ChromaDB Embeddings (向量模型配置)
ChromaDB 的一大特色是它内置了对多种 Embedding 模型的支持。你可以使用默认的本地模型,也可以对接 OpenAI 等云端接口。
#1. 默认模型 (all-MiniLM-L6-v2)
如果你不进行任何配置,Chroma 使用 sentence-transformers 库中的 all-MiniLM-L6-v2 模型。
- 优点:完全本地运行,免费,速度快。
- 缺点:对中文的支持相对有限。
#2. 使用 OpenAI Embeddings
这是提升中文语义搜索准确率的常用方案。
pythonimport chromadb.utils.embedding_functions as ef openai_ef = ef.OpenAIEmbeddingFunction( api_key="your_api_key", model_name="text-embedding-3-small" ) collection = client.get_or_create_collection( name="my_collection", embedding_function=openai_ef )
#3. 使用 Hugging Face 模型 (推荐中文场景)
你可以加载 Hugging Face 上专门针对中文优化的模型(如 BGE 系列)。
pythonfrom chromadb.utils import embedding_functions # 使用本地下载的模型或在线 API huggingface_ef = embedding_functions.HuggingFaceEmbeddingFunction( api_key="your_hf_token", model_name="BAAI/bge-small-zh-v1.5" )
#4. 自定义 Embedding 函数
如果你的向量是由特殊的业务模型生成的,你可以自定义一个类。
pythonfrom chromadb.api.types import Documents, Embeddings class MyEmbeddingFunction: def __call__(self, input: Documents) -> Embeddings: # 在这里调用你的自定义模型逻辑 return [ [0.1, 0.2, ...], [0.3, 0.4, ...] ] my_ef = MyEmbeddingFunction()
#5. 常见问题:向量维度不匹配
警告:一旦一个集合(Collection)创建并存入了数据,它的向量维度就是固定的。
- 如果你先用默认模型(384 维)存了数据。
- 后来改为 OpenAI 模型(1536 维)。
- Chroma 会报错。
解决方案:修改模型后,必须创建一个新的集合并重新导入数据。
总结:对于中文 RAG 项目,建议在初始化集合时显式指定 OpenAI 或 BGE 等高质量模型,以获得最佳的搜索效果。