Mistral AI 嵌入

Spring AI 支援 Mistral AI 的文字嵌入模型。嵌入是文字的向量表示,透過段落在高維向量空間中的位置來捕捉段落的語義。Mistral AI 嵌入 API 為文字提供最先進的嵌入技術,可用於許多 NLP 任務。

先決條件

您需要使用 MistralAI 建立 API 金鑰才能存取 MistralAI 嵌入模型。

MistralAI 註冊頁面 建立帳戶,並在 API 金鑰頁面 產生金鑰。Spring AI 專案定義了一個名為 `spring.ai.mistralai.api-key` 的組態屬性,您應該將其設定為從 console.mistral.ai 取得的 API 金鑰值。匯出環境變數是設定該組態屬性的一種方法

export SPRING_AI_MISTRALAI_API_KEY=<INSERT KEY HERE>

新增儲存庫和 BOM

Spring AI 的 artifacts 發佈在 Spring Milestone 和 Snapshot 儲存庫中。請參閱 儲存庫 章節,將這些儲存庫新增至您的建置系統。

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

自動組態

Spring AI 為 MistralAI 嵌入模型提供 Spring Boot 自動組態。若要啟用它,請將以下依賴項新增至您專案的 Maven `pom.xml` 檔案

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mistral-ai-spring-boot-starter</artifactId>
</dependency>

或您的 Gradle `build.gradle` 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-mistral-ai-spring-boot-starter'
}
請參閱 依賴管理 章節,將 Spring AI BOM 新增至您的建置檔案。

嵌入屬性

重試屬性

前綴 `spring.ai.retry` 用作屬性前綴,讓您可以設定 Mistral AI 嵌入模型的重試機制。

屬性 描述 預設值

spring.ai.retry.max-attempts

最大重試次數。

10

spring.ai.retry.backoff.initial-interval

指數退避策略的初始休眠時間。

2 秒。

spring.ai.retry.backoff.multiplier

退避間隔乘數。

5

spring.ai.retry.backoff.max-interval

最大退避時間。

3 分鐘。

spring.ai.retry.on-client-errors

若為 false,則拋出 NonTransientAiException,且不嘗試重試 `4xx` 用戶端錯誤代碼

false

spring.ai.retry.exclude-on-http-codes

不應觸發重試的 HTTP 狀態代碼清單 (例如,拋出 NonTransientAiException)。

empty

spring.ai.retry.on-http-codes

應觸發重試的 HTTP 狀態代碼清單 (例如,拋出 TransientAiException)。

empty

連線屬性

前綴 `spring.ai.mistralai` 用作屬性前綴,讓您可以連線至 MistralAI。

屬性 描述 預設值

spring.ai.mistralai.base-url

要連線的 URL

api.mistral.ai

spring.ai.mistralai.api-key

API 金鑰

-

組態屬性

前綴 `spring.ai.mistralai.embedding` 是屬性前綴,用於組態 MistralAI 的 `EmbeddingModel` 實作。

屬性 描述 預設值

spring.ai.mistralai.embedding.enabled

啟用 OpenAI 嵌入模型。

true

spring.ai.mistralai.embedding.base-url

選擇性覆寫 `spring.ai.mistralai.base-url` 以提供嵌入特定的 URL

-

spring.ai.mistralai.embedding.api-key

選擇性覆寫 `spring.ai.mistralai.api-key` 以提供嵌入特定的 API 金鑰

-

spring.ai.mistralai.embedding.metadata-mode

文件內容提取模式。

EMBED

spring.ai.mistralai.embedding.options.model

要使用的模型

mistral-embed

spring.ai.mistralai.embedding.options.encodingFormat

傳回嵌入的格式。可以是 float 或 base64。

-

您可以覆寫 `ChatModel` 和 `EmbeddingModel` 實作的通用 `spring.ai.mistralai.base-url` 和 `spring.ai.mistralai.api-key`。如果設定了 `spring.ai.mistralai.embedding.base-url` 和 `spring.ai.mistralai.embedding.api-key` 屬性,則它們優先於通用屬性。同樣地,如果設定了 `spring.ai.mistralai.chat.base-url` 和 `spring.ai.mistralai.chat.api-key` 屬性,則它們優先於通用屬性。如果您想為不同的模型和不同的模型端點使用不同的 MistralAI 帳戶,這會很有用。
所有以 `spring.ai.mistralai.embedding.options` 為前綴的屬性都可以在運行時覆寫,方法是在 `EmbeddingRequest` 呼叫中新增請求特定的 運行時選項。

運行時選項

`MistralAiEmbeddingOptions.java` 提供了 MistralAI 組態,例如要使用的模型等等。

預設選項也可以使用 `spring.ai.mistralai.embedding.options` 屬性進行組態。

在啟動時,使用 `MistralAiEmbeddingModel` 建構子設定用於所有嵌入請求的預設選項。在運行時,您可以使用 `MistralAiEmbeddingOptions` 實例作為 `EmbeddingRequest` 的一部分來覆寫預設選項。

例如,要覆寫特定請求的預設模型名稱

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        MistralAiEmbeddingOptions.builder()
            .withModel("Different-Embedding-Model-Deployment-Name")
        .build()));

範例控制器

這將建立一個 `EmbeddingModel` 實作,您可以將其注入到您的類別中。以下是一個簡單的 `@Controller` 類別的範例,該類別使用 `EmbeddingModel` 實作。

spring.ai.mistralai.api-key=YOUR_API_KEY
spring.ai.mistralai.embedding.options.model=mistral-embed
@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) {
        var embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}

手動組態

如果您未使用 Spring Boot,您可以手動組態 OpenAI 嵌入模型。為此,請將 `spring-ai-mistral-ai` 依賴項新增至您專案的 Maven `pom.xml` 檔案

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mistral-ai</artifactId>
</dependency>

或您的 Gradle `build.gradle` 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-mistral-ai'
}
請參閱 依賴管理 章節,將 Spring AI BOM 新增至您的建置檔案。
`spring-ai-mistral-ai` 依賴項也提供對 `MistralAiChatModel` 的存取權。有關 `MistralAiChatModel` 的更多資訊,請參閱 MistralAI 聊天用戶端 章節。

接下來,建立一個 `MistralAiEmbeddingModel` 實例,並使用它來計算兩個輸入文字之間的相似度

var mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));

var embeddingModel = new MistralAiEmbeddingModel(this.mistralAiApi,
        MistralAiEmbeddingOptions.builder()
                .withModel("mistral-embed")
                .withEncodingFormat("float")
                .build());

EmbeddingResponse embeddingResponse = this.embeddingModel
        .embedForResponse(List.of("Hello World", "World is big and salvation is near"));

`MistralAiEmbeddingOptions` 提供嵌入請求的組態資訊。選項類別提供 `builder()` 以方便建立選項。