Bedrock Converse API
Amazon Bedrock Converse API 为对话式 AI 模型提供统一接口,具有增强功能,包括 function/tool calling、multimodal 输入和 streaming 响应。
Bedrock Converse API 具有以下高级功能:
- Tool/Function Calling: 支持对话期间的 function 定义和 tool 使用
- Multimodal Input: 能够在对话中处理文本和图像输入
- Streaming Support: 模型响应的实时 streaming
- System Messages: 支持系统级指令和上下文设置
提示: Bedrock Converse API 在多个模型提供商之间提供统一接口,同时处理 AWS 特定的身份验证和基础设施问题。 目前,Converse API Supported Models 包括:
Amazon Titan、Amazon Nova、AI21 Labs、Anthropic Claude、Cohere Command、Meta Llama、Mistral AI。
注意: 遵循 Bedrock 建议,Spring AI 正在过渡到使用 Amazon Bedrock 的 Converse API 来实现 Spring AI 中的所有 chat conversation 实现。 虽然现有的 InvokeModel API 支持对话应用程序,但我们强烈建议为所有 Chat conversation 模型采用 Converse API。
Converse API 不支持 embedding 操作,因此这些操作将保留在当前 API 中,现有
InvokeModel API中的 embedding model 功能将得到维护
Prerequisites
请参阅 Getting started with Amazon Bedrock 以设置 API 访问
-
获取 AWS 凭据:如果您还没有 AWS 账户和 AWS CLI 配置,此视频指南可以帮助您配置它:AWS CLI & SDK Setup in Less Than 4 Minutes!。您应该能够获得您的访问和安全密钥。
-
启用要使用的模型:转到 Amazon Bedrock 并从左侧的 Model Access 菜单,配置对您要使用的模型的访问。
Auto-configuration
注意: Spring AI auto-configuration、starter modules 的 artifact 名称发生了重大变化。 请参阅 upgrade notes 了解更多信息。
将 spring-ai-starter-model-bedrock-converse 依赖项添加到项目的 Maven pom.xml 或 Gradle build.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'
}
提示: 请参阅 Dependency Management 部分,将 Spring AI BOM 添加到您的构建文件中。
Chat Properties
前缀 spring.ai.bedrock.aws 是用于配置与 AWS Bedrock 连接的属性前缀。
| Property | Description | Default |
|---|---|---|
| spring.ai.bedrock.aws.region | 要使用的 AWS 区域 | us-east-1 |
| spring.ai.bedrock.aws.timeout | AWS 整个 API 调用的最大持续时间 | 5m |
| spring.ai.bedrock.aws.connectionTimeout | 建立连接时等待的最大持续时间 | 5s |
| spring.ai.bedrock.aws.connectionAcquisitionTimeout | 从池中等待新连接的最大持续时间 | 30s |
| spring.ai.bedrock.aws.asyncReadTimeout | 读取异步响应所花费的最大持续时间 | 30s |
| spring.ai.bedrock.aws.access-key | AWS access key | - |
| spring.ai.bedrock.aws.secret-key | AWS secret key | - |
| spring.ai.bedrock.aws.session-token | 用于临时凭据的 AWS session token | - |
| spring.ai.bedrock.aws.profile.name | AWS profile 名称。 | - |
| spring.ai.bedrock.aws.profile.credentials-path | AWS credentials 文件路径。 | - |
| spring.ai.bedrock.aws.profile.configuration-path | AWS config 文件路径。 | - |
注意: 现在通过前缀为
spring.ai.model.chat的顶级属性来配置 chat auto-configurations 的启用和禁用。要启用,spring.ai.model.chat=bedrock-converse(默认启用)
要禁用,spring.ai.model.chat=none(或任何与 bedrock-converse 不匹配的值)
此更改是为了允许配置多个模型。
前缀 spring.ai.bedrock.converse.chat 是用于配置 Converse API 的 chat model 实现的属性前缀。
| Property | Description | Default |
|---|---|---|
| spring.ai.bedrock.converse.chat.enabled (Removed and no longer valid) | 启用 Bedrock Converse chat model。 | true |
| spring.ai.model.chat | 启用 Bedrock Converse chat model。 | bedrock-converse |
| spring.ai.bedrock.converse.chat.options.model | 要使用的模型 ID。您可以使用 Supported models and model features | None。从 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 | 生成响应中的最大 tokens 数。 | 500 |
Runtime Options [[chat-options]]
使用可移植的 ChatOptions 或 BedrockChatOptions 可移植构建器来创建模型配置,例如 temperature、maxToken、topP 等。
在启动时,可以使用 BedrockConverseProxyChatModel(api, options) 构造函数或 spring.ai.bedrock.converse.chat.options.* 属性来配置默认选项。
在运行时,您可以通过向 Prompt 调用添加新的、请求特定的选项来覆盖默认选项:
var options = BedrockChatOptions.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();
Prompt Caching
AWS Bedrock 的 prompt caching feature 允许您缓存经常使用的 prompts 以降低成本并提高重复交互的响应时间。 当您缓存 prompt 时,后续相同的请求可以重用缓存的内容,从而显著减少处理的输入 tokens 数量。
注意: 支持的模型
Prompt caching 在通过 AWS Bedrock 提供的 Claude 3.x、Claude 4.x 和 Amazon Nova 模型上受支持。
Token 要求
不同的模型对缓存有效性有不同的最小 token 阈值:
- Claude Sonnet 4 和大多数模型:1024+ tokens
- 模型特定要求可能有所不同 - 请查阅 AWS Bedrock 文档
Cache Strategies
Spring AI 通过 BedrockCacheStrategy 枚举提供战略性缓存放置:
NONE: 完全禁用 prompt caching(默认)SYSTEM_ONLY: 仅缓存 system message 内容TOOLS_ONLY: 仅缓存 tool 定义(仅限 Claude 模型)SYSTEM_AND_TOOLS: 缓存 system message 和 tool 定义(仅限 Claude 模型)CONVERSATION_HISTORY: 在 chat memory 场景中缓存整个对话历史
这种战略性方法确保在遵守 AWS Bedrock 的 4 个断点限制的同时,在最佳位置放置缓存断点。
注意: Amazon Nova 限制
Amazon Nova 模型(Nova Micro、Lite、Pro、Premier)仅支持缓存
system和messages内容。 它们不支持缓存tools。