Bedrock Converse API
Amazon Bedrock Converse API 為對話式 AI 模型提供了一個統一的介面,具有增強的功能,包括函式/工具呼叫、多模態輸入和流式響應。
Bedrock Converse API 具有以下高階功能
-
工具/函式呼叫:支援在對話中定義函式和使用工具
-
多模態輸入:能夠在對話中處理文字和影像輸入
-
流式支援:即時流式傳輸模型響應
-
系統訊息:支援系統級指令和上下文設定
Bedrock Converse API 提供了一個跨多個模型提供商的統一介面,同時處理 AWS 特定的認證和基礎設施問題。目前,Converse API 支援的模型 包括:Amazon Titan , Amazon Nova , AI21 Labs , Anthropic Claude , Cohere Command , Meta Llama , Mistral AI 。 |
遵循 Bedrock 的建議,Spring AI 正在過渡到使用 Amazon Bedrock 的 Converse API 來實現 Spring AI 中的所有聊天對話。雖然現有的 InvokeModel API 支援對話應用,但我們強烈建議所有聊天對話模型採用 Converse API。 Converse API 不支援 embedding 操作,因此這些操作將保留在當前 API 中,並且現有 |
先決條件
參考 Amazon Bedrock 入門 以設定 API 訪問。
-
獲取 AWS 憑據:如果您還沒有配置 AWS 賬戶和 AWS CLI,此影片指南可以幫助您配置:AWS CLI & SDK 設定,不到 4 分鐘!。您應該能夠獲取您的訪問金鑰和安全金鑰。
-
啟用要使用的模型:前往 Amazon Bedrock,在左側的 模型訪問 選單中,配置您將要使用的模型的訪問許可權。
自動配置
Spring AI 自動配置、starter 模組的 Artifact 名稱發生了重大變化。更多資訊請參考升級說明。 |
將 spring-ai-starter-model-bedrock-converse
依賴項新增到專案的 Maven pom.xml
或 Gradle build.gradle
構建檔案中。
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-bedrock-converse</artifactId>
</dependency>
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-bedrock-converse'
}
參考 依賴管理 部分,將 Spring AI BOM 新增到您的構建檔案中。 |
聊天屬性
字首 spring.ai.bedrock.aws
是用於配置與 AWS Bedrock 連線的屬性字首。
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.bedrock.aws.region |
要使用的 AWS 區域。 |
us-east-1 |
spring.ai.bedrock.aws.timeout |
要使用的 AWS 超時。 |
5 分鐘 |
spring.ai.bedrock.aws.access-key |
AWS 訪問金鑰。 |
- |
spring.ai.bedrock.aws.secret-key |
AWS 安全金鑰。 |
- |
spring.ai.bedrock.aws.session-token |
用於臨時憑據的 AWS 會話令牌。 |
- |
聊天自動配置的啟用和停用現在透過帶有字首 要啟用,設定 spring.ai.model.chat=bedrock-converse (預設啟用) 要停用,設定 spring.ai.model.chat=none (或任何不匹配 bedrock-converse 的值) 此更改是為了允許配置多個模型。 |
字首 spring.ai.bedrock.converse.chat
是用於配置 Converse API 聊天模型實現的屬性字首。
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.bedrock.converse.chat.enabled (已移除且不再有效) |
啟用 Bedrock Converse 聊天模型。 |
true |
spring.ai.model.chat |
啟用 Bedrock Converse 聊天模型。 |
bedrock-converse |
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 |
取樣時考慮的最大累積 token 機率。 |
AWS Bedrock 預設值 |
spring.ai.bedrock.converse.chat.options.top-k |
生成下一個 token 時考慮的 token 選擇數量。 |
AWS Bedrock 預設值 |
spring.ai.bedrock.converse.chat.options.max-tokens |
生成響應中的最大 token 數量。 |
500 |
執行時選項
使用可移植的 ChatOptions
或 ToolCallingChatOptions
構建器建立模型配置,例如 temperature, maxToken, topP 等。
啟動時,可以使用 BedrockConverseProxyChatModel(api, options)
建構函式或 spring.ai.bedrock.converse.chat.options.*
屬性配置預設選項。
執行時,您可以透過在 Prompt
呼叫中新增新的、請求特定的選項來覆蓋預設選項。
var options = ToolCallingChatOptions.builder()
.model("anthropic.claude-3-5-sonnet-20240620-v1:0")
.temperature(0.6)
.maxTokens(300)
.toolCallbacks(List.of(FunctionToolCallback.builder("getCurrentWeather", new WeatherService())
.description("Get the weather in location. Return temperature in 36°F or 36°C format. Use multi-turn if needed.")
.inputType(WeatherService.Request.class)
.build()))
.build();
String response = ChatClient.create(this.chatModel)
.prompt("What is current weather in Amsterdam?")
.options(options)
.call()
.content();
工具呼叫
Bedrock Converse API 支援工具呼叫功能,允許模型在對話中使用工具。以下是定義和使用基於 @Tool 的工具的示例
public class WeatherService {
@Tool(description = "Get the weather in location")
public String weatherByLocation(@ToolParam(description= "City or state name") String location) {
...
}
}
String response = ChatClient.create(this.chatModel)
.prompt("What's the weather like in Boston?")
.tools(new WeatherService())
.call()
.content();
您也可以將 java.util.function beans 用作工具。
@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?")
.tools("weatherFunction")
.inputType(Request.class)
.call()
.content();
更多內容請參閱工具文件。
多模態
多模態指的是模型同時理解和處理來自各種來源資訊的能力,包括文字、影像、影片、pdf、doc、html、md 和更多資料格式。
Bedrock Converse API 支援多模態輸入,包括文字和影像輸入,並可根據組合輸入生成文字響應。
您需要一個支援多模態輸入的模型,例如 Anthropic Claude 或 Amazon Nova 模型。
影像
對於支援視覺多模態的 模型,例如 Amazon Nova、Anthropic Claude、Llama 3.2,Bedrock Converse API Amazon 允許您在有效載荷中包含多個影像。這些模型可以分析傳遞的影像並回答問題、對影像進行分類,以及根據提供的指令總結影像。
目前,Bedrock Converse 支援 image/jpeg
、image/png
、image/gif
和 image/webp
MIME 型別的 base64
編碼影像。
Spring AI 的 Message
介面透過引入 Media
型別來支援多模態 AI 模型。它包含訊息中媒體附件的資料和資訊,使用 Spring 的 org.springframework.util.MimeType
和一個 java.lang.Object
來表示原始媒體資料。
下面是一個簡單的程式碼示例,演示了使用者文字與影像的結合。
String response = ChatClient.create(chatModel)
.prompt()
.user(u -> u.text("Explain what do you see on this picture?")
.media(Media.Format.IMAGE_PNG, new ClassPathResource("/test.png")))
.call()
.content();
logger.info(response);
它以 test.png
影像作為輸入

以及文字訊息“Explain what do you see on this picture?”,並生成類似如下的響應
The image shows a close-up view of a wire fruit basket containing several pieces of fruit. ...
影片
Amazon Nova 模型 允許您在有效載荷中包含單個影片,該影片可以 base64 格式提供,也可以透過 Amazon S3 URI 提供。
目前,Bedrock Nova 支援 video/x-matros
、video/quicktime
、video/mp4
、video/video/webm
、video/x-flv
、video/mpeg
、video/x-ms-wmv
和 image/3gpp
MIME 型別的影像。
Spring AI 的 Message
介面透過引入 Media`
型別來支援多模態 AI 模型。它包含訊息中媒體附件的資料和資訊,使用 Spring 的 org.springframework.util.MimeType
和一個 java.lang.Object
來表示原始媒體資料。
下面是一個簡單的程式碼示例,演示了使用者文字與影片的結合。
String response = ChatClient.create(chatModel)
.prompt()
.user(u -> u.text("Explain what do you see in this video?")
.media(Media.Format.VIDEO_MP4, new ClassPathResource("/test.video.mp4")))
.call()
.content();
logger.info(response);
它以 test.video.mp4
影像作為輸入

以及文字訊息“Explain what do you see in this video?”,並生成類似如下的響應
The video shows a group of baby chickens, also known as chicks, huddled together on a surface ...
文件
對於某些模型,Bedrock 允許您透過 Converse API 文件支援將文件包含在有效載荷中,文件可以以位元組形式提供。文件支援有兩種不同的變體,如下所述
-
文字文件型別 (txt, csv, html, md 等),重點在於文字理解。這些用例包括基於文件的文字元素進行回答。
-
媒體文件型別 (pdf, docx, xlsx),重點在於基於視覺的理解來回答問題。這些用例包括基於圖表等內容進行回答。
目前,Anthropic 的 PDF 支援 (beta) 和 Amazon Bedrock Nova 模型支援文件多模態。
下面是一個簡單的程式碼示例,演示了使用者文字與媒體文件的結合。
String response = ChatClient.create(chatModel)
.prompt()
.user(u -> u.text(
"You are a very professional document summarization specialist. Please summarize the given document.")
.media(Media.Format.DOC_PDF, new ClassPathResource("/spring-ai-reference-overview.pdf")))
.call()
.content();
logger.info(response);
它以 spring-ai-reference-overview.pdf
文件作為輸入

以及文字訊息“You are a very professional document summarization specialist. Please summarize the given document.”,並生成類似如下的響應
**Introduction:** - Spring AI is designed to simplify the development of applications with artificial intelligence (AI) capabilities, aiming to avoid unnecessary complexity. ...
示例控制器
建立一個新的 Spring Boot 專案,並將 spring-ai-starter-model-bedrock-converse
新增到您的依賴項中。
在 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();
}
}