此版本仍在开发中,尚未被视为稳定版本。最新的快照版本请使用 Spring AI 1.0.0-SNAPSHOT!spring-doc.cn

基岩版 Converse API

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

Bedrock Converse API 具有以下高级功能:spring-doc.cn

  • 工具/函数调用:支持在对话期间使用函数定义和工具spring-doc.cn

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

  • 流式处理支持:模型响应的实时流式处理spring-doc.cn

  • 系统消息:支持系统级指令和上下文设置spring-doc.cn

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

根据 Bedrock 的建议,Spring AI 正在过渡到使用 Amazon Bedrock 的 Converse API 来实现 Spring AI 中的所有聊天对话。 虽然现有 API 支持对话应用程序,但我们强烈建议采用 Converse API 以获得以下几个主要优势:InvokeModel APIspring-doc.cn

  • 统一接口:编写一次代码,然后将其与任何受支持的 Amazon Bedrock 模型一起使用spring-doc.cn

  • 模型灵活性:无需更改代码即可在不同的对话模型之间无缝切换spring-doc.cn

  • 扩展功能:通过专用结构支持特定于模型的参数spring-doc.cn

  • 工具支持:与函数调用和工具使用功能原生集成spring-doc.cn

  • 多模态功能:内置对视觉和其他多模态功能的支持spring-doc.cn

  • 面向未来:与 Amazon Bedrock 的推荐最佳实践保持一致spring-doc.cn

Converse API 不支持嵌入操作,因此这些操作将保留在当前 API 中,并且将保留现有 API 中的嵌入模型功能InvokeModel APIspring-doc.cn

先决条件

请参阅 Amazon Bedrock 入门以设置 API 访问spring-doc.cn

自动配置

将依赖项添加到项目的 Maven 或 Gradle 构建文件中:spring-ai-bedrock-converse-spring-boot-starterpom.xmlbuild.gradlespring-doc.cn

<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'
}
请参阅 Dependency Management 部分,将 Spring AI BOM 添加到您的构建文件中。

聊天属性

prefix 是用于配置与 AWS Bedrock 的连接的属性前缀。spring.ai.bedrock.awsspring-doc.cn

财产 描述 违约

spring.ai.bedrock.aws.regionspring-doc.cn

要使用的 AWS 区域。spring-doc.cn

us-east-1 (美国东部-1)spring-doc.cn

spring.ai.bedrock.aws.timeoutspring-doc.cn

要使用的 AWS 超时。spring-doc.cn

5 分钟spring-doc.cn

spring.ai.bedrock.aws.access-keyspring-doc.cn

AWS 访问密钥。spring-doc.cn

-spring-doc.cn

spring.ai.bedrock.aws.secret-keyspring-doc.cn

AWS 密钥。spring-doc.cn

-spring-doc.cn

spring.ai.bedrock.aws.session-tokenspring-doc.cn

用于临时凭证的 AWS 会话令牌。spring-doc.cn

-spring-doc.cn

prefix 是为 Converse API 配置聊天模型实现的属性 prefix。spring.ai.bedrock.converse.chatspring-doc.cn

财产 描述 违约

spring.ai.bedrock.converse.chat.enabledspring-doc.cn

启用 Bedrock Converse 聊天模型。spring-doc.cn

spring-doc.cn

spring.ai.bedrock.converse.chat.options.modelspring-doc.cn

要使用的模型 ID。您可以使用 Supported models (支持的模型) 和 model (模型) 功能spring-doc.cn

没有。从 AWS Bedrock 控制台中选择您的 modelIdspring-doc.cn

spring.ai.bedrock.converse.chat.options.temperaturespring-doc.cn

控制输出的随机性。值的范围可以超过 [0.0,1.0]spring-doc.cn

0.8spring-doc.cn

spring.ai.bedrock.converse.chat.options.top-pspring-doc.cn

采样时要考虑的 token 的最大累积概率。spring-doc.cn

AWS Bedrock 默认spring-doc.cn

spring.ai.bedrock.converse.chat.options.top-kspring-doc.cn

用于生成下一个令牌的令牌选项数。spring-doc.cn

AWS Bedrock 默认spring-doc.cn

spring.ai.bedrock.converse.chat.options.max 代币spring-doc.cn

生成的响应中的最大令牌数。spring-doc.cn

500spring-doc.cn

运行时选项

使用便携式或便携式构建器创建模型配置,例如 temperature、maxToken、topP 等。ChatOptionsFunctionCallingOptionsspring-doc.cn

启动时,可以使用 constructor 或 properties 配置默认选项。BedrockConverseProxyChatModel(api, options)spring.ai.bedrock.converse.chat.options.*spring-doc.cn

在运行时,您可以通过向调用添加新的、特定于请求的选项来覆盖默认选项:Promptspring-doc.cn

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 支持函数调用功能,允许模型在对话期间使用工具。下面是如何定义和使用函数的示例:spring-doc.cn

@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();

Samples控制器

创建一个新的 Spring Boot 项目并将其添加到您的依赖项中。spring-ai-bedrock-converse-spring-boot-starterspring-doc.cn

在 下添加文件 :application.propertiessrc/main/resourcesspring-doc.cn

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

下面是一个使用 chat 模型的示例控制器:spring-doc.cn

@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();
    }
}