

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

# 在运行推理之前，通过计算词元来监控您的词元使用情况
<a name="count-tokens"></a>

运行模型推理时，您在输入中发送的词元数量，会计入到请求的成本中，还会计入到您每分钟和每天可以使用的词元配额中。该 [ CountTokens ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) API通过返回在推理请求中向模型发送相同输入时使用的令牌数量，帮助您在向基础模型发送请求之前估算令牌使用量。

**注意**  
使用 [ CountTokens ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) API 不会产生费用。

**注意**  
某些 Anthropic Claude 模型，包括那些仅开启跨区域推理 (CRIS) 的模型，不支持开启`bedrock-runtime`。[ CountTokens ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) `bedrock-runtime`对于这些模型，改为通过在`bedrock-mantle`端点上调用 Anthropic 的 `count_tokens` API 来计算输入令牌。[使用 bedrock-mantle 端点计算代币](#count-tokens-mantle)有关 URL、请求正文和示例，请参见。

词元计数特定于模型，因为不同的模型使用不同的词元计算策略。此操作返回的词元计数，与向模型发送相同输入来运行推理时将收费的词元计数相符。

您可以使用 `CountTokens` API 来执行以下操作：
+ 在发送推理请求之前估算成本。
+ 优化提示以适应词元限制。
+ 规划应用程序中的词元使用量。

**Topics**
+ [支持词元计数的模型和区域](#count-tokens-supported)
+ [使用基岩运行时端点计算代币](#count-tokens-use)
+ [示例：计算基准运行时请求的代币](#count-tokens-example)
+ [使用 bedrock-mantle 端点计算代币](#count-tokens-mantle)

## 支持词元计数的模型和区域
<a name="count-tokens-supported"></a>

要查看哪些型号支持代币计数，请一目了然地访问[模型](model-cards.md)并选择您感兴趣的模型。

## 使用基岩运行时端点计算代币
<a name="count-tokens-use"></a>

要计算推理请求中的输入令牌数量，请使用 [ Amazon Bedrock 运行时终端节点发送[CountTokens](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html)请求](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt)，在标头中指定模型，并在字段中指定要计算令牌的输入。`body`该`body`字段的值取决于你是在计算请求的输入令牌还是 [ Converse ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) 请求[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)的输入令牌：
+ 对于 `InvokeModel` 请求，`body` 的格式是表示一个 JSON 对象的字符串，其格式取决于您指定的模型。
+ 对于 `Converse` 请求，`body` 的格式是一个 JSON 对象，指定对话中包含的 `messages` 和 `system` 提示。

## 示例：计算基准运行时请求的代币
<a name="count-tokens-example"></a>

此部分中的示例让您可以对通过 `InvokeModel` 和 `Converse` 发出的 Anthropic 和 Claude 3 Haiku 计算词元数量。

**先决条件**
+ 您已经下载 适用于 Python (Boto3) 的 AWS SDK 并设置了配置，可以自动识别您的凭证和默认 AWS 区域。
+ 您的 IAM 身份有权执行以下操作（有关更多信息，请参阅 [Amazon Bedrock 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html)）：
  + 基岩:CountTokens — 允许使用. `CountTokens` 
  + 基岩:InvokeModel — 允许使用`InvokeModel`和。`Converse`范围应至少限于。{{arn:${Partition}:bedrock:${Region}::foundation-model/anthropic.claude-3-haiku-20240307-v1:0}}

要尝试计算[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)请求的代币，请运行以下 Python 代码：

```
import boto3
import json

bedrock_runtime = boto3.client("bedrock-runtime")

input_to_count = json.dumps({
    "anthropic_version": "bedrock-2023-05-31",
    "max_tokens": 500,
    "messages": [
        {
            "role": "user",
            "content": "What is the capital of France?"
        }
    ]
})

response = bedrock_runtime.count_tokens(
    modelId="anthropic.claude-3-5-haiku-20241022-v1:0",
    input={
        "invokeModel": {
            "body": input_to_count
        }
    }
)

print(response["inputTokens"])
```

要尝试计算用于 [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) 请求的词元，请运行以下 Python 代码：

```
import boto3
import json 

bedrock_runtime = boto3.client("bedrock-runtime")

input_to_count = {
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "What is the capital of France?"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "The capital of France is Paris."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "text": "What is its population?"
                }
            ]
        }
    ],
    "system": [
        {
            "text": "You're an expert in geography."
        }
    ]
}

response = bedrock_runtime.count_tokens(
    modelId="anthropic.claude-3-5-haiku-20241022-v1:0",
    input={
        "converse": input_to_count
    }
)

print(response["inputTokens"])
```

## 使用 bedrock-mantle 端点计算代币
<a name="count-tokens-mantle"></a>

该`bedrock-mantle`端点公开了 Anthropic 的 `count_tokens` API，网址为。`/anthropic/v1/messages/count_tokens`使用它来计算不支持 [ CountTokens ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) on 的 Anthropic Claude 模型的输入令牌 `bedrock-runtime` ——例如，当模型仅通过跨区域推理 (CRIS) 开启时，因此没有 Region-specific 可供目标的终端节点。`bedrock-runtime` [ CountTokens ](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html)路`/anthropic/v1/messages`径是 Claude-specific；回归的非人类模型。`bedrock-mantle` `The model 'X' does not support the '/anthropic/v1/messages' API`

**请求详细信息**
+ **网址 ** —`POST https://bedrock-mantle.{{region}}.api.aws/anthropic/v1/messages/count_tokens`. 有关受支持的区域，请参阅 [支持的区域和终端节点](bedrock-mantle.md#bedrock-mantle-supported)。
+ **请求正文 **-人体形`count_tokens`状，包括`model``messages`、`system`和可选`tools`字段。请参阅 [ Anthropic Messages 计数代币参考文档](https://docs.anthropic.com/en/api/messages-count-tokens)。
+ **身份验证 ** — 要么是带有服务名称的 SigV4 签名`bedrock-mantle`，要么是标题中传递的亚马逊 Bedrock API 密钥。`x-api-key`请参阅[API 密钥](api-keys.md)。
+ **IAM 行动 ** —`bedrock-mantle:CountTokens`. 此操作使用`bedrock-mantle`服务前缀，出现在[亚马逊 Bedrock Powered by AWS Mantle 服务授权参考中](https://docs.aws.amazon.com/service-authorization/latest/reference/list_bedrock-mantle.html)，而不是亚马逊 Bedrock (`bedrock`) 参考中。授权范围限于该表格的亚马逊基岩[项目](projects.md)资源。`arn:aws:bedrock-mantle:{{region}}:{{account-id}}:project/{{project-name}}`默认项目名称是`default`。
+ **SDK 支持 ** — 软件开发工具包目前未公开针对此端点的方法。 AWS 以 SigV4-signed HTTP 形式发送请求`POST`，或使用任何带有亚马逊 Bedrock API 密钥的 HTTP 客户端。`bedrock-runtime`客户端方法`count_tokens`不以此端点为目标，并且对于不支持的模型返回验证错误`bedrock-runtime`。
+ **错误格式 ** —错误遵循人类形状:`{"type": "error", "request_id": "...", "error": {"type": "error-type", "message": "error-message"}}`. 这与返回的标准 AWS JSON 错误信封不同`bedrock-runtime`。

**注意**  
`count_tokens`终端节点使用与相应推理端点相同的架构来验证请求正文，因此模型不支持的请求字段会被 HTTP 400 拒绝。例如，Anthropic Claude Opus 4.7 不接受开`strict: true`启`tools[]`和退货。`tools.0.custom.strict: Extra inputs are not permitted`有关特定[模型的特征表](model-cards.md)面，请查阅模型卡。

以下示例`curl`使用亚马逊 Bedrock API 密钥来计算`bedrock-mantle`终端节点上的代币：

```
curl -X POST https://bedrock-mantle.us-east-1.api.aws/anthropic/v1/messages/count_tokens \
  -H "x-api-key: $BEDROCK_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic.claude-opus-4-7",
    "messages": [
        {"role": "user", "content": "How many tokens is this prompt?"}
    ]
  }'
```

响应包含一个`input_tokens`字段，其值是所提供输入的令牌数。