跳到主要内容

Oracle Cloud Infrastructure (OCI) GenAI Embeddings

Deepseek 3.2 中英对照 OCI GenAI Oracle Cloud Infrastructure (OCI) GenAI Embeddings

OCI GenAI Service 提供文本嵌入功能,支持按需使用模型或专用的 AI 集群。

OCI 嵌入模型页面OCI 文本嵌入页面 提供了关于在 OCI 上使用和托管嵌入模型的详细信息。

先决条件

添加仓库和 BOM

Spring AI 工件已发布至 Maven Central 和 Spring Snapshot 仓库。请参阅工件仓库章节,将这些仓库添加至您的构建系统。

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

自动配置

备注

Spring AI 的自动配置以及 starter 模块的 artifact 名称发生了重大变更。更多详情请参阅 升级说明

Spring AI 为 OCI GenAI Embedding Client 提供了 Spring Boot 自动配置。要启用此功能,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

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

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

dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-oci-genai'
}
提示

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

嵌入属性

前缀 spring.ai.oci.genai 是用于配置 OCI GenAI 连接的属性前缀。

属性描述默认值
spring.ai.oci.genai.authenticationType连接到 OCI 时使用的认证类型。可选值为 fileinstance-principalworkload-identitysimplefile
spring.ai.oci.genai.regionOCI 服务区域。us-chicago-1
spring.ai.oci.genai.tenantIdOCI 租户 OCID,在使用 simple 认证时使用。-
spring.ai.oci.genai.userIdOCI 用户 OCID,在使用 simple 认证时使用。-
spring.ai.oci.genai.fingerprint私钥指纹,在使用 simple 认证时使用。-
spring.ai.oci.genai.privateKey私钥内容,在使用 simple 认证时使用。-
spring.ai.oci.genai.passPhrase可选的私钥密码,在使用 simple 认证且私钥受密码保护时使用。-
spring.ai.oci.genai.fileOCI 配置文件路径。在使用 file 认证时使用。<用户主目录>/.oci/config
spring.ai.oci.genai.profileOCI 配置文件中的配置名称。在使用 file 认证时使用。DEFAULT
spring.ai.oci.genai.endpoint可选的 OCI GenAI 服务端点。-
备注

嵌入自动配置的启用与禁用现在通过顶层属性进行配置,属性前缀为 spring.ai.model.embedding

若要启用,请设置 spring.ai.model.embedding=oci-genai(默认已启用)

若要禁用,请设置 spring.ai.model.embedding=none(或任何不与 oci-genai 匹配的值)

此项变更是为了支持配置多个模型。

spring.ai.oci.genai.embedding 是用于配置 OCI GenAI EmbeddingModel 实现的属性前缀。

属性描述默认值
spring.ai.oci.genai.embedding.enabled (已移除,不再有效)启用 OCI GenAI 嵌入模型。true
spring.ai.model.embedding启用 OCI GenAI 嵌入模型。oci-genai
spring.ai.oci.genai.embedding.compartment模型所属区间的 OCID。-
spring.ai.oci.genai.embedding.servingMode要使用的模型服务模式。可选值为 on-demand(按需)或 dedicated(专用)。on-demand
spring.ai.oci.genai.embedding.truncate当文本超出嵌入上下文时的截断方式。可选值为 START(从开始截断)或 END(从末尾截断)。END
spring.ai.oci.genai.embedding.model用于嵌入的模型或模型端点。-

:::提示
所有以 spring.ai.oci.genai.embedding.options 为前缀的属性,都可以在运行时通过在 EmbeddingRequest 调用中添加特定于请求的运行时选项来覆盖。
:::

运行时选项

OCIEmbeddingOptions 为嵌入请求提供配置信息。OCIEmbeddingOptions 提供了一个构建器来创建选项。

启动时使用 OCIEmbeddingOptions 构造函数来设置所有嵌入请求的默认选项。在运行时,你可以通过向 EmbeddingRequest 请求传递一个包含你设置的 OCIEmbeddingOptions 实例来覆盖默认选项。

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

EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
OCIEmbeddingOptions.builder()
.model("my-other-embedding-model")
.build()
));

示例代码

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

spring.ai.oci.genai.embedding.model=<your model>
spring.ai.oci.genai.embedding.compartment=<your model compartment>
@RestController
public class EmbeddingController {

private final EmbeddingModel embeddingModel;

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

@GetMapping("/ai/embedding")
public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
return Map.of("embedding", embeddingResponse);
}
}

手动配置

如果你倾向于不使用 Spring Boot 自动配置,可以在应用中手动配置 OCIEmbeddingModel。为此,需要将 spring-oci-genai-openai 依赖项添加到你项目的 Maven pom.xml 文件中:

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

或将其添加到您的 Gradle build.gradle 构建文件中。

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

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

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

final String EMBEDDING_MODEL = "cohere.embed-english-light-v2.0";
final String CONFIG_FILE = Paths.get(System.getProperty("user.home"), ".oci", "config").toString();
final String PROFILE = "DEFAULT";
final String REGION = "us-chicago-1";
final String COMPARTMENT_ID = System.getenv("OCI_COMPARTMENT_ID");

var authProvider = new ConfigFileAuthenticationDetailsProvider(
this.CONFIG_FILE, this.PROFILE);
var aiClient = GenerativeAiInferenceClient.builder()
.region(Region.valueOf(this.REGION))
.build(this.authProvider);
var options = OCIEmbeddingOptions.builder()
.model(this.EMBEDDING_MODEL)
.compartment(this.COMPARTMENT_ID)
.servingMode("on-demand")
.build();
var embeddingModel = new OCIEmbeddingModel(this.aiClient, this.options);
List<Double> embedding = this.embeddingModel.embed(new Document("How many provinces are in Canada?"));