嵌入函数概览
在 seekdb 中,嵌入函数(Embedding Functions,简称 EF) 用于将文本等输入转换为向量,以支持语义搜索(向量相似性检索)等能力。seekdb 提供了对多种主流平台/模型的嵌入函数封装,您可以直接使用内置实现,也可以按接口规范实现自定义嵌入函数。
工作方式
您可以在创建或获取 Collection 时通过 embedding_function 参数绑定 EF。绑定后,Collection 的写入与查询会按以下规则自动生成向量:
- 写入:调用
add/update/upsert等接口时,如果传入的是documents(而不是embeddings),则使用 EF 将文本转换为向量并写入。 - 查询:调用
query接口时,如果传入的是query_texts(而不是query_embeddings),则使用 EF 将查询文本转换为查询向量并执行检索。
支持的平台
当前 seekdb 已支持以下平台的嵌入函数:
- Amazon Bedrock
- Cohere
- Google Vertex AI
- Jina AI
- Ollama
- OpenAI
- 通义千问
- Sentence Transformer
- SiliconFlow
- 腾讯混元大模型
- VoyageAI
典型用法(与 Collection 绑定)
下面示例展示了 EF 与 Collection 的典型绑定方式。其中 ef 可以替换为任一平台的嵌入函数实例。
import pyseekdb
# 以某个已实现的 EF 为例
from pyseekdb.utils.embedding_functions import SomePlatformEmbeddingFunction
# 1. 初始化嵌入函数
ef = SomePlatformEmbeddingFunction(api_key="your-api-key")
# 2. 在创建集合时绑定该函数
db = pyseekdb.Client(path="./seekdb.db")
collection = db.create_collection(
name="my_collection",
embedding_function=ef
)
# 3. 后续操作将自动处理向量化
# 您只需提供 documents,seekdb 会调用 ef 自动生成向量并存储
collection.add(
ids=["1", "2"],
documents=["Hello world", "How are you?"]
)
# 查询时同样只需提供查询文本
results = collection.query("How are you?", n_results=1)
默认嵌入函数:DefaultEmbeddingFunction(all-MiniLM-L6-v2)
如果在创建 Collection 时未指定 embedding_function,seekdb 默认使用 DefaultEmbeddingFunction。
默认模型为 Sentence Transformers 的 all-MiniLM-L6-v2(维度 384)。该模型在本地运行,首次使用可能会自动下载模型文件。
import pyseekdb
db = pyseekdb.Client(path="./seekdb.db")
# 未指定 embedding_function 时,默认使用 DefaultEmbeddingFunction
collection = db.create_collection(name="default_collection")
有关默认嵌入函数的更多信息,请参考 默认嵌入式函数。