Bedrock Converse API

Amazon Bedrock Converse API 提供了一个统一的接口,用于具有增强功能的对话式 AI 模型,包括函数/工具调用、多模态输入和流式响应。

Bedrock Converse API 具有以下高级功能

  • 工具/函数调用:在对话过程中支持函数定义和工具使用

  • 多模态输入:能够在对话中处理文本和图像输入

  • 流支持:模型响应的实时流式传输

  • 系统消息:支持系统级指令和上下文设置

Bedrock Converse API 在多个模型提供商之间提供统一的接口,同时处理 AWS 特定的身份验证和基础设施问题。

遵循 Bedrock 建议,Spring AI 正在过渡到对 Spring AI 中所有聊天对话实现使用 Amazon Bedrock 的 Converse API。虽然现有的 InvokeModel API 支持对话应用程序,但我们强烈建议采用 Converse API 以获得以下几个关键优势

  • 统一接口:编写一次代码,并将其与任何受支持的 Amazon Bedrock 模型一起使用

  • 模型灵活性:在不同的对话模型之间无缝切换,无需更改代码

  • 扩展功能:通过专用结构支持模型特定参数

  • 工具支持:与函数调用和工具使用功能的原生集成

  • 多模态功能:内置支持视觉和其他多模态功能

  • 面向未来:符合 Amazon Bedrock 的推荐最佳实践

Converse API 不支持嵌入操作,因此这些操作将保留在当前 API 中,并且将维护现有 InvokeModel 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

运行时选项

使用可移植的 ChatOptionsFunctionCallingOptions 可移植构建器来创建模型配置,例如温度、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();
    }
}