news 2026/4/18 9:56:37

43_Spring AI 干货笔记之 PostgresML 嵌入模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
43_Spring AI 干货笔记之 PostgresML 嵌入模型

一、PostgresML 嵌入模型

Spring AI 支持 PostgresML 文本嵌入模型。

嵌入是文本的一种数值表示形式,用于将单词和句子表示为向量(即数字数组)。通过使用距离度量比较数值向量的相似性,嵌入可用于查找相似的文本片段;此外,由于大多数算法无法直接使用文本,嵌入也可用作其他机器学习模型的输入特征。

PostgresML 内部可使用许多预训练的大型语言模型从文本生成嵌入。您可以在 Hugging Face 上浏览所有可用 模型,以找到最适合的解决方案。

二、添加仓库和 BOM

Spring AI 的构件发布在 Maven Central 和 Spring Snapshot 仓库中。请参阅 构件仓库 部分,将这些仓库添加到您的构建系统中。

为便于依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用统一版本的 Spring AI。请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建系统中。

三、自动配置

Spring AI 的自动配置和启动器模块的构件名称发生了重大变化。更多信息请参阅升级说明。

Spring AI 为 Azure PostgresML 嵌入模型提供了 Spring Boot 自动配置。要启用它,请在项目的 Maven pom.xml 文件中添加以下依赖:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-postgresml-embedding</artifactId></dependency>

或在您的 Gradle build.gradle 构建文件中添加:

dependencies{implementation'org.springframework.ai:spring-ai-starter-model-postgresml-embedding'}

请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。

使用 spring.ai.postgresml.embedding.options.* 属性来配置您的 PostgresMlEmbeddingModel。

嵌入属性

现在通过前缀为 spring.ai.model.embedding 的顶级属性来配置嵌入自动配置的启用和禁用。

  • 启用:spring.ai.model.embedding=postgresml(默认已启用)

  • 禁用:spring.ai.model.embedding=none(或任何与 postgresml 不匹配的值)

此项更改是为了支持配置多个模型。

前缀 spring.ai.postgresml.embedding 是用于配置 PostgresML 嵌入的 EmbeddingModel 实现的属性前缀。

所有以 spring.ai.postgresml.embedding.options 为前缀的属性,都可以在运行时通过向 EmbeddingRequest 调用添加特定于请求的运行时选项来覆盖。

四、运行时选项

使用 PostgresMlEmbeddingOptions.java 来配置 PostgresMlEmbeddingModel 的选项,例如要使用的模型等。

在启动时,您可以将 PostgresMlEmbeddingOptions 传递给 PostgresMlEmbeddingModel 构造函数,以配置用于所有嵌入请求的默认选项。

在运行时,您可以在 EmbeddingRequest 中使用 PostgresMlEmbeddingOptions 来覆盖默认选项。

例如,为特定请求覆盖默认模型名称:

EmbeddingResponseembeddingResponse=embeddingModel.call(newEmbeddingRequest(List.of("Hello World","World is big and salvation is near"),PostgresMlEmbeddingOptions.builder().transformer("intfloat/e5-small").vectorType(VectorType.PG_ARRAY).kwargs(Map.of("device","gpu")).build()));

五、示例控制器

这将创建一个 EmbeddingModel 实现,您可以将其注入到您的类中。以下是一个使用 EmbeddingModel 实现的简单 @Controller 类示例。

spring.ai.postgresml.embedding.options.transformer=distilbert-base-uncased spring.ai.postgresml.embedding.options.vectorType=PG_ARRAY spring.ai.postgresml.embedding.options.metadataMode=EMBED spring.ai.postgresml.embedding.options.kwargs.device=cpu
@RestControllerpublicclassEmbeddingController{privatefinalEmbeddingModelembeddingModel;@AutowiredpublicEmbeddingController(EmbeddingModelembeddingModel){this.embeddingModel=embeddingModel;}@GetMapping("/ai/embedding")publicMapembed(@RequestParam(value="message",defaultValue="Tell me a joke")Stringmessage){EmbeddingResponseembeddingResponse=this.embeddingModel.embedForResponse(List.of(message));returnMap.of("embedding",embeddingResponse);}}

六、手动配置

如果不使用 Spring Boot 自动配置,您可以手动创建 PostgresMlEmbeddingModel。为此,请在项目的 Maven pom.xml 文件中添加 spring-ai-postgresml 依赖:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-postgresml</artifactId></dependency>

或在您的 Gradle build.gradle 构建文件中添加:

dependencies{implementation'org.springframework.ai:spring-ai-postgresml'}

请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。

接下来,创建一个 PostgresMlEmbeddingModel 实例,并用它来计算两个输入文本的相似度:

varjdbcTemplate=newJdbcTemplate(dataSource);// 您的 postgresml 数据源PostgresMlEmbeddingModelembeddingModel=newPostgresMlEmbeddingModel(this.jdbcTemplate,PostgresMlEmbeddingOptions.builder().transformer("distilbert-base-uncased")// huggingface 转换器模型名称.vectorType(VectorType.PG_VECTOR)// PostgreSQL 中的向量类型.kwargs(Map.of("device","cpu"))// 可选参数.metadataMode(MetadataMode.EMBED)// 文档元数据模式.build());embeddingModel.afterPropertiesSet();// 初始化 jdbc 模板和数据库EmbeddingResponseembeddingResponse=this.embeddingModel.embedForResponse(List.of("Hello World","World is big and salvation is near"));

手动创建时,您必须在设置属性后、使用客户端之前调用 afterPropertiesSet()。将 PostgresMlEmbeddingModel 创建为 @Bean 会更方便(也更推荐)。这样您就不必手动调用 afterPropertiesSet():

@BeanpublicEmbeddingModelembeddingModel(JdbcTemplatejdbcTemplate){returnnewPostgresMlEmbeddingModel(jdbcTemplate,PostgresMlEmbeddingOptions.builder().....build());}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:42:07

Joy-Con Toolkit 手柄控制指南:从入门到精通的全方位实战指南

还在为Joy-Con手柄的漂移问题烦恼吗&#xff1f;想要彻底释放手柄的全部潜能吗&#xff1f;Joy-Con Toolkit正是你需要的终极解决方案。这款开源工具专为任天堂Joy-Con手柄深度定制&#xff0c;通过完全开放的代码架构&#xff0c;让普通玩家也能轻松实现专业级的手柄控制。 【…

作者头像 李华
网站建设 2026/4/18 8:38:35

AdGuardHomeRules:构建企业级网络防护体系的终极解决方案

AdGuardHomeRules&#xff1a;构建企业级网络防护体系的终极解决方案 【免费下载链接】AdGuardHomeRules 高达百万级规则&#xff01;由我原创&整理的 AdGuardHomeRules ADH广告拦截过滤规则&#xff01;打造全网最强最全规则集 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/4/18 7:37:44

大数据领域分布式存储的智能调度算法

大数据领域分布式存储的智能调度算法关键词&#xff1a;大数据、分布式存储、智能调度算法、数据均衡、性能优化摘要&#xff1a;本文聚焦于大数据领域分布式存储的智能调度算法。首先介绍了大数据分布式存储的背景&#xff0c;包括其目的、适用读者以及文档结构。接着阐述了分…

作者头像 李华
网站建设 2026/4/18 8:09:36

Java 还是 Go?——从工程规模到长期演进的技术选型思考

在系统架构设计中&#xff0c;“选 Java 还是 Go”并不是语言偏好问题&#xff0c;而是一个组织能力、系统形态与未来成本的综合决策。 本文将从工程复杂度、运行模型、生态成熟度、团队结构与长期演进等维度&#xff0c;系统分析 Java 与 Go 的适用场景&#xff0c;并给出明确…

作者头像 李华
网站建设 2026/4/18 7:39:41

Vue-Office实战指南:Web端Office文件预览的终极解决方案

Vue-Office实战指南&#xff1a;Web端Office文件预览的终极解决方案 【免费下载链接】vue-office 项目地址: https://gitcode.com/gh_mirrors/vu/vue-office 还在为Web项目中集成Office文件预览功能而烦恼吗&#xff1f;Vue-Office作为一款专为Vue生态打造的文件预览组…

作者头像 李华
网站建设 2026/4/18 7:37:08

HunyuanVideo-Foley中文文档首发:比官方英文更易懂的技术指南

HunyuanVideo-Foley 中文技术指南&#xff1a;从原理到落地的深度解析 在短视频日均产量突破千万条的今天&#xff0c;一个现实问题摆在内容创作者面前&#xff1a;如何让一段没有环境音的街景视频听起来“像真的”&#xff1f;又该如何为一只跳跃的猫咪自动生成恰到好处的脚步…

作者头像 李华