创建自定义嵌入函数
您 可以通过实现 EmbeddingFunction 接口创建自定义向量函数。该函数必须包含以下内容:
- 需要实现
name属性、generate方法、getConfig方法、buildFromConfig静态方法。 - 可选实现其他接口方法
- 需要使用 registerEmbeddingFunction 注册自定义嵌入函数,用于实现序列化/复原。
前提条件
创建自定义嵌入函数时,请确保以下内容:
-
实现
generate方法:- 接受:
string[](文档列表)。 - 返回:
Promise<number[][]>(向量列表)。 - 每个向量必须具有相同的维度。
- 接受:
-
设置
name属性:embeddingFuction的名称,具有唯一性。- 接受:
string(embeddingFunction名称)。
-
设置
getConfig方法:- 当前
embeddingFunction实例的所属配置,用于复原该embeddingFunction实例,此为 SDK 内部逻辑,无需关注如何使用。 - 返回:
Record<string: any>
- 当前
-
设置
buildFromConfig静态方法:- 根据所需配置,生成一个当前
embeddingFunction的新实例,此为 SDK 内部逻辑,无需关注如何使用。 - 接受:
Record<string: any>embeddingFunction 实例化的所需配置。 - 返回:
EmbeddingFunction
- 根据所需配置,生成一个当前
-
处理边缘情况:
- 空输入应返回空列表。
- 输出中的所有向量必须具有相同的维度。
-
dimension(): 返回当前实例的 dimension。此为 SDK 内部逻辑,无需关注如何使用。
示例1:句子转换器自定义嵌入功能
import { registerEmbeddingFunction } from "seekdb";
interface MyCustomEmbeddingConfig {
apiKeyEnv: string;
}
class MyCustomEmbeddingFunction implements EmbeddingFunction {
readonly name = "my_custom_embedding"
private apiKeyEnv: string;
dimension: number;
constructor(config: MyCustomEmbeddingConfig) {
this.apiKeyEnv = config.apiKeyEnv;
this.dimension = 384;
}
async generate(texts: string[]): Promise<number[][]> {
// 实现您的向量生成逻辑
// 例如,调用外部 API 或本地模型
const embeddings: number[][] = [];
/**
* 这里填充您的向量生成代码
*/
return embeddings;
}
getConfig(): MyCustomEmbeddingConfig {
return {
apiKeyEnv: this.apiKeyEnv,
};
}
static buildFromConfig(config: MyCustomEmbeddingConfig): EmbeddingFunction {
return new MyCustomEmbeddingFunction(config);
}
}
// 注册您的自定义嵌入函数
registerEmbeddingFunction("my_custom_embedding", MyCustomEmbeddingFunction);
// 使用自定义向量函数
const customEmbed = new MyCustomEmbeddingFunction({
apiKeyEnv: "MY_CUSTOM_API_KEY_ENV",
});
const collection = await client.createCollection({
name: "custom_embed_collection",
configuration: {
dimension: 384,
distance: "cosine"
},
embeddingFunction: customEmbed
});
相关操作
如果您需要使用其他内置函数或者自定义函数,可以参考以下文档创建和使用自定义函数: