Titan Chat

Amazon Titan 基礎模型 (FM) 透過完全託管的 API,為客戶提供廣泛的高效能影像、多模態嵌入和文字模型選擇。Amazon Titan 模型由 AWS 建立,並在大型資料集上預先訓練,使其成為功能強大、通用型的模型,旨在支援各種使用案例,同時也支援負責任地使用 AI。您可以直接使用這些模型,或使用您自己的資料私下自訂它們。

AWS Bedrock Titan 模型頁面Amazon Bedrock 使用者指南包含如何使用 AWS 託管模型的詳細資訊。

先決條件

請參閱關於 Amazon Bedrock 的 Spring AI 文件,以設定 API 存取權。

新增儲存庫和 BOM

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

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

自動組態

spring-ai-bedrock-ai-spring-boot-starter 相依性新增至您專案的 Maven pom.xml 檔案

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

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

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

啟用 Titan Chat

預設情況下,Titan 模型已停用。若要啟用它,請將 spring.ai.bedrock.titan.chat.enabled 屬性設定為 true。匯出環境變數是設定此組態屬性的一種方式

export SPRING_AI_BEDROCK_TITAN_CHAT_ENABLED=true

Chat 屬性

字首 spring.ai.bedrock.aws 是用於組態連線至 AWS Bedrock 的屬性字首。

屬性 描述 預設值

spring.ai.bedrock.aws.region

要使用的 AWS 區域。

us-east-1

spring.ai.bedrock.aws.timeout

要使用的 AWS 超時。

5m

spring.ai.bedrock.aws.access-key

AWS 存取金鑰。

-

spring.ai.bedrock.aws.secret-key

AWS 秘密金鑰。

-

字首 spring.ai.bedrock.titan.chat 是用於組態 Titan 的 chat 模型實作的屬性字首。

屬性 描述 預設值

spring.ai.bedrock.titan.chat.enabled

啟用 Bedrock Titan chat 模型。預設為停用

false

spring.ai.bedrock.titan.chat.model

要使用的模型 ID。請參閱 TitanChatBedrockApi#TitanChatModel 以取得支援的模型。

amazon.titan-text-lite-v1

spring.ai.bedrock.titan.chat.options.temperature

控制輸出的隨機性。值可以介於 [0.0,1.0] 之間

0.7

spring.ai.bedrock.titan.chat.options.topP

在取樣時要考慮的符記最大累積機率。

AWS Bedrock 預設值

spring.ai.bedrock.titan.chat.options.stopSequences

組態最多四個產生器可辨識的序列。在停止序列之後,產生器會停止產生更多符記。傳回的文字不包含停止序列。

AWS Bedrock 預設值

spring.ai.bedrock.titan.chat.options.maxTokenCount

指定要在產生的回應中使用的符記最大數量。請注意,模型可能會在達到此最大值之前停止。此參數僅指定要產生的符記絕對最大數量。我們建議限制為 4,000 個符記以獲得最佳效能。

AWS Bedrock 預設值

請查看 TitanChatBedrockApi#TitanChatModel 以取得其他模型 ID。支援的值為:amazon.titan-text-lite-v1amazon.titan-text-express-v1amazon.titan-text-premier-v1:0。模型 ID 值也可以在 AWS Bedrock 文件中找到基本模型 ID

所有字首為 spring.ai.bedrock.titan.chat.options 的屬性都可以在執行階段透過將請求特定的執行階段選項新增至 Prompt 呼叫來覆寫。

執行階段選項

BedrockTitanChatOptions.java 提供模型組態,例如 temperature、topP 等。

在啟動時,可以使用 BedrockTitanChatModel(api, options) 建構函式或 spring.ai.bedrock.titan.chat.options.* 屬性來組態預設選項。

在執行階段,您可以透過將新的、請求特定的選項新增至 Prompt 呼叫來覆寫預設選項。例如,若要覆寫特定請求的預設 temperature

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        BedrockTitanChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
除了模型特定的 BedrockTitanChatOptions 之外,您還可以使用可攜式的 ChatOptions 實例,使用 ChatOptionsBuilder#builder() 建立。

範例控制器

建立新的 Spring Boot 專案,並將 spring-ai-bedrock-ai-spring-boot-starter 新增至您的 pom (或 gradle) 相依性。

src/main/resources 目錄下新增 application.properties 檔案,以啟用和組態 Titan chat 模型

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=1000ms
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}

spring.ai.bedrock.titan.chat.enabled=true
spring.ai.bedrock.titan.chat.options.temperature=0.8
regionsaccess-keysecret-key 取代為您的 AWS 憑證。

這將建立一個 BedrockTitanChatModel 實作,您可以將其注入到您的類別中。以下是一個簡單的 @Controller 類別範例,該類別使用 chat 模型進行文字產生。

@RestController
public class ChatController {

    private final BedrockTitanChatModel chatModel;

    @Autowired
    public ChatController(BedrockTitanChatModel 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("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }
}

手動組態

BedrockTitanChatModel 實作 ChatModelStreamingChatModel,並使用 Low-level TitanChatBedrockApi Client 連線至 Bedrock Titanic 服務。

spring-ai-bedrock 相依性新增至您專案的 Maven pom.xml 檔案

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

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

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

接下來,建立 BedrockTitanChatModel 並將其用於文字產生

TitanChatBedrockApi titanApi = new TitanChatBedrockApi(
    TitanChatModel.TITAN_TEXT_EXPRESS_V1.id(),
	EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(),
    new ObjectMapper(),
    Duration.ofMillis(1000L));

BedrockTitanChatModel chatModel = new BedrockTitanChatModel(this.titanApi,
    BedrockTitanChatOptions.builder()
        .withTemperature(0.6)
        .withTopP(0.8)
        .withMaxTokenCount(100)
    .build());

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

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

Low-level TitanChatBedrockApi Client

TitanChatBedrockApi 提供在 AWS Bedrock Bedrock Titan 模型之上的輕量級 Java 用戶端。

以下類別圖說明了 TitanChatBedrockApi 介面和建置區塊

bedrock titan chat low level api

用戶端支援 amazon.titan-text-lite-v1amazon.titan-text-express-v1 模型,用於同步 (例如 chatCompletion()) 和串流 (例如 chatCompletionStream()) 回應。

以下是一個簡單的程式碼片段,說明如何以程式設計方式使用 api

TitanChatBedrockApi titanBedrockApi = new TitanChatBedrockApi(TitanChatCompletionModel.TITAN_TEXT_EXPRESS_V1.id(),
		Region.US_EAST_1.id(), Duration.ofMillis(1000L));

TitanChatRequest titanChatRequest = TitanChatRequest.builder("Give me the names of 3 famous pirates?")
	.withTemperature(0.5)
	.withTopP(0.9)
	.withMaxTokenCount(100)
	.withStopSequences(List.of("|"))
	.build();

TitanChatResponse response = this.titanBedrockApi.chatCompletion(this.titanChatRequest);

Flux<TitanChatResponseChunk> response = this.titanBedrockApi.chatCompletionStream(this.titanChatRequest);

List<TitanChatResponseChunk> results = this.response.collectList().block();

請遵循 TitanChatBedrockApi 的 JavaDoc 以取得更多資訊。