跳到主要内容

Oracle 云基础设施 (OCI) GenAI 嵌入

DeepSeek V3 中英对照 OCI GenAI Oracle Cloud Infrastructure (OCI) GenAI Embeddings

OCI GenAI 服务 提供按需模型或专用 AI 集群的文本嵌入功能。

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

先决条件

添加 Repositories 和 BOM

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

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

自动配置

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

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

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

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

请参考 依赖管理 部分,将 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.oci.genai.embedding 是用于配置 OCI GenAI 的 EmbeddingModel 实现的属性前缀。

属性描述默认值
spring.ai.oci.genai.embedding.enabled启用 OCI GenAI 嵌入模型。true
spring.ai.oci.genai.embedding.compartment模型分区 OCID。-
spring.ai.oci.genai.embedding.servingMode使用的模型服务模式。可能为 on-demanddedicatedon-demand
spring.ai.oci.genai.embedding.truncate如果文本超出嵌入上下文,如何截断。可能为 STARTENDEND
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()
));
java

示例代码

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

spring.ai.oci.genai.embedding.model=<your model>
spring.ai.oci.genai.embedding.compartment=<your model compartment>
application.properties
@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);
}
}
java

手动配置

如果您不想使用 Spring Boot 自动配置,可以手动在应用程序中配置 OCIEmbeddingModel。为此,请将 spring-oci-genai-openai 依赖项添加到项目的 Maven pom.xml 文件中:

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

或者到你的 Gradle build.gradle 构建文件中。

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

请参考依赖管理部分,将 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?"));
java