

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用于加快模型推理速度的提示缓存
<a name="prompt-caching"></a>

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

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

使用提示缓存时，从缓存读取的词元将按较低费率计费。根据模型的不同，写入缓存的词元的费率可能高于未缓存输入词元。所有未从缓存读取或写入缓存的词元都按该模型的标准输入词元费率计费。有关更多信息，请参阅 [Amazon Bedrock 定价](https://aws.amazon.com/bedrock/pricing/)页面。

## 工作原理
<a name="prompt-caching-overview"></a>

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

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

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

**Converse 和 ConverseStream APIs**  
您可以与模型进行对话，并在提示中指定缓存检查点。

**InvokeModel 和 InvokeModelWithResponseStream APIs**  
您可以提交单独的提示请求，在请求中启用提示缓存并指定缓存检查点。

**跨区域推理的提示缓存**  
提示缓存可以与跨区域推理结合使用。跨区域推理会自动选择您所在地理 AWS 区域内的最佳区域来满足您的推理请求，从而最大限度地提高可用资源和模型可用性。在需求高峰期，这些优化可能会导致缓存写入量增加。

**Amazon Bedrock 提示管理器**  
[创建](prompt-management-create.md)或[修改](prompt-management-modify.md)提示时，您可以选择启用提示缓存。根据模型，您可以缓存系统提示、系统指令和消息（用户和助手）。您也可以选择禁用提示缓存。

它们为您 APIs 提供了对提示缓存的最大灵活性和精细控制。您可以在提示中设置单独的缓存检查点。您可以通过创建更多缓存检查点来增加缓存内容，创建的数量上限为特定模型允许的最大缓存检查点数量。有关更多信息，请参阅 [支持的模型、区域和限制](#prompt-caching-models)。

## 支持的模型、区域和限制
<a name="prompt-caching-models"></a>

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


| 模型名称 | 模型 ID | 版本类型 | 每个缓存检查点的最小词元数 | 每个请求的最大缓存检查点数 | 支持的 TTL | 接受提示缓存检查点的字段 | 
| --- | --- | --- | --- | --- | --- | --- | 
| Claude Opus4.5 | anthropic.claude-opus-4-5-20251101-v 1:0 | 正式发布 | 4,096 | 4 | 5 分钟 1 小时 | “system”、“messages”和“tools” | 
| Claude Opus4.1 | anthropic.claude-opus-4-1-20250805-v1:0 | 正式发布 | 1024 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Claude Opus 4 | anthropic.claude-opus-4-20250514-v1:0 | 正式发布 | 1024 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Claude Sonnet 4.5 | anthropic.claude-sonnet-4-5-20250929-v1:0 | 正式发布 | 1024 | 4 | 5 分钟 1 小时 | “system”、“messages”和“tools” | 
| Claude Haiku 4.5 | anthropic.claude-haiku-4-5-20251001-v1:0 | 正式发布 | 4,096 | 4 | 5 分钟 1 小时 | “system”、“messages”和“tools” | 
| Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 | 正式发布 | 1024 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Claude 3.7 Sonnet | anthropic.claude-3-7-sonnet-20250219-v1:0 | 正式发布 | 1024 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Claude 3.5 Haiku | anthropic.claude-3-5-haiku-20241022-v1:0 | 正式发布 | 2,048 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Claude 3.5 Sonnet v2 | anthropic.claude-3-5-sonnet-20241022-v2:0 | 预览 | 1024 | 4 | 5 分钟 | “system”、“messages”和“tools” | 
| Amazon Nova Micro | 亚马逊。 nova-micro-v1:0 | 正式发布 | 10001 | 4 | 5 分钟 | “system”和“messages” | 
| Amazon Nova Lite | 亚马逊。 nova-lite-v1:0 | 正式发布 | 10001 | 4 | 5 分钟 | “system”和“messages”2 | 
| Amazon Nova Pro | 亚马逊。 nova-pro-v1:0 | 正式发布 | 10001 | 4 | 5 分钟 | “system”和“messages”2 | 
| Amazon Nova Premier | 亚马逊。 nova-premier-v1:0 | 正式发布 | 10001 | 4 | 5 分钟 | “system”和“messages”2 | 
| 亚马逊 Nova 2 Lite | amazon.nova-2-lite-v 1:0 | 正式发布 | 10001 | 4 | 5 分钟 | “system”和“messages”2 | 

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

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

要在支持的型号（Claude Opus4.5、和Claude Sonnet 4.5）上使用 1 小时 TTL 选项Claude Haiku 4.5，请在缓存检查点中指定该`ttl`字段。在 Converse API 中，添加`"ttl": "1h"`至您的`cachePoint`对象。在 Claude 模型的 InvokeModel API 中，添加`"ttl": "1h"`至您的`cache_control`对象。如果未提供任何`ttl`值，则适用默认的 5 分钟缓存行为。1 小时 TTL 对于运行时间较长的会话或需要长时间维护缓存的批处理场景非常有用。

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

## 简化 Claude 模型的缓存管理
<a name="prompt-caching-simplified"></a>

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

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

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

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

## 如何有效使用提示缓存
<a name="prompt-caching-effective-use"></a>

如果您有按常规节奏使用的提示（即系统提示的使用频率高于每 5 分钟一次），请继续使用 5 分钟缓存，因为该缓存将继续刷新，无需额外付费。

1 小时缓存最适合用于以下场景：
+ 当你的提示使用频率可能低于 5 分钟，但频率高于每小时使用频率时。例如，当代理副代理花费的时间将超过 5 分钟，或者存储与用户的长时间聊天对话时，您通常预计该用户在接下来的 5 分钟内可能不会做出回应。
+ 当延迟很重要并且您的后续提示可能会超过 5 分钟时。
+ 当你想提高速率限制利用率时，因为缓存命中率不会从速率限制中扣除。

您可以在同一个请求中同时使用 1 小时和 5 分钟的缓存控制，但有一个重要的限制：TTL 较长的缓存条目必须出现在较短的缓存条目之前 TTLs （即，1 小时的缓存条目必须出现在任何 5 分钟的缓存条目之前）。

## 开始使用
<a name="prompt-caching-get-started"></a>

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

### Converse API
<a name="prompt-caching-converse"></a>

[Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) API 为在多回合对话中实施提示缓存供了先进而灵活的方案。有关各个模型的提示要求的更多信息，请参阅之前的[支持的模型、区域和限制](#prompt-caching-models)部分。

**示例请求**

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

按如下方式指定所需的 ttl 值，如果未指定 ttl 值，则适用 5 分钟缓存的默认行为。

```
"cachePoint" : {
    "type": "default",
    "ttl" : "5m | 1h"
}
```

------
#### [ 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` 字段中提供工具定义。（或者，您也可以调用之前定义的工具。有关更多信息，请参阅[使用工具完成 Amazon Bedrock 模型响应](tool-use.md)。） 之后，您可以添加 `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` 值表示写入缓存的词元数量。这些`CacheDetails`值告诉你写入缓存的令牌数量所使用的 ttl。Amazon Bedrock 根据这两个值向您收取费用，其费率会低于完整模型推理。

### InvokeModel API
<a name="prompt-caching-invoke"></a>

默认情况下，当您调用 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API 时，提示缓存处于启用状态。您可以在请求正文中的任何位置设置缓存检查点，这与前面的 Converse API 示例类似。

------
#### [ Anthropic Claude ]

以下示例说明如何构建 Anthropic Claude 3.5 Sonnet v2 模型 InvokeModel请求的正文。请注意， InvokeModel 请求正文的确切格式和字段可能会因您选择的模型而异。要查看不同模型的请求和响应正文的格式和内容，请参阅[基础模型的推理请求参数和响应字段](model-parameters.md)。

按如下方式指定所需的 ttl 值，如果未指定 ttl 值，则适用 5 分钟缓存的默认行为。

```
"cache_control" : {
    "type": "ephemeral",
    "ttl" : "5m | 1h"
}
```

```
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 请求正文的确切格式和字段可能会因您选择的模型而异。要查看不同模型的请求和响应正文的格式和内容，请参阅[基础模型的推理请求参数和响应字段](model-parameters.md)。

```
{
    "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](inference-invoke.md)。

### 演练场
<a name="prompt-caching-playground"></a>

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

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

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

1. 打开**提示缓存**开关。

1. 运行您的提示。

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

![\[Amazon Bedrock 文本演练场中用于提示缓存的 UI 开关。\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/prompt-caching/bedrock-prompt-caching-ui-toggle.png)


通过查看演练场响应中的**缓存指标**弹出窗口，您可以了解每次与模型交互时，从缓存中读取的词元数以及写入缓存的词元数，弹出窗口内容为：![\[The metrics icon shown in model responses when prompt caching is enabled.\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/prompt-caching/bedrock-prompt-caching-metrics-icon.png)

![\[缓存指标框，显示了从缓存中读取和写入缓存的词元数。\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/prompt-caching/bedrock-prompt-caching-metrics.png)


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