跳到主要内容

嵌入模型 API

Deepseek 3.2 中英对照 Embedding Models Embeddings Model API

嵌入(Embeddings)是文本、图像或视频的数值表示,用于捕捉输入之间的关系。

嵌入通过将文本、图像和视频转换为浮点数数组(称为向量)来工作。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度称为向量的维度。

通过计算两段文本向量表示之间的数值距离,应用程序可以判断生成这些嵌入向量的对象之间的相似程度。

EmbeddingModel 接口专为在人工智能和机器学习中简化嵌入模型的集成而设计。其主要功能是将文本转换为数值向量,通常称为嵌入向量。这些嵌入向量在语义分析和文本分类等多种任务中至关重要。

EmbeddingModel 接口的设计主要围绕两大核心目标展开:

  • 可移植性:该接口确保了在各种嵌入模型之间的轻松适配性。它允许开发者以最小的代码改动在不同的嵌入技术或模型之间切换。这一设计理念与Spring的模块化和可互换性哲学相契合。

  • 简洁性:EmbeddingModel简化了将文本转换为嵌入向量的过程。通过提供像embed(String text)embed(Document document)这样直接的方法,它消除了处理原始文本数据和嵌入算法的复杂性。这一设计选择使开发者,特别是AI领域的新手,能够更容易地在他们的应用中使用嵌入向量,而无需深入研究底层机制。

API 概览

嵌入模型 API 构建于通用的 Spring AI 模型 API 之上,后者是 Spring AI 库的一部分。因此,EmbeddingModel 接口扩展了 Model 接口,该接口提供了一套用于与 AI 模型交互的标准方法。EmbeddingRequestEmbeddingResponse 类分别继承自 ModelRequestModelResponse,用于封装嵌入模型的输入和输出。

Embedding API 进而被更高层级的组件所使用,用于实现针对特定嵌入模型的嵌入模型,例如 OpenAI、Titan、Azure OpenAI、Ollie 以及其他模型。

下图展示了 Embedding API 及其与 Spring AI 模型 API 和嵌入模型的关系:

embeddings api

EmbeddingModel

本节提供有关 EmbeddingModel 接口及相关类的使用指南。

public interface EmbeddingModel extends Model<EmbeddingRequest, EmbeddingResponse> {

@Override
EmbeddingResponse call(EmbeddingRequest request);

/**
* Embeds the given document's content into a vector.
* @param document the document to embed.
* @return the embedded vector.
*/
float[] embed(Document document);

/**
* Embeds the given text into a vector.
* @param text the text to embed.
* @return the embedded vector.
*/
default float[] embed(String text) {
Assert.notNull(text, "Text must not be null");
return this.embed(List.of(text)).iterator().next();
}

/**
* Embeds a batch of texts into vectors.
* @param texts list of texts to embed.
* @return list of list of embedded vectors.
*/
default List<float[]> embed(List<String> texts) {
Assert.notNull(texts, "Texts must not be null");
return this.call(new EmbeddingRequest(texts, EmbeddingOptions.EMPTY))
.getResults()
.stream()
.map(Embedding::getOutput)
.toList();
}

/**
* Embeds a batch of texts into vectors and returns the {@link EmbeddingResponse}.
* @param texts list of texts to embed.
* @return the embedding response.
*/
default EmbeddingResponse embedForResponse(List<String> texts) {
Assert.notNull(texts, "Texts must not be null");
return this.call(new EmbeddingRequest(texts, EmbeddingOptions.EMPTY));
}

/**
* @return the number of dimensions of the embedded vectors. It is generative
* specific.
*/
default int dimensions() {
return embed("Test String").size();
}

}

嵌入方法提供多种选项,用于将文本转换为嵌入向量,支持单个字符串、结构化的Document对象或批量文本的处理。

提供了多种快捷方法用于文本嵌入,包括 embed(String text) 方法,该方法接收单个字符串并返回对应的嵌入向量。所有快捷方法均围绕 call 方法实现,该方法是调用嵌入模型的主要方法。

通常,嵌入会返回一个浮点数列表,以数值向量格式表示嵌入。

embedForResponse 方法提供更全面的输出,可能包含关于嵌入的额外信息。

dimensions 方法是开发者快速确定嵌入向量大小的便捷工具,这对于理解嵌入空间以及后续处理步骤至关重要。

EmbeddingRequest

EmbeddingRequest 是一个 ModelRequest,它接收一个文本对象列表以及可选的嵌入请求选项。以下清单展示了 EmbeddingRequest 类的截断版本,其中不包含构造函数和其他实用方法:

public class EmbeddingRequest implements ModelRequest<List<String>> {
private final List<String> inputs;
private final EmbeddingOptions options;
// other methods omitted
}

EmbeddingResponse

EmbeddingResponse 类的结构如下:

public class EmbeddingResponse implements ModelResponse<Embedding> {

private List<Embedding> embeddings;
private EmbeddingResponseMetadata metadata = new EmbeddingResponseMetadata();
// other methods omitted
}

EmbeddingResponse 类承载AI模型的输出结果,其中每个 Embedding 实例包含来自单个文本输入的向量数据。

EmbeddingResponse类还包含一个关于AI模型响应的EmbeddingResponseMetadata元数据。

Embedding

Embedding 表示单个嵌入向量。

public class Embedding implements ModelResult<float[]> {
private float[] embedding;
private Integer index;
private EmbeddingResultMetadata metadata;
// other methods omitted
}

可用实现

在内部,各种 EmbeddingModel 实现使用不同的底层库和 API 来执行嵌入任务。以下是 EmbeddingModel 的一些可用实现:

章节总结