最新快照版本请使用Spring AI 1.1.0spring-doc.cadn.net.cn

嵌入模型API

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

嵌入通过将文本、图像和视频转换为浮点数组,称为向量来实现。 这些矢量旨在捕捉文本、图片和视频的含义。 嵌入数组的长度称为向量的维度。spring-doc.cadn.net.cn

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

嵌入模型界面设计用于与嵌入模型的AI和机器学习直接集成。 其主要功能是将文本转换为数值向量,通常称为嵌入。 这些嵌入对于语义分析和文本分类等多种任务至关重要。spring-doc.cadn.net.cn

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

  • 可移植性:该界面确保了在各种嵌入模型间的轻松适应性。 它允许开发者以最小的代码修改在不同的嵌入技术或模型之间切换。 这种设计与Spring关于模块化和可更换性的理念相契合。spring-doc.cadn.net.cn

  • 简洁性:EmbeddingModel简化了将文本转换为嵌入的过程。 通过提供像这样的简单方法来实现嵌入(字符串文本)嵌入(文档文档)它消除了处理原始文本数据和嵌入算法的复杂性。这一设计选择使开发者,尤其是新手AI用户,更容易在应用中利用嵌入,而无需深入底层机制。spring-doc.cadn.net.cn

API 概述

嵌入模型 API 建立在通用的 Spring AI 模型 API 之上,后者是 Spring AI 库的一部分。 因此,嵌入模型接口扩展了界面,提供了一套标准的方法用于与AI模型交互。这嵌入请求嵌入响应类别从ModelRequest模型响应分别用于封装嵌入模型的输入和输出。spring-doc.cadn.net.cn

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

下图展示了嵌入 API 及其与 Spring AI 模型 API 和嵌入模型的关系:spring-doc.cadn.net.cn

嵌入模型

本节提供了关于嵌入模型接口及相关类。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();
	}

}

嵌入方法提供了多种将文本转换为嵌入、容纳单字符串、结构化的选项公文对象,或文本批次。spring-doc.cadn.net.cn

提供了多种嵌入文本的快捷方式,包括嵌入(字符串文本)方法,取单个字符串返回对应的嵌入向量。 所有快捷方式都围绕方法,是调用嵌入模型的主要方法。spring-doc.cadn.net.cn

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

嵌入响应方法提供更全面的输出,可能包含关于嵌入的额外信息。spring-doc.cadn.net.cn

尺寸法是开发者快速确定嵌入向量大小的便捷工具,这对于理解嵌入空间和后续处理步骤非常重要。spring-doc.cadn.net.cn

嵌入请求

嵌入请求ModelRequest它需要文本对象列表和可选的嵌入请求选项。 以下列表展示了 EmbeddingRequest 类的截断版本,不包括构造函数和其他实用方法:spring-doc.cadn.net.cn

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

嵌入响应

结构嵌入响应类别如下:spring-doc.cadn.net.cn

public class EmbeddingResponse implements ModelResponse<Embedding> {

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

嵌入响应类存储AI模型的输出,每个嵌入包含单一文本输入的结果向量数据的实例。spring-doc.cadn.net.cn

嵌入响应类别还携带A嵌入响应元数据关于AI模型响应的元数据。spring-doc.cadn.net.cn

嵌入

嵌入表示单个嵌入矢量。spring-doc.cadn.net.cn

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