news 2026/5/28 15:21:04

42_Spring AI 干货笔记之 OpenAI 嵌入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
42_Spring AI 干货笔记之 OpenAI 嵌入

一、OpenAI 嵌入

Spring AI 支持 OpenAI 的文本嵌入模型。OpenAI 的文本嵌入用于衡量文本字符串之间的相关性。嵌入是一个浮点数向量(列表)。两个向量之间的距离衡量它们的相关性。距离小表示相关性高,距离大表示相关性低。

二、先决条件

您需要创建 OpenAI 的 API 来访问其嵌入模型。

  • 在 OpenAI 注册页面 创建账户。

  • 在 API 密钥页面 生成令牌。

Spring AI 项目定义了一个名为 spring.ai.openai.api-key 的配置属性,您应将其设置为从 openai.com 获取的 API 密钥值。

您可以在 application.properties 文件中设置此配置属性:

spring.ai.openai.api-key=<your-openai-api-key>

为了在处理敏感信息(如 API 密钥)时增强安全性,您可以使用 Spring 表达式语言(SpEL)来引用环境变量:

# 在 application.yml 中spring:ai:openai:api-key:${OPENAI_API_KEY}
# 在您的环境或 .env 文件中exportOPENAI_API_KEY=<your-openai-api-key>

您也可以在应用程序代码中以编程方式设置此配置:

// 从安全源或环境变量检索 API 密钥StringapiKey=System.getenv("OPENAI_API_KEY");

2.1 添加仓库和 BOM

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

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

三、自动配置

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

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

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

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

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

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

四、嵌入属性

4.1 重试属性

前缀 spring.ai.retry 用作属性前缀,用于配置 OpenAI 嵌入模型的重试机制。

4.2 连接属性

前缀 spring.ai.openai 用作属性前缀,用于连接到 OpenAI。

对于属于多个组织的用户(或通过其旧版用户 API 密钥访问其项目),您可以选择指定哪个组织和项目用于 API 请求。来自这些 API 请求的使用量将计入指定组织和项目的使用量。

4.3 配置属性

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

  • 要启用:spring.ai.model.embedding=openai(默认启用)

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

进行此更改是为了允许配置多个模型。

前缀 spring.ai.openai.embedding 是用于配置 OpenAI 的 EmbeddingModel 实现的属性前缀。

您可以为 ChatModel 和 EmbeddingModel 实现覆盖通用的 spring.ai.openai.base-url 和 spring.ai.openai.api-key。如果设置了 spring.ai.openai.embedding.base-url 和 spring.ai.openai.embedding.api-key 属性,则它们优先于通用属性。类似地,如果设置了 spring.ai.openai.chat.base-url 和 spring.ai.openai.chat.api-key 属性,则它们优先于通用属性。如果您想为不同模型和不同模型端点使用不同的 OpenAI 账户,这会很有用。

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

五、运行时选项

OpenAiEmbeddingOptions.java 提供了 OpenAI 的配置,例如要使用的模型等。

默认选项也可以使用 spring.ai.openai.embedding.options 属性进行配置。

在启动时,使用 OpenAiEmbeddingModel 构造函数来设置用于所有嵌入请求的默认选项。在运行时,您可以使用 OpenAiEmbeddingOptions 实例作为 EmbeddingRequest 的一部分来覆盖默认选项。

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

EmbeddingResponseembeddingResponse=embeddingModel.call(newEmbeddingRequest(List.of("Hello World","World is big and salvation is near"),OpenAiEmbeddingOptions.builder().model("Different-Embedding-Model-Deployment-Name").build()));

六、示例控制器

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

spring.ai.openai.api-key=YOUR_API_KEY spring.ai.openai.embedding.options.model=text-embedding-ada-002
@RestControllerpublicclassEmbeddingController{privatefinalEmbeddingModelembeddingModel;@AutowiredpublicEmbeddingController(EmbeddingModelembeddingModel){this.embeddingModel=embeddingModel;}@GetMapping("/ai/embedding")publicMapembed(@RequestParam(value="message",defaultValue="给我讲个笑话")Stringmessage){EmbeddingResponseembeddingResponse=this.embeddingModel.embedForResponse(List.of(message));returnMap.of("embedding",embeddingResponse);}}

七、手动配置

如果不使用 Spring Boot,您可以手动配置 OpenAI 嵌入模型。为此,请将 spring-ai-openai 依赖项添加到项目的 Maven pom.xml 文件中:

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

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

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

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

spring-ai-openai 依赖项还提供了对 OpenAiChatModel 的访问权限。有关 OpenAiChatModel 的更多信息,请参阅 OpenAI 聊天客户端 部分。

接下来,创建一个 OpenAiEmbeddingModel 实例并使用它来计算两个输入文本之间的相似性:

varopenAiApi=OpenAiApi.builder().apiKey(System.getenv("OPENAI_API_KEY")).build();varembeddingModel=newOpenAiEmbeddingModel(this.openAiApi,MetadataMode.EMBED,OpenAiEmbeddingOptions.builder().model("text-embedding-ada-002").user("user-6").build(),RetryUtils.DEFAULT_RETRY_TEMPLATE);EmbeddingResponseembeddingResponse=this.embeddingModel.embedForResponse(List.of("Hello World","World is big and salvation is near"));

OpenAiEmbeddingOptions 提供嵌入请求的配置信息。API 和选项类提供了一个 builder() 用于轻松创建选项。

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

Github-Lobe Chat:下一代开源AI聊天框架,重新定义人机交互体验

Github-Lobe Chat&#xff1a;下一代开源AI聊天框架&#xff0c;重新定义人机交互体验https://github.com/lobehub/lobe-chat&#x1f4cb; 项目概览Lobe Chat 是一个现代化的开源AI聊天界面框架&#xff0c;支持一键免费部署私有化的OpenAI ChatGPT/Claude/Gemini/Groq/Ollama…

作者头像 李华
网站建设 2026/5/22 22:16:37

11、UNIX与Linux编程基础:进程、环境与程序控制

UNIX与Linux编程基础:进程、环境与程序控制 1. 信号机制 在UNIX系统中,内核掌控着众多由不同用户创建的进程,其中包含许多维持系统正常运行所必需的“系统”进程。为了实现进程间的通信,内核允许进程之间相互发送“消息”。不过,由于系统中可能同时存在大量进程和消息,…

作者头像 李华
网站建设 2026/5/27 9:52:17

24、Perl编程入门:基础、应用与最佳实践

Perl编程入门:基础、应用与最佳实践 1. 读取密码文件中的用户名 在某些场景下,我们需要从系统的 /etc/passwd 文件中提取所有用户名。该文件以冒号分隔各个字段,第一个字段即为用户名。以下是一个使用 Perl 实现的脚本: open(PASSWORDS, "/etc/passwd"); wh…

作者头像 李华
网站建设 2026/5/28 7:54:10

UG高版本多轴联动开粗分享—东莞振华职校

UG 高版本&#xff08;如 NX1899 及以后&#xff09;新增了更智能的多轴动态开粗功能&#xff0c;能通过侧刃高效切削&#xff0c;还可灵活适配四轴、五轴加工场景&#xff0c;大幅提升复杂工件开粗效率。下面从核心操作流程、关键参数设置、优化技巧和避坑要点四方面展开分享&…

作者头像 李华
网站建设 2026/5/19 16:48:31

10BASE-T1S以太网技术实践:基于Microchip方案实现单对线50节点工业网络

文章目录1. 10BASE-T1S技术概述1.1 技术背景与发展1.2 技术特点与优势1.3 工业应用场景2. 系统架构设计2.1 整体网络架构2.2 硬件选型分析2.3 软件架构设计3. 开发环境搭建3.1 硬件开发环境3.2 软件开发环境3.3 测试工具准备4. 硬件设计与实现4.1 原理图设计4.2 PCB布局要点4.3…

作者头像 李华
网站建设 2026/5/22 19:54:10

5路红外循迹小车

所需模块&#xff1a;1.stm32f103c8t6核心板2.TB6612电机驱动模块1个3.5个红外循迹传感器4.4个电机通过左右电机产生差速来控制方向main.c#include "system.h" #include "stm32f10x.h" #include "SysTick.h" #include "motor.h" #incl…

作者头像 李华