logo
ChromaDB 向量数据库指南
AI Engineer

ChromaDB 向量数据库指南

ChromaDB 是一个开源的向量数据库,易于使用,适合快速原型开发和中小规模应用。

ChromaDB 向量数据库指南Embeddings

ChromaDB Embeddings (向量模型配置)

ChromaDB 的一大特色是它内置了对多种 Embedding 模型的支持。你可以使用默认的本地模型,也可以对接 OpenAI 等云端接口。

#1. 默认模型 (all-MiniLM-L6-v2)

如果你不进行任何配置,Chroma 使用 sentence-transformers 库中的 all-MiniLM-L6-v2 模型。

  • 优点:完全本地运行,免费,速度快。
  • 缺点:对中文的支持相对有限。

#2. 使用 OpenAI Embeddings

这是提升中文语义搜索准确率的常用方案。

python
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 系列)。

python
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 函数

如果你的向量是由特殊的业务模型生成的,你可以自定义一个类。

python
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 项目,建议在初始化集合时显式指定 OpenAIBGE 等高质量模型,以获得最佳的搜索效果。

相关路线图