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。
前提条件(Prerequisites)
请参阅《Amazon Bedrock 入门》来设置 API 访问
- 获取 AWS 凭证:如果您还没有 AWS 账户和 AWS CLI 配置,本视频指南可以帮助您:AWS CLI 和开发工具包设置不到 4 分钟!您应该能够获取您的访问和安全密钥。
- 启用要使用的模型:转到 Amazon Bedrock, 从左侧的 “模型访问” 菜单中,配置对您将要使用的模型的访问权限。
自动配置(Auto-configuration)
将 spring-ai-starter-model-bedrock-converse
依赖项添加到项目的 Maven pom.xml
或 Gradle build.gradle build
文件中:
- Maven
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-bedrock-converse</artifactId> </dependency>
- Gradle
dependencies { implementation 'org.springframework.ai:spring-ai-starter-model-bedrock-converse' }
聊天属性(Chat Properties)
连接属性(Connection Properties)
前缀 spring.ai.bedrock.aws
是用于配置与 AWS Bedrock 的连接的属性前缀。
现在,通过以
spring.ai.model.chat
为前缀的顶级属性来配置和禁用 chat 自动配置。
要启用,spring.ai.model.chat=bedrock-converse
(默认启用)
若要禁用,spring.ai.model.chat=none
(或任何不匹配 bedrock-converse 的值)
这个更改是为了允许配置多个模型。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.bedrock.aws.region |
指定AWS区域,默认为美国东部1区. | us-east-1 |
spring.ai.bedrock.aws.timeout |
设置AWS请求超时时间,默认为5分钟. | 5m |
spring.ai.bedrock.aws.access-key |
AWS访问密钥,需要根据实际情况配置. | - |
spring.ai.bedrock.aws.secret-key |
AWS秘密密钥,需要根据实际情况配置 . | - |
spring.ai.bedrock.aws.session-token |
AWS临时凭证的会话令牌,用于临时访问权限. | - |
配置属性(Configuration Properties)
前缀 spring.ai.bedrock.converse.chat
是为 Converse API 配置 chat 模型实现的属性前缀。
属性 | 描述 | 默认值 |
---|---|---|
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 |
采样时考虑的最大累积概率。 | AWS Bedrock 默认值 |
spring.ai.bedrock.converse.chat.options.top-k |
生成下一个token时的token选择数量。 | AWS Bedrock 默认值 |
spring.ai.bedrock.converse.chat.options.max-tokens |
生成响应中的最大token数量。 | 500 |
运行时选项(Runtime Options)
使用便携式 ChatOptions 或 ToolCallingChatOptions 便携式构建器来创建模型配置,如 temperature、maxToken、topP 等。
在启动时,可以使用 BedrockConverseProxyChatModel (api,options)
构造函数或 spring.ai.bedrock.converse.chat.options.*
属性来配置默认选项。
在运行时,可以通过在 Prompt 调用中添加新的、特定请求的 options 来覆盖默认 options:
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();
工具 / 功能调用(Tool/Function Calling)
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
添加 @Bean 注解 作为工具:
@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?")
.toolNames("weatherFunction")
.inputType(Request.class)
.call()
.content();
多模态(Multimodal)
多模态是指模型同时理解和处理来自不同来源信息的能力,包括文本、图像、视频、pdf、doc、html、md 和更多数据格式。
Bedrock Converse API 支持多模态输入,包括文本
和图像
输入,并且可以基于组合输入生成文本响应。
你需要一个支持多模态输入的模型,例如 Anthropic Claude
或 Amazon Nova
模型。
图片(Images)
对于支持视觉多模态的模型,如 Amazon Nova
、Anthropic Claude
和 Llama 3.2
, Amazon 的 Bedrock Converse API 允许您在有效负载中包含多个图像。这些模型可以分析传递的图像并回答问题,对图像进行分类,并根据提供的说明对图像进行总结。
目前,Bedrock Converse 支持,包括 image/jpeg
, image/png
, image/gif
和 image/webp
mime 类型的 base64
编码图像。
Spring AI 的消息接口通过引入媒体类型
来支持多模态 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 图像作为输入:
伴随着 “解释一下你在这张照片上看到了什么?” 的文本信息,并产生类似以下内容的回复:
The image shows a close-up view of a wire fruit basket containing several pieces of fruit.
...
视频(Video)
Amazon Nova 模型允许您在有效负载中包含单个视频,该视频可以以 base64 格式或通过 Amazon S3 URI 提供。
目前,Bedrock Nova 支持 video/x-matroska
, video/quicktime
, video/mp4
, video/webm
, video/x-flv
, video/mpeg
, video/x-ms-wmv
和 video/3gpp
mime 类型的视频。
Spring AI 的消息接口通过引入媒体类型来支持多模态 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 图像作为输入:
伴随文本消息 “解释一下你在这个视频中看到了什么?”, 并生成类似以下内容的回复:
The video shows a group of baby chickens, also known as chicks, huddled together on a surface
...
文档(Documents)
对于某些模型,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
文档作为输入:
伴随着 “您是一位非常专业的文档总结专家。请总结给出的文档” 的短信,并产生类似这样的回复:
**Introduction:**
- Spring AI is designed to simplify the development of applications with artificial intelligence (AI) capabilities, aiming to avoid unnecessary complexity.
...
Sample Controller
创建一个新的 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 AnthropicChatModel chatModel;
@Autowired
public ChatController(AnthropicChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
@Operation(summary = "文本生成")
public Map<String, Object> generate(@RequestParam(value = "message", defaultValue = "你好!") String message) {
try {
String response = chatModel.call(message);
return Map.of(
"success", true,
"generation", response,
"message", "Generated successfully"
);
} catch (Exception e) {
return Map.of(
"success", false,
"error", e.getMessage(),
"message", "Generation failed"
);
}
}
@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);
}
}
最后编辑:Jeebiz 更新时间:2025-08-08 00:47