|
最新快照版本请使用Spring AI 1.1.0! |
Bedrock Converse API
亚马逊Bedrock Converse API为对话式AI模型提供了统一界面,具备增强功能,包括函数/工具调用、多模态输入和流式响应。
Bedrock Converse API 具有以下高级功能:
-
工具/功能调用:支持函数定义和对话中使用工具
-
多模态输入:能够处理对话中的文本和图像输入
-
流式支持:模型响应的实时流式流
-
系统消息:支持系统级指令和上下文设置
Bedrock Converse API 在处理 AWS 特有的认证和基础设施问题时,提供了跨多个型号提供商的统一接口。
目前,Converse API 支持的模型包括:亚马逊泰坦,亚马逊新星,AI21实验室,拟人克洛德,Cohere 指挥,元羊驼,密斯特拉尔人工智能. |
|
遵循 Bedrock 的建议,Spring AI 正在转向使用 Amazon Bedrock 的 Converse API 来实现所有聊天对话。 虽然现有的 InvokeModel API 支持对话应用,但我们强烈建议所有聊天对话模型采用 Converse API。 Converse API 不支持嵌入作,因此这些作将保留在当前 API,嵌入模型功能则保留在现有 API 中 |
前提条件
请参阅《亚马逊基石入门》一文,了解如何设置 API 访问
-
获取AWS凭证:如果你还没有AWS账户和AWS命令,这段视频指南可以帮助你配置:AWS CLI和SDK设置,4分钟内完成!你应该能获得你的访问和安全钥匙。
-
启用模型使用:进入亚马逊Bedrock,在左侧的模型访问菜单中配置你将要使用的模型访问权限。
自动配置
|
春季AI自动配置、起始模块的工件名称发生了重大变化。 更多信息请参阅升级说明。 |
添加Spring-AI-入门模型-Bedrock-Converse对你项目Maven的依赖pom.xml或者Gradlebuild.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的物料清单添加到你的构建文件中。 |
聊天属性
前缀春.ai.bedrock.aws是配置与AWS Bedrock连接的属性前缀。
| 属性 | 描述 | 默认值 |
|---|---|---|
spring.ai.bedrock.aws.region |
AWS地区的使用。 |
美国东1号 |
spring.ai.bedrock.aws.timeout |
AWS超时使用。 |
5米 |
spring.ai.bedrock.aws.访问密钥 |
AWS 访问密钥。 |
- |
Spring.ai.bedrock.aws.秘密密钥 |
AWS 秘密密钥。 |
- |
spring.ai.bedrock.aws.session-token(Spring)。Bedrock.aws.session-token(会话Tokens) |
AWS 会话Tokens用于临时凭证。 |
- |
|
现在,启用和禁用聊天自动配置通过带有前缀的顶层属性进行配置 启用时,spring.ai.model.chat=bedrock-converse(默认启用) 要禁用,请使用spring.ai.model.chat=none(或任何不匹配Bedrock-Converse的值) 此改动旨在允许配置多个模型。 |
前缀春.ai.bedrock.converse.chat是配置Converse API聊天模型实现的属性前缀。
| 属性 | 描述 | 默认值 |
|---|---|---|
spring.ai.bedrock.converse.chat.enabled(已移除且不再有效) |
启用Bedrock Converse聊天模式。 |
true |
spring.ai.model.chat |
启用Bedrock Converse聊天模式。 |
基岩-康弗斯 |
spring.ai.bedrock.converse.chat.options.model |
型号ID。你可以使用支持的模型和模型特性 |
没有。在AWS Bedrock控制台中选择你的modelID。 |
spring.ai.bedrock.converse.chat.options.temperature.temperature |
控制输出的随机性。数值范围可为 [0.0,1.0] |
0.8 |
spring.ai.bedrock.converse.chat.options.top-p |
抽样时需要考虑的Tokens的最大累计概率。 |
AWS Bedrock 默认设置 |
spring.ai.bedrock.converse.chat.options.top-k |
生成下一个Tokens时的Tokens选择数量。 |
AWS Bedrock 默认设置 |
spring.ai.bedrock.converse.chat.options.max标记 |
生成的响应中最多的Tokens数。 |
500 |
运行时选项
用便携式聊天选项或工具呼叫聊天选项便携式构建器用于创建模型配置,如温度、maxToken、topP 等。
启动时,默认选项可以配置为BedrockConverseProxyChatModel(api, options)构造者或spring.ai.bedrock.converse.chat.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();
工具调用
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
@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();
更多信息请参见工具文档。
模 态
多模态指的是模型能够同时理解和处理来自多种来源的信息,包括文本、图片、视频、PDF、文档、HTML、数据格式等。
Bedrock Converse API 支持多模态输入,包括文本和图像输入,并可根据合并输入生成文本响应。
你需要一个支持多模态输入的模型,比如Anthropic Claude或Amazon Nova型号。
图像
对于支持视觉多模态的模型,如亚马逊Nova、Anthropic Claude、Llama 3.2,亚马逊的Bedrock Converse API允许你在负载中包含多张图像。这些模型可以分析传递的图像并回答问题,对图像进行分类,并根据提供的指令进行图像的总结。
目前,Bedrock Converse 支持基地64编码图像图片/jpeg,图片/PNG,图片/动图和image/webp哑剧类型。
春季 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. ...
视频
Amazon Nova 型号允许你在负载中包含一个视频,视频可以以 base64 格式提供,也可以通过 Amazon S3 URI 提供。
目前,Bedrock Nova 支持以下视频视频/X-matroska,视频/QuickTime,视频/mp4,视频/网络管理,视频/X-FLV,视频/MPEG,视频/x-ms-WMV和视频/3GPP哑剧类型。
春季 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 ...
文件
对于某些型号,Bedrock 允许你通过 Converse API 文档支持将文档包含在有效载荷中,文档支持以字节形式提供。 文档支持有两种不同版本,如下所述:
-
文本文档类型(txt、csv、html、md等),强调文本理解。这些用例包括基于文档文本元素进行回答。
-
媒体文档类型(PDF、DOCX、XLX),强调基于愿景的理解以回答问题。这些用例包括基于图表、图表等回答问题。
目前,Anthropic PDF 支持(测试版)和亚马逊 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. ...
采样控制器
创建一个新的 Spring Boot 项目并添加Spring-AI-入门模型-Bedrock-Converse对你的依赖。
添加一个application.properties归档于以下src/主/资源:
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();
}
}