news 2026/4/23 12:27:43

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/23 13:54:21

Wan2.2-T2V-5B如何处理长时序依赖问题?运动推理机制剖析

Wan2.2-T2V-5B如何处理长时序依赖问题&#xff1f;运动推理机制剖析 在生成式AI迅猛发展的今天&#xff0c;视频生成正从“能出画面”迈向“动作合理”的新阶段。比起静态图像&#xff0c;视频多了一个时间维度——这看似只加了一维&#xff0c;实则让建模复杂度呈指数级上升。…

作者头像 李华
网站建设 2026/4/22 20:43:17

从Java全栈开发视角看微服务架构实践与技术选型

从Java全栈开发视角看微服务架构实践与技术选型 在当今互联网行业中&#xff0c;微服务架构已经成为主流的技术方案之一。作为一名拥有5年经验的Java全栈开发工程师&#xff0c;我曾参与多个大型分布式系统的搭建和优化工作。今天&#xff0c;我将分享一些我在实际项目中遇到的…

作者头像 李华
网站建设 2026/4/23 9:45:51

Conda environment.yml文件示例:快速启动Qwen-Image-Edit-2509

Conda environment.yml文件示例&#xff1a;快速启动Qwen-Image-Edit-2509 在电商、社交媒体和数字内容创作领域&#xff0c;图像更新的频率越来越高。一个品牌可能需要为同一款产品生成数十种语言版本的宣传图&#xff0c;或者为不同节日定制专属视觉风格。传统依赖Photoshop…

作者头像 李华
网站建设 2026/4/23 9:46:57

NS模拟器安装工具全攻略:ns-emu-tools让新手秒变高手

还在为NS模拟器的复杂安装流程而烦恼吗&#xff1f;ns-emu-tools作为一款专业的NS模拟器安装工具&#xff0c;带来一站式解决方案&#xff0c;让新手也能轻松上手。这款工具专为简化模拟器部署而设计&#xff0c;支持Yuzu和Ryujinx两大主流模拟器&#xff0c;从环境检测到版本管…

作者头像 李华
网站建设 2026/4/23 9:50:06

3分钟搞定Beyond Compare 5永久授权:完整密钥生成指南

3分钟搞定Beyond Compare 5永久授权&#xff1a;完整密钥生成指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的授权问题而烦恼吗&#xff1f;作为文件对比和代码审查…

作者头像 李华
网站建设 2026/4/23 9:46:55

Joy-Con Toolkit终极指南:免费开源手柄控制工具完全解析

Joy-Con Toolkit是一款功能强大的开源手柄控制工具&#xff0c;专门为任天堂Switch的Joy-Con手柄提供全面的自定义和控制功能。这款工具不仅解决了手柄常见的漂移问题&#xff0c;还支持按键映射、传感器校准和颜色配置等高级功能&#xff0c;让普通玩家也能轻松优化游戏体验。…

作者头像 李华