Spring AI 学习之路 探索Spring AI中的嵌入模型(Embedding Model)

在现代人工智能和机器学习应用中,嵌入模型(Embedding Model)扮演着至关重要的角色。嵌入模型能够将高维度的数据(如文本、图像等)转换为低维度的向量表示,从而使得这些数据能够在机器学习模型中被有效地处理和利用。Spring AI作为一个强大的AI框架,提供了对嵌入模型的全面支持。本文将深入探讨Spring AI中的嵌入模型,并通过代码示例展示如何使用它们。

什么是嵌入模型?

嵌入模型是一种将离散数据(如单词、句子、图像等)转换为连续向量空间中的向量的技术。这些向量不仅能够捕捉到数据的语义信息,还能够在向量空间中进行数学运算,从而揭示数据之间的关系。例如,通过嵌入模型,我们可以将单词“king”转换为一个向量,然后通过向量运算得到“queen”的向量表示。

Spring AI中的嵌入模型

Spring AI提供了多种嵌入模型的实现,包括预训练模型和自定义模型。这些模型可以用于各种任务,如文本分类、情感分析、图像识别等。Spring AI的嵌入模型接口设计得非常灵活,使得开发者可以轻松地集成和使用这些模型。

API介绍

EmbeddingModel

在Spring AI中,EmbeddingModel 是一个核心接口,用于表示嵌入模型。它定义了如何将输入数据(如文本)转换为嵌入向量。以下是 EmbeddingModel 接口的主要方法:

public interface EmbeddingModel extends Model<EmbeddingRequest, EmbeddingResponse> {@OverrideEmbeddingResponse call(EmbeddingRequest request);/*** 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");List<float[]> response = this.embed(List.of(text));return response.iterator().next();}/*** Embeds the given document's content into a vector.* @param document the document to embed.* @return the embedded vector.*/float[] embed(Document document);/*** Embeds a batch of texts into vectors.* @param texts list of texts to embed.* @return 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, EmbeddingOptionsBuilder.builder().build())).getResults().stream().map(Embedding::getOutput).toList();}/*** Embeds a batch of {@link Document}s into vectors based on a* {@link BatchingStrategy}.* @param documents list of {@link Document}s.* @param options {@link EmbeddingOptions}.* @param batchingStrategy {@link BatchingStrategy}.* @return a list of float[] that represents the vectors for the incoming* {@link Document}s. The returned list is expected to be in the same order of the* {@link Document} list.*/default List<float[]> embed(List<Document> documents, EmbeddingOptions options, BatchingStrategy batchingStrategy) {Assert.notNull(documents, "Documents must not be null");List<float[]> embeddings = new ArrayList<>(documents.size());List<List<Document>> batch = batchingStrategy.batch(documents);for (List<Document> subBatch : batch) {List<String> texts = subBatch.stream().map(Document::getText).toList();EmbeddingRequest request = new EmbeddingRequest(texts, options);EmbeddingResponse response = this.call(request);for (int i = 0; i < subBatch.size(); i++) {embeddings.add(response.getResults().get(i).getOutput());}}Assert.isTrue(embeddings.size() == documents.size(),"Embeddings must have the same number as that of the documents");return embeddings;}/*** 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, EmbeddingOptionsBuilder.builder().build()));}/*** Get the number of dimensions of the embedded vectors. Note that by default, this* method will call the remote Embedding endpoint to get the dimensions of the* embedded vectors. If the dimensions are known ahead of time, it is recommended to* override this method.* @return the number of dimensions of the embedded vectors.*/default int dimensions() {return embed("Test String").length;}}

2. EmbeddingRequest 和 EmbeddingResponse

EmbeddingRequestEmbeddingResponse 是用于处理嵌入请求和响应的类。
EmbeddingRequest: 包含一个或多个输入文本,用于生成嵌入向量。
EmbeddingResponse: 包含生成的嵌入向量。

public class EmbeddingRequest implements ModelRequest<List<String>> {private final List<String> inputs;private final EmbeddingOptions options;...
}
public class EmbeddingResponse implements ModelResponse<Embedding> {/*** Embedding data.*/private final List<Embedding> embeddings;/*** Embedding metadata.*/private final EmbeddingResponseMetadata metadata;...}

3. Embedding 类

Embedding 类表示一个嵌入向量,通常是一个浮点数数组。

public class Embedding implements ModelResult<float[]> {private float[] embedding;private Integer index;private EmbeddingResultMetadata metadata;...
}

使用阿里的 EmbeddingModel 进行演示

我们在之前的例子中已经引入了阿里的服务,我们可以通过实现 EmbeddingModel 接口来集成这个服务。以下是一个示例:

public class EmbeddingController {// 阿里嵌入模型private final EmbeddingModel embeddingModel;/*** 将句子向量化* @param prompt 用户提问* @return 向量值*/@GetMapping("embed")public List<float[]> embed(@RequestParam String prompt) {// 文本嵌入float[] embed = embeddingModel.embed(prompt);return Arrays.asList(embed);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893875.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子 smart 700 人机界面 HMI erwa.cn二娃备忘

情况是这样,触摸屏型号为smart 700IE,以前的程序已经确定丢失了,已经是两年前其他人搞的程序了。目前想要将此smart 700IE触摸屏程序得出来,该怎么实现,请详细告知,非常感谢 最佳答案 Smart Panels 均不支持“回传”功能,只支持“备份”“恢复”功能。 那“回传”与“…

文件同步备份软件,让文件同步更安全更稳定!

在数字化时代,数据已然成为企业的核心资产,而确保服务器之间文件的高效同步,是保障数据一致性、维持业务连续性的关键所在。无论是大型企业构建多数据中心的复杂架构,还是分布式系统力求各节点数据的统一,文件同步备份软件都发挥着无可替代的作用。它就像是企业数据流转的…

无法加载kingdee k3 cloud erp V7.2的许可文件,许可文件可能被篡改,请联系管理员

原因:如下图,正式补丁在安装时出现了异常导致。 解决:重新安装正式补丁以及临时补丁。

2025年最火爆的5款跨网文件安全交换系统优缺点对比

跨网文件安全交换系统主要用于在不同网络环境间安全传输文件,确保数据的机密性、完整性和可用性。 能解决跨网文件传输的方式有很多,比如FTP/FTPS、SFTP、云存储服务、P2P文件共享以及Ftrans Ferry跨网文件安全交换系统各有优缺点。以下是它们的详细对比: 一、FTP/FTPS优点:…

计算两个经纬点的距离

php cookbook有一个计算两个经纬点的例子,代码就照着抄了一遍,多次检查,多次运行的结果都是略小于预期值的一半,楞是费了一番,才发现是经纬度参数的顺序反了,在英文里,是纬度在前,经度在后,不似耳熟的东经多少多少,北纬多少多少。既然到了这了,也学着梳理一下计算经…

如何破局大文件远程跨国传输难题,实现业务高增长?

在全球化浪潮中,跨国合作已成为众多行业的常态。无论是医疗影像、基建数据、影视制作,还是跨国企业的日常运营,大文件远程跨国传输的需求日益增长。然而,网络延迟、带宽限制、数据安全等问题,常常让这一过程变得低效且充满风险。如何实现高效、安全、稳定的大文件远程跨国…

2023陇剑杯

数据分析-SS 1.黑客是使用什么漏洞来拿下root权限的 分析使用系统命令id之前的流量包,发现奇怪的传输上网搜索发现是CVE-2022-22965 2.黑客反弹shell的ip和端口是什么 分析后面的流量包,查看返回包明文192.168.43.128:2333 3.黑客的病毒名称是什么? 解压文件系统按照创建时间…

VMware Workstation 17.6.3 Pro macOS Unlocker OEM BIOS 2.7 for Linux - 在 Linux 上运行 macOS Sequoia

VMware Workstation 17.6.3 Pro macOS Unlocker & OEM BIOS 2.7 for Linux - 在 Linux 上运行 macOS SequoiaVMware Workstation 17.6.3 Pro macOS Unlocker & OEM BIOS 2.7 for Linux 在 Linux 上运行 macOS Sequoia 请访问原文链接:https://sysin.org/blog/vmware-w…

Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板

Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板Zabbix 7.0 LTS OVF (build with LNMP based on Rocky 8.10) - VMware 虚拟机模板 Zabbix 7.0 LTS | 企业级开源监控解决方案 请访问原文链接:https://sysin.org/blog/zabbix-7-ovf/ 查看最新版…

上班族的DeepSeek指南,厦门大学DeepSeek手册Ⅲ《DeepSeek企业应用实践》

上班族的DeepSeek指南,厦门大学DeepSeek手册Ⅲ《DeepSeek企业应用实践》随着DeepSeek的普及,无论是高校师生、上班族的小伙伴、政府工作人员还是面向社会大众人群,都能在各大高校的一系列手册中找到自己想要学习、了解的内容,这些手册面向大众群体深入浅出地讲解大模型概念…

买了CRM却不会用?5步教你从入门到精通

先问个问题:你的客户资料是不是还散落在Excel表里? 是不是每次找个客户信息都要翻半天? 销售跟进靠聊天记录,客户流失了都不知道咋回事?如果你有这些痛点,那么你可以试一试CRM系统了! CRM(客户关系管理系统)不是花里胡哨的工具,而是帮你提升业绩、减少客户流失、提高…

读DAMA数据管理知识体系指南10数据建模(中)

读DAMA数据管理知识体系指南10数据建模(中)1. 域 1.1. 在数据建模中,域(Domain)代表某一属性可被赋予的全部可能取值 1.2. 域可以用不同的方式来表达 1.3. 域提供了一种将属性特征标准化的方法 1.4. 域中所有的值都为有效的值1.4.1. 不在域中的值被称为无效的值1.4.2. 属性中…