Bedrock Converse API
Amazon Bedrock Converse API 為對話式 AI 模型提供統一介面,並具有增強功能,包括函數/工具呼叫、多模態輸入和串流回應。
Bedrock Converse API 具有以下高階功能
-
工具/函數呼叫:支援對話期間的函數定義和工具使用
-
多模態輸入:能夠在對話中處理文字和影像輸入
-
串流支援:模型回應的即時串流
-
系統訊息:支援系統級指令和情境設定
Bedrock Converse API 在處理 AWS 特定的身份驗證和基礎設施問題的同時,為多個模型提供者提供統一的介面。 |
根據 Bedrock 的建議,Spring AI 正在轉型為在 Spring AI 中的所有聊天對話實作中使用 Amazon Bedrock 的 Converse API。雖然現有的
Converse API 不支援嵌入操作,因此這些操作將保留在目前的 API 中,並且現有 |
先決條件
請參閱Amazon Bedrock 入門指南以設定 API 存取權限
-
取得 AWS 憑證:如果您還沒有 AWS 帳戶和 AWS CLI,此影片指南可以幫助您設定:AWS CLI 和 SDK 在 4 分鐘內完成設定!。您應該能夠取得您的存取金鑰和安全金鑰。
-
啟用要使用的模型:前往 Amazon Bedrock 並從左側的模型存取選單中,設定要使用的模型的存取權限。
自動設定
將 spring-ai-bedrock-converse-spring-boot-starter
相依性新增至專案的 Maven pom.xml
或 Gradle build.gradle
建置檔案
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bedrock-converse-spring-boot-starter</artifactId>
</dependency>
dependencies {
implementation 'org.springframework.ai:spring-ai-bedrock-converse-spring-boot-starter'
}
請參閱相依性管理章節,將 Spring AI BOM 新增至您的建置檔案。 |
聊天屬性
字首 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.aws.session-token |
用於暫時憑證的 AWS 會話令牌。 |
- |
字首 spring.ai.bedrock.converse.chat
是用於設定 Converse API 的聊天模型實作的屬性字首。
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.bedrock.converse.chat.enabled |
啟用 Bedrock Converse 聊天模型。 |
true |
spring.ai.bedrock.converse.chat.options.model |
要使用的模型 ID。您可以使用支援的模型和模型功能 |
無。從 AWS Bedrock 主控台選擇您的 modelId。 |
spring.ai.bedrock.converse.chat.options.temperature |
控制輸出的隨機性。值可以介於 [0.0,1.0] 之間 |
0.8 |
spring.ai.bedrock.converse.chat.options.top-p |
取樣時要考慮的令牌的最大累積機率。 |
AWS Bedrock 預設值 |
spring.ai.bedrock.converse.chat.options.top-k |
用於產生下一個令牌的令牌選項數量。 |
AWS Bedrock 預設值 |
spring.ai.bedrock.converse.chat.options.max-tokens |
產生回應中的最大令牌數。 |
500 |
執行階段選項
使用可攜式 ChatOptions
或 FunctionCallingOptions
可攜式建構器來建立模型配置,例如 temperature、maxToken、topP 等。
在啟動時,可以使用 BedrockConverseProxyChatModel(api, options)
建構函式或 spring.ai.bedrock.converse.chat.options.*
屬性來配置預設選項。
在執行階段,您可以透過將新的、請求特定的選項新增至 Prompt
呼叫來覆寫預設選項
var options = FunctionCallingOptions.builder()
.withModel("anthropic.claude-3-5-sonnet-20240620-v1:0")
.withTemperature(0.6)
.withMaxTokens(300)
.withFunctionCallbacks(List.of(FunctionCallback.builder()
.description("Get the weather in location. Return temperature in 36°F or 36°C format. Use multi-turn if needed.")
.function("getCurrentWeather", new WeatherService())
.inputType(WeatherService.Request.class)
.build()))
.build();
ChatResponse response = chatModel.call(new Prompt("What is current weather in Amsterdam?", options));
工具/函數呼叫
Bedrock Converse API 支援函數呼叫功能,允許模型在對話期間使用工具。以下是如何定義和使用函數的範例
@Bean
@Description("Get the weather in location. Return temperature in 36°F or 36°C format.")
public Function<Request, Response> weatherFunction() {
return new MockWeatherService();
}
String response = ChatClient.create(this.chatModel)
.prompt("What's the weather like in Boston?")
.function("weatherFunction")
.call()
.content();
範例控制器
建立一個新的 Spring Boot 專案,並將 spring-ai-bedrock-converse-spring-boot-starter
新增至您的相依性。
在 src/main/resources
下新增 application.properties
檔案
spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.timeout=10m
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}
# session token is only required for temporary credentials
spring.ai.bedrock.aws.session-token=${AWS_SESSION_TOKEN}
spring.ai.bedrock.converse.chat.options.temperature=0.8
spring.ai.bedrock.converse.chat.options.top-k=15
以下是使用聊天模型的範例控制器
@RestController
public class ChatController {
private final ChatClient chatClient;
@Autowired
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", this.chatClient.prompt(message).call().content());
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return this.chatClient.prompt(message).stream().content();
}
}