跳到主要内容

Amazon Bedrock

Maven 依赖

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bedrock</artifactId>
<version>1.18.1</version>
</dependency>

AWS 凭证

要使用 Amazon Bedrock 模型,需要配置 AWS 凭证。 其中一种方式是设置 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量。更多信息见此处。也可以在本地设置 AWS_BEARER_TOKEN_BEDROCK 环境变量,以使用 API Key 进行身份验证。有关 API 密钥的更多细节,请参阅文档

BedrockChatModel

备注

当前实现不支持 Guardrails(防护栏)。

支持的模型及其功能见此处

模型 ID 见此处

配置

ChatModel model = BedrockChatModel.builder()
.client(BedrockRuntimeClient)
.region(...)
.modelId("us.amazon.nova-lite-v1:0")
.returnThinking(...)
.sendThinking(...)
.timeout(...)
.maxRetries(...)
.logRequests(...)
.logResponses(...)
.listeners(...)
.defaultRequestParameters(BedrockChatRequestParameters.builder()
.modelName(...)
.temperature(...)
.topP(...)
.maxOutputTokens(...)
.stopSequences(...)
.toolSpecifications(...)
.toolChoice(...)
.additionalModelRequestFields(...)
.additionalModelRequestField(...)
.enableReasoning(...)
.promptCaching(...)
.build())
.build();

示例

BedrockStreamingChatModel

备注

当前实现不支持 Guardrails(防护栏)。

支持的模型及其功能见此处

模型 ID 见此处

配置

StreamingChatModel model = BedrockStreamingChatModel.builder()
.client(BedrockRuntimeAsyncClient)
.region(...)
.modelId("us.amazon.nova-lite-v1:0")
.returnThinking(...)
.sendThinking(...)
.timeout(...)
.logRequests(...)
.logResponses(...)
.listeners(...)
.defaultRequestParameters(BedrockChatRequestParameters.builder()
.modelName(...)
.temperature(...)
.topP(...)
.maxOutputTokens(...)
.stopSequences(...)
.toolSpecifications(...)
.toolChoice(...)
.additionalModelRequestFields(...)
.additionalModelRequestField(...)
.enableReasoning(...)
.promptCaching(...)
.build())
.build();

示例

额外模型请求字段(Additional Model Request Fields)

BedrockChatRequestParameters 中的 additionalModelRequestFields 字段类型为 Map<String, Object>。 如此处所述, 它允许你为特定模型添加通用 InferenceConfiguration 未覆盖的推理参数。

Thinking / Reasoning(思考 / 推理)

要启用 Claude 的思考过程,请在 BedrockChatRequestParameters 上调用 enableReasoning,并在构建模型时通过 defaultRequestParameters 设置:

BedrockChatRequestParameters parameters = BedrockChatRequestParameters.builder()
.enableReasoning(1024) // token budget
.build();

ChatModel model = BedrockChatModel.builder()
.modelId("us.anthropic.claude-sonnet-4-20250514-v1:0")
.defaultRequestParameters(parameters)
.returnThinking(true)
.sendThinking(true)
.build();

以下参数也会控制思考行为:

  • returnThinking:控制是否在 AiMessage.thinking() 中返回思考内容(若可用), 以及在使用 BedrockStreamingChatModel 时是否调用 StreamingChatResponseHandler.onPartialThinking()TokenStream.onPartialThinking() 回调。 默认禁用。若启用,思考签名也会被存储并在 AiMessage.attributes() 中返回。
  • sendThinking:控制是否在后续请求中将存储在 AiMessage 中的思考内容与签名发送给 LLM。 默认启用。

提示缓存(Prompt Caching)

AWS Bedrock 支持提示缓存,以便在使用相似提示进行重复 API 调用时提升性能并降低成本。该功能可将缓存内容的延迟最多降低约 85%,成本最多降低约 90%。

工作原理

提示缓存允许你在对话中标记特定位置进行缓存。当你使用相同的缓存内容发起后续 API 调用时,Bedrock 可以复用已缓存的部分,从而显著缩短处理时间并降低成本。缓存的 TTL(存活时间)为 5 分钟,每次缓存命中时会重置。

支持的模型

以下模型支持提示缓存:

  • Claude Opus 4.5
  • Claude Opus 4.1
  • Claude Opus 4
  • Claude Sonnet 4.5
  • Claude Haiku 4.5
  • Claude Sonnet 4
  • Claude 3.7 Sonnet
  • Claude 3.5 Sonnet
  • Claude 3.5 Haiku
  • Amazon Nova models

配置

要启用提示缓存,请在 BedrockChatRequestParameters 中使用 promptCaching() 方法:

import dev.langchain4j.model.bedrock.BedrockChatRequestParameters;
import dev.langchain4j.model.bedrock.BedrockCachePointPlacement;

BedrockChatRequestParameters params = BedrockChatRequestParameters.builder()
.promptCaching(BedrockCachePointPlacement.AFTER_SYSTEM)
.temperature(0.7)
.maxOutputTokens(500)
.build();

ChatModel model = BedrockChatModel.builder()
.modelId("us.amazon.nova-micro-v1:0")
.region(Region.US_EAST_1)
.defaultRequestParameters(params)
.build();

缓存点放置选项

BedrockCachePointPlacement 枚举提供了三种在对话中放置缓存点的选项:

  • AFTER_SYSTEM:将缓存点放在系统消息之后。适合你有一份希望在多个对话中复用的稳定系统提示的场景。
  • AFTER_USER_MESSAGE:将缓存点放在用户消息之后。适合你有一份保持不变的标准用户提示或上下文的场景。
  • AFTER_TOOLS:将缓存点放在工具定义之后。适合你有一组希望缓存的稳定工具定义的场景。

示例

基本用法:缓存系统消息

// Configure prompt caching to cache after system message
BedrockChatRequestParameters params = BedrockChatRequestParameters.builder()
.promptCaching(BedrockCachePointPlacement.AFTER_SYSTEM)
.build();

ChatModel model = BedrockChatModel.builder()
.modelId("us.anthropic.claude-sonnet-4-6")
.defaultRequestParameters(params)
.build();

// First request - establishes the cache
ChatRequest request1 = ChatRequest.builder()
.messages(Arrays.asList(
SystemMessage.from("You are a helpful coding assistant with expertise in Java."),
UserMessage.from("What is dependency injection?")
))
.build();

ChatResponse response1 = model.chat(request1);

// Second request - benefits from cached system message
ChatRequest request2 = ChatRequest.builder()
.messages(Arrays.asList(
SystemMessage.from("You are a helpful coding assistant with expertise in Java."),
UserMessage.from("What is the singleton pattern?")
))
.build();

ChatResponse response2 = model.chat(request2); // Faster response due to caching

与其他功能组合使用

提示缓存可以与其他 Bedrock 功能(如推理)组合使用:

BedrockChatRequestParameters params = BedrockChatRequestParameters.builder()
.promptCaching(BedrockCachePointPlacement.AFTER_SYSTEM)
.enableReasoning(1000) // Enable reasoning with 1000 token budget
.temperature(0.3)
.maxOutputTokens(2000)
.build();

ChatModel model = BedrockChatModel.builder()
.modelId("us.anthropic.claude-sonnet-4-6")
.defaultRequestParameters(params)
.build();

最佳实践

  1. 缓存稳定内容:对不常变化的内容使用缓存,例如系统提示、工具定义或通用上下文。
  2. 选择合适的放置位置
    • 当系统提示在各对话间保持一致时,使用 AFTER_SYSTEM
    • 当你有一组稳定的工具定义时,使用 AFTER_TOOLS
    • 当有重复的用户上下文时,使用 AFTER_USER_MESSAGE
  3. 监控缓存命中:5 分钟 TTL 会在每次缓存命中时重置,因此使用相同缓存内容的频繁请求可以维持缓存。
  4. 成本优化:对于反复使用的长系统提示或工具定义,缓存尤其有益。

更多资源