嵌入变换
嵌入向量转换
要为在大语言模型中使用内容做准备,或者说为一般的自然语言处理做准备,一项必须完成的重要任务是将文本转换为数字表示,这也称为文本向量化。实现这种转换的一种方式是通过所谓的文本嵌入,即把文本转换为高维数值向量的过程。将文本表示为向量,可使计算机执行语义相似性搜索及其他高级操作。
Debezium 提供了一项内置功能,可将指定的文本字段转换为数值嵌入向量,并将生成的嵌入结果添加到事件记录中。嵌入推理会根据所配置提供商所提供的嵌入模型执行。Debezium 提供了多个嵌入模型提供商。
Debezium 可以使用单条消息转换(SMT)来生成嵌入向量。为了与不同的嵌入提供商交互,此嵌入转换采用了 langchain4j 框架。
| 嵌入转换要求 Java 21 或更高版本。 |
|---|
行为
嵌入转换以原始事件记录中的特定字段作为输入,并将这些字段的文本内容传递给已配置的嵌入模型进行推理。也就是说,该 SMT 会根据指定字段中包含的文本生成嵌入向量。生成的嵌入向量会追加到记录中,同时记录中也会保留原始的源字段。
源字段必须是字符串字段。嵌入字段的值是 32 位浮点数的向量。向量的大小取决于所选模型。为了提供嵌入的内部表示,Debezium 使用 FloatVector 数据类型。记录中嵌入字段的 schema 类型为 io.debezium.data.FloatVector。
源字段和嵌入字段的定义均支持嵌套结构,例如 after.product_description_embedding。
配置
要配置连接器以使用嵌入转换,请在连接器配置中添加以下几行:
transforms=embeddings,
transforms.embeddings.type=io.debezium.ai.embeddings.FieldToEmbedding必须至少指定一个字段作为嵌入(embedding)的输入。嵌入写入的目标字段并非必填;若未指定,消息值中将只包含嵌入本身。不过,建议指定嵌入的目标字段,例如:
transforms.embeddings.field.source=after.product
transforms.embeddings.field.embedding=after.product_embedding最后,你必须将模型提供商的 JAR 文件放入连接器类路径中,并配置该提供商。例如,对于 Ollama 提供商,请将 debezium-ai-embeddings-ollama-$VERSION.jar 添加到你的连接器类路径中,并将 Ollama 的 URL 和模型名称添加到连接器配置中,如下例所示:
transforms.embeddings.ollama.url=http://localhost:11434
transforms.embeddings.ollama.model.name=all-minilm以下示例展示了 Ollama 提供程序的完整配置可能的样子:
transforms=embeddings,
transforms.embeddings.type=io.debezium.ai.embeddings.FieldToEmbedding
transforms.embeddings.field.source=after.product
transforms.embeddings.field.embedding=after.product_embedding
transforms.embeddings.ollama.url=http://localhost:11434
transforms.embeddings.ollama.model.name=all-minilm常规配置选项
| 选项 | 默认值 | 说明 |
|---|---|---|
embeddings.field.source | 无默认值 | 指定源记录中用作嵌入输入的字段。指定字段的数据类型必须为 string。 |
embeddings.field.embedding | 无默认值 | 指定 SMT 添加到记录中、用于存放文本嵌入的字段名称。如果未指定该值,生成的记录将只包含嵌入值。 |
表 1. 嵌入 SMT 配置选项说明
模型提供方配置
Hugging Face
由 Hugging Face 上可用的模型提供的嵌入。
| 选项 | 默认值 | 描述 |
|---|---|---|
embeddings.huggingface.access.token | 无默认值 | Hugging Face 访问令牌。 |
embeddings.huggingface.model.name | 无默认值 | 嵌入模型的名称。使用 REST API 获取可用模型列表。请在 REST 调用中指定提供方,例如 Hugging Face 推理提供方。 |
embeddings.huggingface.baseUrl | https://api-inference.huggingface.co/ | Hugging Face 推理 API 的基础 URL。 |
embeddings.huggingface.operation.timeout.ms | 15000(15 秒) | 等待嵌入结果响应的最长时间,以毫秒为单位。 |
表 2. Hugging Face 嵌入的配置选项
| Hugging Face 已开始支持多种嵌入推理提供方,其中包括外部提供方。不过,LangChain4j 框架目前尚未支持外部提供方。因此,当前可用于 Debezium 的推理提供方只有 Hugging Face 这一个。 |
|---|
Ollama
支持 Ollama 服务器提供的任何模型。
| 选项 | 默认值 | 说明 |
|---|---|---|
embeddings.ollama.url | 无默认值 | Ollama 服务器的 URL,需包含端口号,例如 http://localhost:11434。 |
embeddings.ollama.model.name | 无默认值 | 嵌入模型的名称。 |
embeddings.ollama.operation.timeout.ms | 15000(15 秒) | 等待嵌入回复的最长时间,单位为毫秒。 |
表 3. Ollama 嵌入配置选项
ONNX MiniLM
提供 ONNX 进程内 all-minilm-l6-v2 模型,该模型已直接包含在 jar 文件中,除通用配置外无需其他配置。
该模型特别适合用于原型设计和测试,因为它不依赖任何外部基础设施,也不需要发出远程请求。
Voyage AI
由 Voyage AI 模型提供的嵌入向量。
| 选项 | 默认值 | 说明 |
|---|---|---|
embeddings.voyageai.access.token | 无默认值 | Voyage AI 访问令牌。 |
embeddings.voyageai.model.name | 无默认值 | 嵌入模型的名称。Voyage AI 模型列表请参见 Voyage AI 文本嵌入文档。 |
embeddings.voyageai.baseUrl | https://api.voyageai.com/v1/ | Voyage AI API 基础服务器地址。 |
embeddings.voyageai.operation.timeout.ms | 15000(15 秒) | 等待嵌入向量响应的最长等待时间,单位为毫秒。 |
表 4. Voyage AI 嵌入向量配置选项
评论
登录后参与评论
KnowForge