收藏本站,收获最前沿的人工智能与编程资讯!!

Spring AI 使用甲骨文云基础设施(OCI)生成式人工智能嵌入向量

技术文档 10℃ 0

甲骨文云基础设施生成式人工智能服务支持通过按需模型或专用人工智能集群生成文本嵌入向量。

甲骨文云基础设施嵌入模型页面和甲骨文云基础设施文本嵌入向量页面提供了在甲骨文云基础设施上使用和部署嵌入模型的详细说明。

前提条件

添加仓库和物料清单

Spring AI 构件已发布至 Maven 中央仓库和 Spring 快照仓库。参考「构件仓库」章节,将这些仓库添加到你的构建系统中。

为简化依赖管理,Spring AI 提供了物料清单(BOM),确保整个项目使用一致版本的 Spring AI。参考「依赖管理」章节,将 Spring AI 物料清单添加到你的构建系统中。

自动配置

Spring AI 自动配置、启动器模块的构件名称发生了重大变更。更多信息请参考升级说明。

Spring AI 为甲骨文云基础设施生成式人工智能嵌入向量客户端提供了 Spring Boot 自动配置。启用该功能需在项目的 Maven pom.xml 文件中添加以下依赖:

org.springframework.aispring-ai-starter-model-oci-genai

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

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

参考「依赖管理」章节,将 Spring AI 物料清单添加到你的构建文件中。

嵌入向量配置属性

配置前缀 spring.ai.oci.genai 用于配置甲骨文云基础设施生成式人工智能的连接参数。

配置属性说明默认值
spring.ai.oci.genai.authenticationType甲骨文云基础设施认证类型,可选值:file、instance-principal、workload-identity、simplefile
spring.ai.oci.genai.region甲骨文云基础设施服务区域us-chicago-1
spring.ai.oci.genai.tenantId甲骨文云基础设施租户OCID,仅simple认证方式使用-
spring.ai.oci.genai.userId甲骨文云基础设施用户OCID,仅simple认证方式使用-
spring.ai.oci.genai.fingerprint私钥指纹,仅simple认证方式使用-
spring.ai.oci.genai.privateKey私钥内容,仅simple认证方式使用-
spring.ai.oci.genai.passPhrase可选私钥密码,适用于加密私钥的simple认证场景-
spring.ai.oci.genai.file甲骨文云基础设施配置文件路径,仅file认证方式使用<用户主目录>/.oci/config
spring.ai.oci.genai.profile甲骨文云基础设施配置文件名称,仅file认证方式使用DEFAULT
spring.ai.oci.genai.endpoint可选甲骨文云基础设施生成式人工智能访问端点-

嵌入向量自动配置的启用与禁用,现已通过顶级前缀 spring.ai.model.embedding 配置:

  • 启用:spring.ai.model.embedding=oci-genai(默认已启用)

  • 禁用:spring.ai.model.embedding=none(或任意非 oci-genai 的值)

该变更用于支持多模型的配置管理。

配置前缀 spring.ai.oci.genai.embedding 用于配置甲骨文云基础设施生成式人工智能的 EmbeddingModel 实现。

配置属性说明默认值
spring.ai.oci.genai.embedding.enabled(已移除,不再生效)启用甲骨文云基础设施生成式人工智能嵌入向量模型true
spring.ai.model.embedding启用甲骨文云基础设施生成式人工智能嵌入向量模型oci-genai
spring.ai.oci.genai.embedding.compartment模型所属 compartment 的 OCID-
spring.ai.oci.genai.embedding.servingMode模型服务模式,可选值:on-demand、dedicatedon-demand
spring.ai.oci.genai.embedding.truncate文本超出上下文长度时的截断方式,可选值:START、ENDEND
spring.ai.oci.genai.embedding.model嵌入向量使用的模型或模型端点-

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

运行时选项

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 实例,可直接注入到类中使用。以下是一个简单的 @Controller 示例,使用 EmbeddingModel 实现生成嵌入向量:

spring.ai.oci.genai.embedding.model=spring.ai.oci.genai.embedding.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。需在项目的 Maven pom.xml 文件中添加以下依赖:

org.springframework.aispring-oci-genai-openai

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

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

参考「依赖管理」章节,将 Spring AI 物料清单添加到你的构建文件中。

接下来,创建 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);
Listembedding = this.embeddingModel.embed(new Document("How many provinces are in Canada?"));

相关推荐