侧边栏壁纸
博主头像
AI中文站

开拓MCP洪荒时代

  • 累计撰写 33 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SpringAI-OpenAI Embeddings

Spring AI 支持OpenAI文本嵌入模型。OpenAI文本嵌入用于衡量文本字符串的相关性。嵌入是由浮点数组成的向量(列表),向量间的距离反映其相关性:距离小表示高相关性,距离大表示低相关性。

前提条件

需在OpenAI创建API以访问嵌入模型:

  1. 在OpenAI注册页面创建账户

  2. 于API密钥页面生成令牌

Spring AI定义了配置属性 spring.ai.openai.api-key,需设置为从openai.com获取的API密钥值。
在application.properties中配置:

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

为增强API密钥等敏感信息的安全性,可使用SpEL引用环境变量:

# application.yml  
spring:  
  ai:  
    openai:  
      api-key: ${OPENAI_API_KEY}  
# 环境变量或.env文件  
export OPENAI_API_KEY=<your-openai-api-key>  

也可在代码中配置:

String apiKey = System.getenv("OPENAI_API_KEY");  

添加仓库与BOM

Spring AI构件发布于Maven中央仓库和Spring快照仓库。请参考"构件仓库"章节将其添加到构建系统。
为统一依赖版本,Spring AI提供BOM(物料清单)。参考"依赖管理"章节添加至构建系统。

自动配置

Spring AI自动配置及starter模块名称有重大变更,详见升级说明。
启用OpenAI嵌入模型需添加依赖:

<!-- Maven -->  
<dependency>  
  <groupId>org.springframework.ai</groupId>  
  <artifactId>spring-ai-starter-model-openai</artifactId>  
</dependency>  
// Gradle  
dependencies {  
  implementation 'org.springframework.ai:spring-ai-starter-model-openai'  
}  

嵌入属性

重试属性

前缀 spring.ai.retry 用于配置OpenAI嵌入模型的重试机制:

属性

描述

默认值

spring.ai.retry.max-attempts

最大重试次数

10

spring.ai.retry.backoff.initial-interval

指数退避初始间隔

2秒

spring.ai.retry.backoff.multiplier

退避间隔乘数

5

spring.ai.retry.backoff.max-interval

最大退避间隔

3分钟

spring.ai.retry.on-client-errors

遇4xx错误时是否重试

false

spring.ai.retry.exclude-on-http-codes

不触发重试的HTTP状态码列表

spring.ai.retry.on-http-codes

触发重试的HTTP状态码列表

连接属性

前缀 spring.ai.openai 用于连接OpenAI:

属性

描述

默认值

spring.ai.openai.base-url

连接URL

https://api.openai.com

spring.ai.openai.api-key

API密钥

-

spring.ai.openai.organization-id

请求所属组织

-

spring.ai.openai.project-id

请求所属项目

-

多组织用户可通过这些属性指定API请求归属

配置属性

嵌入自动配置启用状态通过顶级属性 spring.ai.model.embedding 配置:

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

  • 禁用:spring.ai.model.embedding=none

前缀 spring.ai.openai.embedding 配置OpenAI嵌入模型实现:

属性

描述

默认值

spring.ai.model.embedding

启用OpenAI嵌入模型

openai

spring.ai.openai.embedding.base-url

覆盖通用base-url

-

spring.ai.openai.embedding.embeddings-path

附加到base-url的路径

/v1/embeddings

spring.ai.openai.embedding.api-key

覆盖通用api-key

-

spring.ai.openai.embedding.organization-id

请求所属组织

-

spring.ai.openai.embedding.project-id

请求所属项目

-

spring.ai.openai.embedding.metadata-mode

文档内容提取模式

EMBED

spring.ai.openai.embedding.options.model

使用模型

text-embedding-ada-002

spring.ai.openai.embedding.options.encodingFormat

嵌入返回格式

-

spring.ai.openai.embedding.options.user

终端用户唯一标识

-

spring.ai.openai.embedding.options.dimensions

输出嵌入维度数

-

嵌入/聊天模型可分别通过 spring.ai.openai.embedding.*spring.ai.openai.chat.* 覆盖通用配置
spring.ai.openai.embedding.options 前缀的属性支持运行时覆盖

运行时选项

OpenAiEmbeddingOptions 提供模型配置,默认选项可通过 spring.ai.openai.embedding.options 配置。
启动时通过构造函数设置默认选项,运行时可通过 EmbeddingRequest 覆盖:

EmbeddingResponse response = embeddingModel.call(  
  new EmbeddingRequest(List.of("Hello World"),  
    OpenAiEmbeddingOptions.builder()  
      .model("Different-Embedding-Model")  
      .build()));  

示例

@RestController  
public class EmbeddingController {  

  private final EmbeddingModel embeddingModel;  

  @Autowired  
  public EmbeddingController(EmbeddingModel embeddingModel) {  
    this.embeddingModel = embeddingModel;  
  }  

  @GetMapping("/ai/embedding")  
  public Map embed(@RequestParam String message) {  
    EmbeddingResponse response = this.embeddingModel.embedForResponse(List.of(message));  
    return Map.of("embedding", response);  
  }  
}  

手动配置

非Spring Boot项目需手动添加依赖:

<!-- Maven -->  
<dependency>  
  <groupId>org.springframework.ai</groupId>  
  <artifactId>spring-ai-openai</artifactId>  
</dependency>  
// Gradle  
dependencies {  
  implementation 'org.springframework.ai:spring-ai-openai'  
}  

创建实例示例:

var openAiApi = OpenAiApi.builder()  
                .apiKey(System.getenv("OPENAI_API_KEY"))  
                .build();  

var embeddingModel = new OpenAiEmbeddingModel(  
  openAiApi,  
  MetadataMode.EMBED,  
  OpenAiEmbeddingOptions.builder()  
    .model("text-embedding-ada-002")  
    .user("user-6")  
    .build(),  
  RetryUtils.DEFAULT_RETRY_TEMPLATE);  

EmbeddingResponse response = embeddingModel.embedForResponse(  
  List.of("Hello World"));  

OpenAiEmbeddingOptions 通过builder模式配置请求参数。

0

评论区