跳到主要内容
版本:V1.1.0

创建自定义嵌入函数

您可以通过实现 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
});

相关操作

如果您需要使用其他内置函数或者自定义函数,可以参考以下文档创建和使用自定义函数: