ChromaDB Embeddings (向量模型配置)
ChromaDB 的一大特色是它内置了对多种 Embedding 模型的支持。你可以使用默认的本地模型,也可以对接 OpenAI 等云端接口。
1. 默认模型 (all-MiniLM-L6-v2)
如果你不进行任何配置,Chroma 使用 sentence-transformers 库中的 all-MiniLM-L6-v2 模型。
- 优点:完全本地运行,免费,速度快。
- 缺点:对中文的支持相对有限。
2. 使用 OpenAI Embeddings
这是提升中文语义搜索准确率的常用方案。
import 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 系列)。
from 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 函数
如果你的向量是由特殊的业务模型生成的,你可以自定义一个类。
from 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 等高质量模型,以获得最佳的搜索效果。