news 2026/6/23 21:22:23

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/6/23 19:13:55

C# WPF界面设计:为ACE-Step打造桌面级音乐创作软件

C# WPF界面设计&#xff1a;为ACE-Step打造桌面级音乐创作软件 在AI技术不断渗透创意产业的今天&#xff0c;普通人也能“一键作曲”已不再是科幻场景。像ACE-Step这样的开源AI音乐生成模型&#xff0c;正让文本描述瞬间转化为旋律成为现实——只需输入“一段轻快的钢琴曲&…

作者头像 李华
网站建设 2026/6/23 19:13:14

Res-Downloader终极指南:3步搞定全网资源批量下载

Res-Downloader终极指南&#xff1a;3步搞定全网资源批量下载 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/6/23 17:36:20

Linux 项目托管 `git`

摘要 1、为什么每一个 Linux 开发者都必须掌握 Git 在 Linux 的世界里&#xff0c;真正的开发从来不是 “写完代码就结束”。 代码只是起点&#xff0c;而 如何管理、协作、演进、回溯和交付代码&#xff0c;才决定了一个项目能走多远。 如果说 gcc / g 教会你如何把源代码变成…

作者头像 李华
网站建设 2026/6/23 19:06:44

终极OBS-NDI配置指南:5分钟解决视频流问题

终极OBS-NDI配置指南&#xff1a;5分钟解决视频流问题 【免费下载链接】obs-ndi NewTek NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 当你在Windows系统上安装OBS-NDI插件后启动OBS时&#xff0c;如果遇到"NDI Runtime N…

作者头像 李华
网站建设 2026/6/22 22:56:29

HunyuanVideo-Foley音效生成引擎的技术架构剖析:从输入到输出全流程

HunyuanVideo-Foley音效生成引擎的技术架构剖析&#xff1a;从输入到输出全流程 在短视频日均产量突破千万条的今天&#xff0c;一个现实问题摆在内容创作者面前&#xff1a;如何让每一段画面都“声临其境”&#xff1f;传统音效制作依赖人工逐帧匹配环境音、动作音效和背景音乐…

作者头像 李华
网站建设 2026/6/23 19:35:54

HuggingFace模型卡撰写规范提升Qwen3-VL-30B曝光率

HuggingFace模型卡撰写规范提升Qwen3-VL-30B曝光率 在AI进入多模态融合的今天&#xff0c;一个高性能视觉语言模型能否被广泛采用&#xff0c;早已不只取决于它的参数规模或基准测试分数。真正决定其命运的&#xff0c;往往是开发者第一次在Hugging Face上看到它时——那张模型…

作者头像 李华