Oracle Cloud Infrastructure (OCI) 生成式 AI 嵌入

OCI 生成式 AI 服務 提供文字嵌入,支援按需模型或專用 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 嵌入客戶端提供了 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-identitysimple

file

spring.ai.oci.genai.region

OCI 服務區域。

us-chicago-1

spring.ai.oci.genai.tenantId

OCI 租戶 OCID,用於使用 simple 認證時。

-

spring.ai.oci.genai.userId

OCI 使用者 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

OCI 配置檔案路徑。用於使用 file 認證時。

<使用者主目錄>/.oci/config

spring.ai.oci.genai.profile

OCI profile 名稱。用於使用 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-demanddedicated

on-demand

spring.ai.oci.genai.embedding.truncate

如果文字超出嵌入上下文,如何截斷。可以是 STARTEND

END

spring.ai.oci.genai.embedding.model

用於嵌入的模型或模型端點。

-

所有帶有字首 spring.ai.oci.genai.embedding.options 的屬性都可以在執行時透過向 EmbeddingRequest 呼叫新增請求特定的 執行時選項 來覆蓋。

執行時選項

OCIEmbeddingOptions 提供了嵌入請求的配置資訊。OCIEmbeddingOptions 提供了一個 builder 來建立選項。

啟動時使用 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);
    }
}

手動配置

如果您 prefer 不使用 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?"));