嵌入向量是用于表示任何类型数据的人工智能原生方式,使其成为与各种人工智能驱动的工具和算法完美结合的选择。它们可以表示文本、图像,以及不久之后的音频和视频。有许多选项可用于创建嵌入向量,可以在本地使用已安装的库进行创建,也可以通过调用 API 来创建。
Chroma提供了对流行嵌入提供者的轻量级封装,方便将它们应用到您的应用程序中。您可以在创建Chroma集合时设置一个嵌入函数,该函数将自动被使用;或者您也可以直接调用它们。
Python | JS | |
---|---|---|
OpenAI | ✅ | ✅ |
Cohere | ✅ | ✅ |
Google PaLM | ✅ | ➖ |
Hugging Face | ✅ | ➖ |
Instructor | ✅ | ➖ |
我们欢迎开发者提交贡献代码,以将新的嵌入函数添加到社区中。
默认:all-MiniLM-L6-v2
默认情况下,Chroma使用Sentence Transformers中的all-MiniLM-L6-v2模型来创建嵌入向量。这个嵌入模型可以创建用于各种任务的句子和文档嵌入向量。该嵌入函数在您的计算机上本地运行,并可能需要下载模型文件(这将自动进行)。
from chromadb.utils import embedding_functions
default_ef = embedding_functions.DefaultEmbeddingFunction()
注意:
嵌入函数可以与集合关联,这意味着在调用add、update、upsert或query时会使用它们。您也可以直接使用它们,这在调试时非常方便。val = default_ef(["foo"])
-> [[0.05035809800028801, 0.0626462921500206, -0.061827320605516434…]]
Sentence Transformers
Chroma还可以使用任何Sentence Transformers模型来创建嵌入向量。
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
您可以传入一个可选的model_name参数,以选择要使用的Sentence Transformers模型。默认情况下,Chroma使用all-MiniLM-L6-v2模型。您可以在这里查看所有可用模型的列表。
自定义 Embedding Functions
python:
您可以创建自己的嵌入函数并在Chroma中使用,只需实现EmbeddingFunction协议即可。
from chromadb import Documents, EmbeddingFunction, Embeddings
class MyEmbeddingFunction(EmbeddingFunction):
def __call__(self, texts: Documents) -> Embeddings:
# embed the documents somehow
return embeddings
我们欢迎贡献!如果您创建了一个您认为对他人有用的嵌入函数,请考虑提交拉取请求,将其添加到Chroma的embedding_functions模块中。
JavaScript:
您可以创建自己的嵌入函数以与Chroma一起使用,只需实现EmbeddingFunction协议。在一个类中,.generate方法严格来说是您所需要的全部。
class MyEmbeddingFunction {
private api_key: string;
constructor(api_key: string) {
this.api_key = api_key;
}
public async generate(texts: string[]): Promise<number[][]> {
// do things to turn texts into embeddings with an api_key perhaps
return embeddings;
}
}