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 文件。
自動組態
將 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-v1
、anthropic.claude-v2
和 anthropic.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
將 regions 、access-key 和 secret-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 實作了 ChatModel
和 StreamingChatModel
,並使用底層 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 介面和建構區塊

用戶端支援 anthropic.claude-instant-v1
、anthropic.claude-v2
和 anthropic.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 以取得更多資訊。