Spring AI 通过官方 OpenAI Java SDK 支持 OpenAI 文本嵌入模型,提供与 OpenAI 服务(包括微软云服务和 GitHub 模型)的稳定、官方维护集成。
OpenAI 文本嵌入用于衡量文本字符串的相关性。嵌入向量是一组浮点数,两个向量的距离越小,相关性越高;距离越大,相关性越低。
该模块会根据你提供的基础 URL 自动识别服务提供商:OpenAI、微软 Foundry 或 GitHub Models。
认证方式
通过基础 URL 和 API 密钥完成认证,支持 Spring 配置或环境变量。
使用 OpenAI
spring.ai.openai-sdk.api-key=# 可选,默认 https://api.openai.com/v1 # spring.ai.openai-sdk.base-url=https://api.openai.com/v1
环境变量:
export OPENAI_API_KEY=
使用微软 Foundry
spring.ai.openai-sdk.base-url=https://.openai.azure.com spring.ai.openai-sdk.api-key=spring.ai.openai-sdk.microsoft-deployment-name=
无密码认证(推荐)
添加依赖:
com.azureazure-identity
无需配置 api-key:
spring.ai.openai-sdk.base-url=https://.openai.azure.com spring.ai.openai-sdk.microsoft-deployment-name=
使用 GitHub Models
spring.ai.openai-sdk.base-url=https://models.inference.ai.azure.com spring.ai.openai-sdk.api-key=github_pat_XXXXXXXXXXX
添加依赖
Maven:
org.springframework.aispring-ai-starter-model-openai-sdk
Gradle:
implementation 'org.springframework.ai:spring-ai-starter-model-openai-sdk'
配置属性
连接属性
| 属性 | 说明 | 默认值 |
|---|---|---|
| spring.ai.openai-sdk.base-url | 服务地址 | api.openai.com/v1 |
| spring.ai.openai-sdk.api-key | API 密钥 | - |
| spring.ai.openai-sdk.organization-id | 组织 ID | - |
| spring.ai.openai-sdk.timeout | 请求超时 | - |
| spring.ai.openai-sdk.max-retries | 最大重试次数 | - |
嵌入模型属性
| 属性 | 说明 | 默认值 |
|---|---|---|
| spring.ai.openai-sdk.embedding.options.model | 模型名称 | text-embedding-ada-002 |
| spring.ai.openai-sdk.embedding.options.dimensions | 向量维度(仅 3.0+ 支持) | - |
| spring.ai.openai-sdk.embedding.options.user | 终端用户标识 | - |
运行时选项
可在请求时覆盖默认配置:
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World"),
OpenAiSdkEmbeddingOptions.builder()
.model("text-embedding-3-large")
.dimensions(1024)
.build()));示例控制器
@RestController
public class EmbeddingController {
private final EmbeddingModel embeddingModel;
@Autowired
public EmbeddingController(EmbeddingModel embeddingModel) {
this.embeddingModel = embeddingModel;
}
@GetMapping("/ai/embedding")
public Mapembed(@RequestParam String message) {
EmbeddingResponse response = embeddingModel.embedForResponse(List.of(message));
return Map.of("embedding", response);
}
}手动配置
var options = OpenAiSdkEmbeddingOptions.builder()
.model("text-embedding-ada-002")
.apiKey(System.getenv("OPENAI_API_KEY"))
.build();
var model = new OpenAiSdkEmbeddingModel(options);
EmbeddingResponse response = model.embedForResponse(List.of("Hello World"));微软 Foundry 手动配置
var options = OpenAiSdkEmbeddingOptions.builder()
.baseUrl("https://your-resource.openai.azure.com")
.deploymentName("text-embedding-ada-002")
.azure(true)
.build();
var model = new OpenAiSdkEmbeddingModel(options);GitHub Models 手动配置
var options = OpenAiSdkEmbeddingOptions.builder()
.baseUrl("https://models.inference.ai.azure.com")
.apiKey(System.getenv("GITHUB_TOKEN"))
.githubModels(true)
.build();可观测性
通过 Micrometer 支持 Spring AI 监控与追踪。