智譜 AI 聊天

Spring AI 支援智譜 AI 的各種 AI 語言模型。您可以與智譜 AI 語言模型互動,並基於智譜 AI 模型建立多語言對話助手。

如果您不是中文使用者,可以訪問智譜 AI 國際網站 Z.ai

先決條件

您需要建立智譜AI的API以訪問智譜AI語言模型。

智譜 AI 註冊頁面(或 Z.ai 註冊頁面)建立帳戶,並在 API 金鑰頁面(或 Z.ai API 金鑰頁面)生成令牌。

Spring AI專案定義了一個名為spring.ai.zhipuai.api-key的配置屬性,您應該將其設定為從API Keys頁面獲取的API Key的值。

您可以在 application.properties 檔案中設定此配置屬性

spring.ai.zhipuai.api-key=<your-zhipuai-api-key>

為了增強處理 API 金鑰等敏感資訊時的安全性,您可以使用 Spring 表示式語言 (SpEL) 來引用自定義環境變數

# In application.yml
spring:
  ai:
    zhipuai:
      api-key: ${ZHIPUAI_API_KEY}
# In your environment or .env file
export ZHIPUAI_API_KEY=<your-zhipuai-api-key>

您還可以在應用程式程式碼中以程式設計方式設定此配置

// Retrieve API key from a secure source or environment variable
String apiKey = System.getenv("ZHIPUAI_API_KEY");

新增儲存庫和 BOM

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

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

自動配置

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

Spring AI 為智譜 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 客戶端錯誤程式碼

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

連線智譜 AI API 的 URL。
如果您使用 Z.ai 平臺,需要將其設定為 https://api.z.ai/api/paas

https://open.bigmodel.cn/api/paas

spring.ai.zhipuai.api-key

API 金鑰

-

配置屬性

聊天自動配置的啟用和停用現在透過以spring.ai.model.chat為字首的頂級屬性進行配置。

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

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

此更改是為了允許配置多個模型。

字首 spring.ai.zhipuai.chat 是屬性字首,允許您配置智譜 AI 的聊天模型實現。

財產 描述 預設值

spring.ai.zhipuai.chat.enabled(已移除且不再有效)

啟用智譜 AI 聊天模型。

true

spring.ai.model.chat

啟用智譜 AI 聊天模型。

zhipuai

spring.ai.zhipuai.chat.base-url

可選地覆蓋 spring.ai.zhipuai.base-url 以提供聊天特定的 URL。
如果您使用 Z.ai 平臺,需要將其設定為 https://api.z.ai/api/paas

https://open.bigmodel.cn/api/paas

spring.ai.zhipuai.chat.api-key

可選地覆蓋 spring.ai.zhipuai.api-key 以提供聊天特定的 api-key。

-

spring.ai.zhipuai.chat.options.model

這是要使用的智譜 AI 聊天模型。您可以選擇的模型包括:glm-4.6glm-4.5glm-4-air 等。

glm-4-air

spring.ai.zhipuai.chat.options.maxTokens

在聊天補全中生成的最大令牌數。輸入令牌和生成令牌的總長度受模型上下文長度的限制。

-

spring.ai.zhipuai.chat.options.temperature

使用的取樣溫度,介於 0 到 1 之間。較高的值,如 0.8,會使輸出更隨機;而較低的值,如 0.2,會使輸出更集中和確定性。我們通常建議更改此項或 top_p,但不要同時更改。

0.7

spring.ai.zhipuai.chat.options.topP

一種替代溫度取樣的核取樣方法,模型會考慮具有 top_p 機率質量的 token 的結果。因此,0.1 表示只考慮構成前 10% 機率質量的 token。我們通常建議更改此項或 temperature,但不要同時更改。

1.0

spring.ai.zhipuai.chat.options.stop

模型將在 stop 指定的字元處停止生成,目前僅支援 ["stop_word1"] 格式的單個停止詞

-

spring.ai.zhipuai.chat.options.user

表示您的終端使用者的唯一識別符號,有助於智譜 AI 監控和檢測濫用行為。

-

spring.ai.zhipuai.chat.options.requestId

該引數由客戶端傳遞,必須確保唯一性。它用於區分每個請求的唯一識別符號。如果客戶端未提供,平臺將預設生成。

-

spring.ai.zhipuai.chat.options.doSample

當 do_sample 設定為 true 時,取樣策略被啟用。如果 do_sample 為 false,則取樣策略引數 temperature 和 top_p 將不生效。

true

spring.ai.zhipuai.chat.options.response-format.type

控制模型輸出的格式。設定為 json_object 可確保訊息是有效的 JSON 物件。可用選項:textjson_object

-

spring.ai.zhipuai.chat.options.thinking.type

控制是否啟用大模型的思維鏈。可用選項:enableddisabled

-

spring.ai.zhipuai.chat.options.tool-names

工具列表,透過其名稱標識,用於在單個提示請求中啟用函式呼叫。具有這些名稱的工具必須存在於 ToolCallback 登錄檔中。

-

spring.ai.zhipuai.chat.options.tool-callbacks

要註冊到 ChatModel 的工具回撥。

-

spring.ai.zhipuai.chat.options.internal-tool-execution-enabled

如果為 false,Spring AI 將不會在內部處理工具呼叫,而是將其代理到客戶端。然後,客戶端負責處理工具呼叫,將其分派到適當的函式,並返回結果。如果為 true(預設),Spring AI 將在內部處理函式呼叫。僅適用於支援函式呼叫的聊天模型

true

您可以為 ChatModel 實現覆蓋通用的 spring.ai.zhipuai.base-urlspring.ai.zhipuai.api-key。如果設定了 spring.ai.zhipuai.chat.base-urlspring.ai.zhipuai.chat.api-key 屬性,它們將優先於通用屬性。這在您希望為不同的模型和不同的模型端點使用不同的智譜 AI 賬戶時非常有用。
所有帶有 spring.ai.zhipuai.chat.options 字首的屬性都可以在執行時透過向 Prompt 呼叫新增請求特定的 執行時選項 來覆蓋。

執行時選項

ZhiPuAiChatOptions.java 提供了模型配置,例如要使用的模型、溫度、頻率懲罰等。

在啟動時,可以使用 ZhiPuAiChatModel(api, options) 建構函式或 spring.ai.zhipuai.chat.options.* 屬性配置預設選項。

在執行時,您可以透過向 Prompt 呼叫新增新的、請求特定的選項來覆蓋預設選項。例如,為特定請求覆蓋預設模型和溫度

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        ZhiPuAiChatOptions.builder()
            .model(ZhiPuAiApi.ChatModel.GLM_4_Air.getValue())
            .temperature(0.5)
        .build()
    ));
除了模型特定的 ZhiPuAiChatOptions,您還可以使用透過 ChatOptions#builder() 建立的可移植 ChatOptions 例項。

示例控制器

建立一個新的 Spring Boot 專案,並將 spring-ai-starter-model-zhipuai 新增到您的 pom (或 gradle) 依賴項中。

src/main/resources 目錄下新增一個 application.properties 檔案,以啟用和配置智譜 AI 聊天模型

spring.ai.zhipuai.api-key=YOUR_API_KEY
spring.ai.zhipuai.chat.options.model=glm-4-air
spring.ai.zhipuai.chat.options.temperature=0.7
api-key 替換為您的智譜 AI 憑據。

這將建立一個 ZhiPuAiChatModel 實現,您可以將其注入到您的類中。這是一個簡單的 @Controller 類的示例,它使用聊天模型進行文字生成。

@RestController
public class ChatController {

    private final ZhiPuAiChatModel chatModel;

    @Autowired
    public ChatController(ZhiPuAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    @GetMapping(value = "/ai/generateStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }
}

手動配置

ZhiPuAiChatModel 實現了 ChatModelStreamingChatModel,並使用 低階 ZhiPuAiApi 客戶端 連線到智譜 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 新增到您的構建檔案中。

接下來,建立一個 ZhiPuAiChatModel 並將其用於文字生成

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

var chatModel = new ZhiPuAiChatModel(this.zhiPuAiApi, ZhiPuAiChatOptions.builder()
                .model(ZhiPuAiApi.ChatModel.GLM_4_Air.getValue())
                .temperature(0.4)
                .maxTokens(200)
                .build());

ChatResponse response = this.chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

// Or with streaming responses
Flux<ChatResponse> streamResponse = this.chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

ZhiPuAiChatOptions 提供了聊天請求的配置資訊。ZhiPuAiChatOptions.Builder 是一個流暢的選項構建器。

低階 ZhiPuAiApi 客戶端

ZhiPuAiApi 提供了一個輕量級的 Java 客戶端,用於 智譜 AI API

這是一個如何以程式設計方式使用 API 的簡單片段

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

ChatCompletionMessage chatCompletionMessage =
    new ChatCompletionMessage("Hello world", Role.USER);

// Sync request
ResponseEntity<ChatCompletion> response = this.zhiPuAiApi.chatCompletionEntity(
    new ChatCompletionRequest(List.of(this.chatCompletionMessage), ZhiPuAiApi.ChatModel.GLM_4_Air.getValue(), 0.7, false));

// Streaming request
Flux<ChatCompletionChunk> streamResponse = this.zhiPuAiApi.chatCompletionStream(
        new ChatCompletionRequest(List.of(this.chatCompletionMessage), ZhiPuAiApi.ChatModel.GLM_4_Air.getValue(), 0.7, true));

有關更多資訊,請參閱 ZhiPuAiApi.java 的 JavaDoc。

ZhiPuAiApi 示例

© . This site is unofficial and not affiliated with VMware.