logo

ChromaDB Embeddings (向量模型配置)

Embedding 模型选得对不对,会影响检索质量;但在实际项目里,它通常不是第一优先级。更常见的情况是模型没问题,文档切法和集合设计先出了问题。

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

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

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

如果你只是想验证流程,它很适合;如果你要做中文知识库问答,通常很快就会想换。

2. 使用 OpenAI Embeddings

这是提升中文语义搜索准确率的常用方案之一,尤其适合你已经在用 OpenAI 体系的时候。

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 会报错

解决方案:修改模型后,必须创建一个新的集合并重新导入数据。

这个坑很常见。很多人先拿默认模型试了几天,后面想无缝切到 OpenAI 或 BGE,结果才发现旧集合里的向量根本不能直接混用。

如果你让我给一个更实用的建议:先固定一套模型和维度,把回测集跑起来;确认真的有瓶颈,再考虑迁模型。不要今天 small,明天 large,后天又换 BGE,最后连自己都说不清哪次效果变好了。

ChromaDB 向量数据库指南
AI Engineer

ChromaDB 向量数据库指南

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

ChromaDB 向量数据库指南Embeddings

ChromaDB Embeddings (向量模型配置)

Embedding 模型选得对不对,会影响检索质量;但在实际项目里,它通常不是第一优先级。更常见的情况是模型没问题,文档切法和集合设计先出了问题。

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

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

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

如果你只是想验证流程,它很适合;如果你要做中文知识库问答,通常很快就会想换。

#2. 使用 OpenAI Embeddings

这是提升中文语义搜索准确率的常用方案之一,尤其适合你已经在用 OpenAI 体系的时候。

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 会报错

解决方案:修改模型后,必须创建一个新的集合并重新导入数据。

这个坑很常见。很多人先拿默认模型试了几天,后面想无缝切到 OpenAI 或 BGE,结果才发现旧集合里的向量根本不能直接混用。

如果你让我给一个更实用的建议:先固定一套模型和维度,把回测集跑起来;确认真的有瓶颈,再考虑迁模型。不要今天 small,明天 large,后天又换 BGE,最后连自己都说不清哪次效果变好了。

System Design

系统设计必备:核心概念 + 经典案例

快速掌握取舍与设计套路,备战系统设计面试。

进入 System Design →

相关路线图