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 配置,则此视频指南可以帮助您进行配置:在不到 4 分钟内设置 AWS CLI 和 SDK!。您应该能够获取您的访问密钥和安全密钥。
-
启用要使用的模型:转到 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
可移植构建器来创建模型配置,例如温度、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();
}
}