Bedrock Anthropic 2 Chat

Anthropic 2 Chat API 已被棄用,並由新的 Anthropic Claude 3 Message API 取代。新專案請使用Anthropic Claude 3 Message API

Anthropic 的 Claude 是一個 AI 助理,其基於 Anthropic 對於訓練有益、誠實和無害的 AI 系統的研究。Claude 模型具有以下高階功能

  • 20 萬 Token 上下文視窗:Claude 擁有高達 20 萬的 token 容量,使其成為處理大量資訊的理想選擇,例如技術文件、程式碼庫和文學作品。

  • 支援任務:Claude 的多功能性涵蓋摘要、問答、趨勢預測和文件比較等任務,實現從對話到內容生成等廣泛應用。

  • AI 安全功能:Claude 建立在 Anthropic 的安全研究基礎之上,在其互動中優先考慮有益性、誠實性和無害性,從而降低品牌風險並確保負責任的 AI 行為。

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

Anthropic 的 Claude 2 和 3 模型也可直接在 Anthropic 自己的雲端平台上使用。Spring AI 提供了專用的Anthropic Claude用戶端來存取它。

先決條件

請參閱關於設定 API 存取的Spring AI on Amazon Bedrock 文件

新增儲存庫和 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 新增至您的建置檔案。

啟用 Anthropic Chat

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

export SPRING_AI_BEDROCK_ANTHROPIC_CHAT_ENABLED=true

聊天屬性

前綴 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.anthropic.chat 是用於組態 Claude 聊天模型實作的屬性前綴。

屬性 描述 預設值

spring.ai.bedrock.anthropic.chat.enabled

啟用 Bedrock Anthropic 聊天模型。預設為停用

false

spring.ai.bedrock.anthropic.chat.model

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

anthropic.claude-v2

spring.ai.bedrock.anthropic.chat.options.temperature

控制輸出的隨機性。值範圍為 [0.0,1.0]

0.8

spring.ai.bedrock.anthropic.chat.options.topP

取樣時要考慮的 token 的最大累積機率。

AWS Bedrock 預設值

spring.ai.bedrock.anthropic.chat.options.topK

指定生成模型用於產生下一個 token 的 token 選項數量。

AWS Bedrock 預設值

spring.ai.bedrock.anthropic.chat.options.stopSequences

組態最多四個生成模型可辨識的序列。在停止序列之後,生成模型會停止產生進一步的 token。傳回的文字不包含停止序列。

10

spring.ai.bedrock.anthropic.chat.options.anthropicVersion

要使用的生成模型版本。

bedrock-2023-05-31

spring.ai.bedrock.anthropic.chat.options.maxTokensToSample

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

500

查看 AnthropicChatModel 以取得其他模型 ID。支援的值為:anthropic.claude-instant-v1anthropic.claude-v2anthropic.claude-v2:1。模型 ID 值也可以在 AWS Bedrock 文件中關於基礎模型 ID 的說明中找到。

所有以 spring.ai.bedrock.anthropic.chat.options 為前綴的屬性都可以在執行時被覆寫,方法是將請求特定的執行階段選項新增至 Prompt 呼叫。

執行階段選項

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

在啟動時,可以使用 BedrockAnthropicChatModel(api, options) 建構子或 spring.ai.bedrock.anthropic.chat.options.* 屬性組態預設選項。

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

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

範例控制器

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

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

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.anthropic.chat.enabled=true
spring.ai.bedrock.anthropic.chat.options.temperature=0.8
spring.ai.bedrock.anthropic.chat.options.top-k=15
regionsaccess-keysecret-key 替換為您的 AWS 憑證。

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

@RestController
public class ChatController {

    private final BedrockAnthropicChatModel chatModel;

    @Autowired
    public ChatController(BedrockAnthropicChatModel 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);
    }
}

手動組態

BedrockAnthropicChatModel 實作了 ChatModelStreamingChatModel,並使用底層 AnthropicChatBedrockApi 用戶端連線到 Bedrock Anthropic 服務。

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 新增至您的建置檔案。

接下來,建立一個 BedrockAnthropicChatModel 並使用它進行文字生成

AnthropicChatBedrockApi anthropicApi =  new AnthropicChatBedrockApi(
    AnthropicChatBedrockApi.AnthropicModel.CLAUDE_V2.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(),
    new ObjectMapper(),
    Duration.ofMillis(1000L));

BedrockAnthropicChatModel chatModel = new BedrockAnthropicChatModel(this.anthropicApi,
    AnthropicChatOptions.builder()
        .withTemperature(0.6)
        .withTopK(10)
        .withTopP(0.8)
        .withMaxTokensToSample(100)
        .withAnthropicVersion(AnthropicChatBedrockApi.DEFAULT_ANTHROPIC_VERSION)
        .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."));

底層 AnthropicChatBedrockApi 用戶端

AnthropicChatBedrockApi 提供了一個輕量級 Java 用戶端,位於 AWS Bedrock Anthropic Claude 模型之上。

以下類別圖說明了 AnthropicChatBedrockApi 介面和建構區塊

AnthropicChatBedrockApi Class Diagram

用戶端支援 anthropic.claude-instant-v1anthropic.claude-v2anthropic.claude-v2:1 模型,用於同步(例如 chatCompletion())和串流(例如 chatCompletionStream())回應。

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

AnthropicChatBedrockApi anthropicChatApi = new AnthropicChatBedrockApi(
   AnthropicModel.CLAUDE_V2.id(), Region.US_EAST_1.id(), Duration.ofMillis(1000L));

AnthropicChatRequest request = AnthropicChatRequest
  .builder(String.format(AnthropicChatBedrockApi.PROMPT_TEMPLATE, "Name 3 famous pirates"))
  .withTemperature(0.8)
  .withMaxTokensToSample(300)
  .withTopK(10)
  .build();

// Sync request
AnthropicChatResponse response = this.anthropicChatApi.chatCompletion(this.request);

// Streaming request
Flux<AnthropicChatResponse> responseStream = this.anthropicChatApi.chatCompletionStream(this.request);
List<AnthropicChatResponse> responses = this.responseStream.collectList().block();

請參閱 AnthropicChatBedrockApi.java 的 JavaDoc 以取得更多資訊。