用于加快模型推理速度的提示缓存 - Amazon Bedrock

用于加快模型推理速度的提示缓存

注意

Amazon Bedrock 提示缓存现已在 Claude 3.7 Sonnet、Claude 3.5 Haiku、Amazon Nova Micro、Amazon Nova Lite、Amazon Nova Pro 和 Amazon Nova Premier 中正式推出。客户如果在提示缓存预览版阶段获得了对 Claude 3.5 Sonnet v2 的访问权限,则将保留其访问权限,但其他客户不会再获得对 Claude 3.5 Sonnet v2 模型上的提示缓存的访问权限。

提示缓存是一项可选功能,可以在 Amazon Bedrock 上与受支持的模型配合使用,来降低推理响应延迟和输入词元成本。通过将部分上下文添加到缓存,模型可以利用缓存来跳过对输入的重新计算过程,从而使 Bedrock 能够共享计算资源来节省成本并降低响应延迟。

当您的工作负载包含冗长而重复的上下文,并且这些上下文频繁用于多个查询时,提示缓存会有所帮助。例如,如果您有一个聊天机器人,用户可以在其中上传文档并询问有关文档的问题,那么每次用户提供输入时,模型都需要处理文档,这可能非常耗时。利用提示缓存,您可以缓存文档,这样后续包含该文档的查询就无需重新处理文档。

使用提示缓存时,从缓存读取的词元将按较低费率计费。根据模型的不同,写入缓存的词元的费率可能高于未缓存输入词元。所有未从缓存读取或写入缓存的词元都按该模型的标准输入词元费率计费。有关更多信息,请参阅 Amazon Bedrock 定价页面。

工作方式

如果您选择使用提示缓存,Amazon Bedrock 会创建一个由缓存检查点组成的缓存。缓存检查点是一些标记,用于定义您希望缓存的提示的连续分段(通常称为提示前缀)。这些提示前缀在不同请求之间应保持静态,如果后续请求中对提示前缀进行了更改,则会导致缓存丢失。

缓存检查点具有最小和最大词元数,具体取决于您使用的特定模型。仅当您的提示前缀总数达到最小词元数时,您才能创建缓存检查点。例如,Anthropic Claude 3.7 Sonnet 模型要求每个缓存检查点包含至少 1024 个词元。这意味着您的第一个缓存检查点可以定义在第 1024 个词元之后,第二个缓存检查点可以定义在第 2048 个词元之后。如果您在未达到最小词元数时尝试添加缓存检查点,推理仍然会成功,但系统不会缓存您的前缀。缓存的生存时间(TTL)为五分钟,每次成功命中缓存后,TTL 都会重置。在此期间,缓存中的上下文将被保留。如果在 TTL 时段内没有发生缓存命中,缓存将过期。

每当您在 Amazon Bedrock 中使用受支持的模型进行模型推理时,您都可以使用提示缓存。以下 Amazon Bedrock 功能支持提示缓存:

Converse API 和 ConverseStream API

您可以与模型进行对话,并在提示中指定缓存检查点。

InvokeModel API 和 InvokeModelWithResponseStream API

您可以提交单独的提示请求,在请求中启用提示缓存并指定缓存检查点。

跨区域推理的提示缓存

提示缓存可以与跨区域推理结合使用。跨区域推理会自动选择您所在地理位置的最佳 AWS 区域处理推理请求,从而充分利用可用资源并尽可能提高模型可用性。在需求高峰期,这些优化可能会导致缓存写入量增加。

Amazon Bedrock 提示管理器

创建修改提示时,您可以选择启用提示缓存。根据模型,您可以缓存系统提示、系统指令和消息(用户和助手)。您也可以选择禁用提示缓存。

API 为您提供了高度灵活性以及对提示缓存的精细控制。您可以在提示中设置单独的缓存检查点。您可以通过创建更多缓存检查点来增加缓存内容,创建的数量上限为特定模型允许的最大缓存检查点数量。有关更多信息,请参阅 支持的模型、区域和限制

支持的模型、区域和限制

下表列出了支持的模型及其最小词元数、最大缓存检查点数以及可以使用缓存检查点的字段。

模型名称 模型 ID 版本类型 每个缓存检查点的最小词元数 每个请求的最大缓存检查点数 接受提示缓存检查点的字段

Claude 3 Opus 4.1

anthropic.claude-opus-4-1-20250805-v1:0

正式发布

1024

4

“system”、“messages”和“tools”

Claude Opus 4

anthropic.claude-opus-4-20250514-v1:0

正式发布

1024

4

“system”、“messages”和“tools”

Claude Sonnet 4.5

anthropic.claude-sonnet-4-5-20250929-v1:0

正式发布

1024

4

“system”、“messages”和“tools”

Claude Haiku 4.5

anthropic.claude-haiku-4-5-20251001-v1:0

正式发布

4,096

4

“system”、“messages”和“tools”

Claude Sonnet 4

anthropic.claude-sonnet-4-20250514-v1:0

正式发布

1024

4

“system”、“messages”和“tools”

Claude 3.7 Sonnet

anthropic.claude-3-7-sonnet-20250219-v1:0

正式发布

1024

4

“system”、“messages”和“tools”

Claude 3.5 Haiku

anthropic.claude-3-5-haiku-20241022-v1:0

正式发布

2,048

4

“system”、“messages”和“tools”

Claude 3.5 Sonnet v2

anthropic.claude-3-5-sonnet-20241022-v2:0

预览

1024

4

“system”、“messages”和“tools”

Amazon Nova Micro

amazon.nova-micro-v1:0

正式发布

10001

4

“system”和“messages”

Amazon Nova Lite

amazon.nova-lite-v1:0

正式发布

10001

4

“system”和“messages”2

Amazon Nova Pro

amazon.nova-pro-v1:0

正式发布

10001

4

“system”和“messages”2

Amazon Nova Premier

amazon.nova-premier-v1:0

正式发布

10001

4

“system”和“messages”2

1:Amazon Nova 模型对于提示缓存支持最多 2 万个词元。

2:提示缓存主要用于文本提示。

Amazon Nova 为所有文本提示(包括 UserSystem 消息)提供了自动提示缓存。这种机制可在提示以重复部分开头时降低延迟,即使没有显式配置也是如此。但是,为了实现成本节省和确保更稳定的性能优势,建议选择使用显式提示缓存

简化 Claude 模型的缓存管理

对于 Claude 模型,Amazon Bedrock 提供了简化的缓存管理方法,可减少手动放置缓存检查点时的复杂性。您无需指定确切的缓存检查点位置,只需在静态内容末尾设置一个断点即可使用自动缓存管理。

启用简化的缓存管理后,系统会自动在之前的内容块边界处检查缓存命中情况,从指定的断点开始回溯最多约 20 个内容块。这样,模型就可以从缓存中找到最长的匹配前缀,无需您预测最佳检查点位置。要使用此功能,请在静态内容的末尾且在任何动态或可变内容之前放置一个缓存检查点。系统将自动查找最佳缓存匹配。

为了实现更精细的控制,您仍然可以使用多个缓存检查点(Claude 模型最多支持 4 个)来指定确切的缓存边界。如果您要缓存的内容片段更新频率不同,或者您希望更精确地控制哪些内容会被缓存时,就应该使用多个缓存检查点。

重要

自动前缀检查只会从缓存检查点回溯大约 20 个内容块。如果您的静态内容超出了此范围,建议使用多个缓存检查点,或者重构提示以将最常重复使用的内容置于此范围内。

入门

以下部分针对通过 Amazon Bedrock 与模型进行交互的每种方法,简要概述了如何使用提示缓存功能。

Converse API 为在多回合对话中实施提示缓存供了先进而灵活的方案。有关各个模型的提示要求的更多信息,请参阅之前的支持的模型、区域和限制部分。

示例请求

以下示例展示在发送到 Converse API 请求的 messagessystemtools 字段中设置的缓存检查点。对于给定请求,您可以将检查点放在这些位置中的任何一个。例如,如果要向 Claude 3.5 Sonnet v2 模型发送请求,您可以在 messages 中放置两个缓存检查点,以及分别在 systemtools 中放置一个缓存检查点。有关构造和发送 Converse API 请求的更多详细信息以及示例,请参阅使用 Converse API 操作进行对话

messages checkpoints

在此示例中,第一个 image 字段为模型提供图像,第二个 text 字段要求模型分析图像。只要 content 对象中 cachePoint 前面的词元数达到了模型的最小词元数,系统就会创建一个缓存检查点。

... "messages": [ { "role": "user", "content": [ { "image": { "bytes": "asfb14tscve..." } }, { "text": "What's in this image?" }, { "cachePoint": { "type": "default" } } ] } ] ...
system checkpoints

在此示例中,您将在 text 字段中提供系统提示。此外,您还可以添加一个 cachePoint 字段来缓存系统提示。

... "system": [ { "text": "You are an app that creates play lists for a radio station that plays rock and pop music. Only return song names and the artist. " }, { "cachePoint": { "type": "default" } } ], ...
tools checkpoints

在此示例中,您在 toolSpec 字段中提供工具定义。(或者,您也可以调用之前定义的工具。有关更多信息,请参阅使用 Converse API 调用工具。) 之后,您可以添加 cachePoint 字段来缓存该工具。

... toolConfig={ "tools": [ { "toolSpec": { "name": "top_song", "description": "Get the most popular song played on a radio station.", "inputSchema": { "json": { "type": "object", "properties": { "sign": { "type": "string", "description": "The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKRP." } }, "required": [ "sign" ] } } } }, { "cachePoint": { "type": "default" } } ] } ...

来自 Converse API 的模型响应包含两个特定于提示缓存的新字段。CacheReadInputTokens 值表示由于您之前的请求而从缓存中读取的词元数量,CacheWriteInputTokens 值表示写入缓存的词元数量。Amazon Bedrock 根据这两个值向您收取费用,其费率会低于完整模型推理。

调用 InvokeModel API 时会默认启用提示缓存。您可以在请求正文中的任何位置设置缓存检查点,这与前面的 Converse API 示例类似。

Anthropic Claude

以下示例展示了如何为 Anthropic Claude 3.5 Sonnet v2 模型构造 InvokeModel 请求的正文。请注意,InvokeModel 请求正文的确切格式和字段可能会因您选择的模型而异。要查看不同模型的请求和响应正文的格式和内容,请参阅基础模型的推理请求参数和响应字段

body={ "anthropic_version": "bedrock-2023-05-31", "system":"Reply concisely", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe the best way to learn programming." }, { "type": "text", "text": "Add additional context here for the prompt that meets the minimum token requirement for your chosen model.", "cache_control": { "type": "ephemeral" } } ] } ], "max_tokens": 2048, "temperature": 0.5, "top_p": 0.8, "stop_sequences": [ "stop" ], "top_k": 250 }
Amazon Nova

以下示例展示如何为 Amazon Nova 模型构建 InvokeModel 请求的正文。请注意,InvokeModel 请求正文的确切格式和字段可能会因您选择的模型而异。要查看不同模型的请求和响应正文的格式和内容,请参阅基础模型的推理请求参数和响应字段

{ "system": [{ "text": "Reply Concisely" }], "messages": [{ "role": "user", "content": [{ "text": "Describe the best way to learn programming" }, { "text": "Add additional context here for the prompt that meets the minimum token requirement for your chosen model.", "cachePoint": { "type": "default" } }] }], "inferenceConfig": { "maxTokens": 300, "topP": 0.1, "topK": 20, "temperature": 0.3 } }

有关发送 InvokeModel 请求的更多信息,请参阅使用 InvokeModel 提交单个提示

在 Amazon Bedrock 控制台的聊天演练场中,您可以开启提示缓存选项,Amazon Bedrock 会自动为您创建缓存检查点。

按照使用操场在控制台中生成响应中的说明,在 Amazon Bedrock 演练场中开始使用提示。对于支持的模型,提示缓存会在演练场中自动开启。但是,如果未自动开启提示缓存,请执行以下操作来启用:

  1. 在左侧面板中,打开配置菜单。

  2. 打开提示缓存开关。

  3. 运行您的提示。

在您的输入和模型响应组合达到检查点所需的最小词元数(因模型而异)后,Amazon Bedrock 会自动为您创建第一个缓存检查点。随着您继续聊天,后续每次达到最小词元数时,就会创建一个新的检查点,最多不超过模型允许的最大检查点数。您可以随时选择提示缓存开关旁边的查看缓存检查点来查看缓存检查点,如以下屏幕截图所示。

Amazon Bedrock 文本演练场中用于提示缓存的 UI 开关。

通过查看演练场响应中的缓存指标弹出窗口,您可以了解每次与模型交互时,从缓存中读取的词元数以及写入缓存的词元数,弹出窗口内容为: The metrics icon shown in model responses when prompt caching is enabled.

缓存指标框,显示了从缓存中读取和写入缓存的词元数。

如果您在对话进行中关闭了提示缓存开关,仍可继续与模型聊天。