Oracle Cloud Infrastructure (OCI) GenAI 嵌入

OCI GenAI 服務提供文字嵌入,支援按需模型或專用 AI 叢集。

OCI 嵌入模型頁面OCI 文字嵌入頁面提供了有關在 OCI 上使用和託管嵌入模型的詳細資訊。

先決條件

新增儲存庫和 BOM

Spring AI 工件釋出在 Maven Central 和 Spring Snapshot 儲存庫中。請參閱 工件儲存庫 部分,將這些儲存庫新增到您的構建系統。

為了幫助管理依賴項,Spring AI 提供了一個 BOM(物料清單),以確保在整個專案中使用的 Spring AI 版本一致。請參閱 依賴項管理 部分,將 Spring AI BOM 新增到您的構建系統。

自動配置

Spring AI 自動配置、啟動模組的工件名稱發生了重大變化。請參閱 升級說明 以獲取更多資訊。

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 配置檔名。在透過 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

按需

spring.ai.oci.genai.embedding.truncate

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

END

spring.ai.oci.genai.embedding.model

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

-

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

執行時選項

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

在啟動時,使用 OCIEmbeddingOptions 建構函式設定所有嵌入請求使用的預設選項。在執行時,您可以透過將 OCIEmbeddingOptions 例項傳遞給 EmbeddingRequest 請求來覆蓋預設選項。

例如,為特定請求覆蓋預設模型名稱

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?"));
© . This site is unofficial and not affiliated with VMware.