智譜AI 嵌入式模型

Spring AI 支援智譜AI 的文字嵌入式模型。智譜AI 的文字嵌入式模型衡量文字字串之間的相關性。嵌入式是一個浮點數向量(列表)。兩個向量之間的距離衡量了它們的相關性。距離越小,相關性越高;距離越大,相關性越低。

先決條件

您需要向智譜AI 建立一個 API 來訪問智譜AI 語言模型。

智譜AI 註冊頁面建立一個賬戶,並在API Keys 頁面生成 token。Spring AI 專案定義了一個名為 spring.ai.zhipu.api-key 的配置屬性,您應該將其設定為從API Keys 頁面獲得的 API Key 的值。設定此配置屬性的一種方法是匯出環境變數

export SPRING_AI_ZHIPU_AI_API_KEY=<INSERT KEY HERE>

新增倉庫和 BOM

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

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

自動配置

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

Spring AI 為 Azure 智譜AI 嵌入式模型提供了 Spring Boot 自動配置。要啟用它,請將以下依賴項新增到專案的 Maven pom.xml 檔案中

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-zhipuai</artifactId>
</dependency>

或新增到 Gradle 的 build.gradle 構建檔案中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-zhipuai'
}
請參閱依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。

嵌入式屬性

重試屬性

字首 spring.ai.retry 用作屬性字首,允許您配置智譜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)。

spring.ai.retry.on-http-codes

應觸發重試的 HTTP 狀態碼列表(例如,丟擲 TransientAiException)。

連線屬性

字首 spring.ai.zhipuai 用作屬性字首,允許您連線到智譜AI。

屬性 描述 預設值

spring.ai.zhipuai.base-url

連線 URL

open.bigmodel.cn/api/paas

spring.ai.zhipuai.api-key

API 金鑰

-

配置屬性

嵌入式自動配置的啟用和停用現在透過帶有字首 spring.ai.model.embedding 的頂級屬性進行配置。

要啟用,設定 spring.ai.model.embedding=zhipuai (預設已啟用)

要停用,設定 spring.ai.model.embedding=none (或任何與 zhipuai 不匹配的值)

此更改是為了支援配置多個模型。

字首 spring.ai.zhipuai.embedding 是配置智譜AI 的 EmbeddingModel 實現的屬性字首。

屬性 描述 預設值

spring.ai.zhipuai.embedding.enabled (已移除,不再有效)

啟用智譜AI 嵌入式模型。

true

spring.ai.model.embedding

啟用智譜AI 嵌入式模型。

zhipuai

spring.ai.zhipuai.embedding.base-url

可選覆蓋 spring.ai.zhipuai.base-url,提供特定於嵌入式的 URL

-

spring.ai.zhipuai.embedding.api-key

可選覆蓋 spring.ai.zhipuai.api-key,提供特定於嵌入式的 API 金鑰

-

spring.ai.zhipuai.embedding.options.model

要使用的模型

embedding-2

spring.ai.zhipuai.embedding.options.dimensions

維度數量,模型為 embedding-3 時預設值為 2048

-

您可以為 ChatModelEmbeddingModel 實現覆蓋通用的 spring.ai.zhipuai.base-urlspring.ai.zhipuai.api-key。如果設定了 spring.ai.zhipuai.embedding.base-urlspring.ai.zhipuai.embedding.api-key 屬性,則它們優先於通用屬性。類似地,如果設定了 spring.ai.zhipuai.chat.base-urlspring.ai.zhipuai.chat.api-key 屬性,則它們優先於通用屬性。這在您想為不同的模型和不同的模型端點使用不同的智譜AI 賬戶時很有用。
所有帶有 spring.ai.zhipuai.embedding.options 字首的屬性都可以透過在 EmbeddingRequest 呼叫中新增請求特定的執行時選項來覆蓋預設值。

執行時選項

ZhiPuAiEmbeddingOptions.java 提供了智譜AI 的配置,例如要使用的模型等。

也可以使用 spring.ai.zhipuai.embedding.options 屬性配置預設選項。

在啟動時使用 ZhiPuAiEmbeddingModel 建構函式設定所有嵌入請求使用的預設選項。在執行時,您可以使用 EmbeddingRequest 中的 ZhiPuAiEmbeddingOptions 例項覆蓋預設選項。

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

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

示例控制器

這將建立一個 EmbeddingModel 實現,您可以將其注入到您的類中。這是一個使用 EmbeddingModel 實現的簡單 @Controller 類的示例。

spring.ai.zhipuai.api-key=YOUR_API_KEY
spring.ai.zhipuai.embedding.options.model=embedding-2
@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,可以手動配置智譜AI 嵌入式模型。為此,將 spring-ai-zhipuai 依賴項新增到專案的 Maven pom.xml 檔案中

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

或新增到 Gradle 的 build.gradle 構建檔案中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-zhipuai'
}
請參閱依賴管理部分,將 Spring AI BOM 新增到您的構建檔案中。
spring-ai-zhipuai 依賴項也提供了對 ZhiPuAiChatModel 的訪問。有關 ZhiPuAiChatModel 的更多資訊,請參閱智譜AI 聊天客戶端部分。

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

var zhiPuAiApi = new ZhiPuAiApi(System.getenv("ZHIPU_AI_API_KEY"));

var embeddingModel = new ZhiPuAiEmbeddingModel(api, MetadataMode.EMBED,
				ZhiPuAiEmbeddingOptions.builder()
						.model("embedding-3")
						.dimensions(1536)
						.build());

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

ZhiPuAiEmbeddingOptions 提供了嵌入式請求的配置資訊。選項類提供了 builder() 以方便建立選項。