Chroma Embedding 函数
原文:Embedding 函数
一句话
Embedding 函数是将数据转换为数值表示的工具,使 Chroma 能够存储、索引和搜索相似内容。
什么时候翻这页
当你需要了解如何在 Chroma 中使用不同的 embedding 函数,或者需要自定义 embedding 函数时。
核心概念
- Embedding:数据的数值表示,能够捕捉数据的含义,使 AI 模型能够处理文本、图像、音频和视频等数据
- Embedding Function:将数据转换为向量的函数,可链接到集合并在调用
add、update、upsert或query时自动使用 - DefaultEmbeddingFunction:Chroma 默认使用的 embedding 函数,基于 Sentence Transformers 的 all-MiniLM-L6-v2 模型,在本地运行
- Custom Embedding Function:用户自定义的 embedding 函数,需要实现
EmbeddingFunction接口
怎么做
使用 OpenAI Embedding Function
# 设置 OPENAI_API_KEY 环境变量
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction
collection = client.create_collection(
name="my_collection",
embedding_function=OpenAIEmbeddingFunction(
model_name="text-embedding-3-small"
)
)
# Chroma 将使用 OpenAIEmbeddingFunction 来嵌入你的文档
collection.add(
ids=["id1", "id2"],
documents=["doc1", "doc2"]
)
使用默认 Embedding Function
from chromadb.utils.embedding_functions import DefaultEmbeddingFunction
default_ef = DefaultEmbeddingFunction()
embeddings = default_ef(["foo"])
print(embeddings) # [[0.05035809800028801, 0.0626462921500206, -0.061827320605516434...]]
collection.query(query_embeddings=embeddings)
创建自定义 Embedding Function
from typing import Dict, Any
from chromadb import Documents, EmbeddingFunction, Embeddings
from chromadb.utils.embedding_functions import register_embedding_function
@register_embedding_function
class MyEmbeddingFunction(EmbeddingFunction):
def __init__(self, model):
self.model = model
def __call__(self, input: Documents) -> Embeddings:
# 实现文档嵌入逻辑
return embeddings
@staticmethod
def name() -> str:
return "my-ef"
def get_config(self) -> Dict[str, Any]:
return dict(model=self.model)
@staticmethod
def build_from_config(config: Dict[str, Any]) -> "EmbeddingFunction":
return MyEmbeddingFunction(config['model'])
命令 / API 速查
OpenAIEmbeddingFunction(model_name):创建 OpenAI embedding 函数DefaultEmbeddingFunction():创建默认 embedding 函数collection.add():添加文档,自动使用关联的 embedding 函数collection.query():查询相似内容,可使用 query_embeddings 参数@register_embedding_function:装饰器,用于注册自定义 embedding 函数
支持的 Embedding 提供商
| 提供商 | Python | TypeScript |
|---|---|---|
| Cloudflare Workers AI | ✓ | ✓ |
| Cohere | ✓ | ✓ |
| Google Generative AI | ✓ | ✓ |
| Hugging Face | ✓ | - |
| Hugging Face Embedding Server | ✓ | ✓ |
| Jina AI | ✓ | ✓ |
| Mistral | ✓ | ✓ |
| Morph | ✓ | ✓ |
| OpenAI | ✓ | ✓ |
| Sentence Transformers | ✓ | ✓ |
| Together AI | ✓ | ✓ |
与 Hello-Agents / LangGraph / 本博客 handbook 索引的联系
在 Hello-Agents 的记忆与检索章节中,我们学习了基本的检索概念,而 Chroma 的 embedding 函数是实现这些概念的具体工具。在本博客 handbook 中,我们使用 Chroma 作为 vector store,而 embedding 函数是将文本转换为向量的关键组件,直接影响检索效果。当我们在 RAG 系统中使用 Chroma 时,选择合适的 embedding 函数对提高检索准确性至关重要。
初学者易错点
- 忘记设置 OPENAI_API_KEY 环境变量
- 混淆 embedding 函数和 retriever 的概念
- 在创建集合时不指定 embedding 函数,导致使用默认函数可能不符合需求
- 自定义 embedding 函数时没有正确实现所有必需的方法
- 在 TypeScript 中忘记安装相应的 embedding 函数包(如
@chroma-core/openai)