获取最新的快照版本,请使用 Spring AI 1.1.3spring-doc.cadn.net.cn

嵌入模型 API

嵌入是文本、图像或视频的数值表示,用于捕捉输入之间的关系。spring-doc.cadn.net.cn

嵌入式技术通过将文本、图像和视频转换为浮点数数组来工作,这些数组被称为向量。 这些向量旨在捕捉文本、图像和视频的意义。 嵌入数组的长度称为向量的维度。spring-doc.cadn.net.cn

通过计算两段文本向量之间的数值距离,应用程序可以确定生成这些向量的对象之间的相似性。spring-doc.cadn.net.cn

The EmbeddingModel interface is designed for straightforward integration with embedding models in AI and machine learning. Its primary function is to convert text into numerical vectors, commonly referred to as embeddings. These embeddings are crucial for various tasks such as semantic analysis and text classification.spring-doc.cadn.net.cn

EmbeddingModel 接口的设计围绕两个主要目标展开:spring-doc.cadn.net.cn

  • 可移植性:此接口确保在各种嵌入模型之间轻松适配。 它允许开发人员在不同的嵌入技术或模型之间进行切换,而只需进行最少的代码更改。 这种设计符合 Spring 的模块化和可互换性理念。spring-doc.cadn.net.cn

  • 简洁性:EmbeddingModel简化了将文本转换为嵌入向量的过程。 通过提供诸如embed(String text)embed(Document document)这样直观的方法,它消除了处理原始文本数据和嵌入算法的复杂性。这一设计选择使开发者,尤其是那些刚接触AI的开发者,能够在无需深入研究底层机制的情况下,更轻松地在其应用中使用嵌入向量。spring-doc.cadn.net.cn

API概述

嵌入模型 API 建立在通用的 Spring AI 模型 API 之上,该 API 是 Spring AI 库的一部分。 因此,EmbeddingModel 接口扩展了 Model 接口,该接口提供了一组用于与 AI 模型交互的标准方法。EmbeddingRequestEmbeddingResponse 类分别从 ModelRequestModelResponse 扩展而来,用于封装嵌入模型的输入和输出。spring-doc.cadn.net.cn

嵌入 API 又被更高级别的组件用于为特定的嵌入模型实现嵌入模型,例如 OpenAI、Titan、Azure OpenAI、Ollie 等。spring-doc.cadn.net.cn

下图展示了 Embedding API 与其与 Spring AI Model API 和 Embedding Models 的关系:spring-doc.cadn.net.cn

嵌入模型

本节提供EmbeddingModel接口及其相关类的指南。spring-doc.cadn.net.cn

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对象或文本批次。spring-doc.cadn.net.cn

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

通常,嵌入会返回一个浮点数列表,以数值向量的形式表示嵌入。spring-doc.cadn.net.cn

The embedForResponse method provides a more comprehensive output, potentially including additional information about the embeddings.spring-doc.cadn.net.cn

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

嵌入请求

The EmbeddingRequest is a ModelRequest that takes a list of text objects and optional embedding request options. The following listing shows a truncated version of the EmbeddingRequest class, excluding constructors and other utility methods:spring-doc.cadn.net.cn

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

嵌入响应

EmbeddingResponse 类的结构如下:spring-doc.cadn.net.cn

public class EmbeddingResponse implements ModelResponse<Embedding> {

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

EmbeddingResponse 类保存 AI 模型的输出,每个 Embedding 实例包含来自单个文本输入的结果向量数据。spring-doc.cadn.net.cn

EmbeddingResponse 类同样携带有关AI模型响应的 EmbeddingResponseMetadata 元数据信息。spring-doc.cadn.net.cn

嵌入

The Embedding represents a single embedding vector.spring-doc.cadn.net.cn

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