

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在執行推論之前，透過計算字符來監控字符用量
<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 不會產生費用。

字符計數是模型特定的，因為不同的模型會使用不同的字符化策略。此操作傳回的字符計數將與字符計數相符，如果將相同的輸入傳送到模型以執行推論，則將收費。

您可以使用 `CountTokens` API 執行下列動作：
+ 在傳送推論請求之前估計成本。
+ 最佳化提示以符合字符限制。
+ 規劃應用程式中的字符用量。

**Topics**
+ [支援字符計數的模型和區域](#count-tokens-supported)
+ [計算請求中的字符](#count-tokens-use)
+ [嘗試範例](#count-tokens-example)

## 支援字符計數的模型和區域
<a name="count-tokens-supported"></a>

下表顯示對字符計數的基礎模型支援：


| 供應商 | 模型 | 模型 ID | 單一區域模型支援 | 
| --- | --- | --- | --- | 
| Anthropic | Claude 3.5 Haiku | anthropic.claude-3-5-haiku-20241022-v1:0 |  us-west-2  | 
| Anthropic | Claude 3.5 Sonnet | anthropic.claude-3-5-sonnet-20240620-v1:0 |  ap-northeast-1 ap-southeast-1 eu-central-1 eu-central-2 us-east-1 us-west-2  | 
| Anthropic | Claude 3.5 Sonnet v2 | anthropic.claude-3-5-sonnet-20241022-v2:0 |  ap-southeast-2 us-west-2  | 
| Anthropic | Claude 3.7 Sonnet | anthropic.claude-3-7-sonnet-20250219-v1:0 |  eu-west-2  | 
| Anthropic | Claude Opus 4 | anthropic.claude-opus-4-20250514-v1:0 |  | 
| Anthropic | Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 |  | 

## 計算請求中的字符
<a name="count-tokens-use"></a>

若要計算推論請求中的輸入字符數量，請使用 [Amazon Bedrock 執行時期端點](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt)傳送 [CountTokens](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) 請求、在標頭中指定模型，以及在 `body` 欄位中指定要計算字符的輸入。`body` 欄位的值取決於您計算的是 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) 或 [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) 請求的輸入字符：
+ 對於 `InvokeModel` 請求，格式 `body` 是代表 JSON 物件的字串，其格式取決於您指定的模型。
+ 對於 `Converse` 請求，格式 `body` 是 JSON 物件，其會指定對話中包含的 `messages` 和 `system` 提示。

## 嘗試範例
<a name="count-tokens-example"></a>

本節中的範例可讓您使用 Anthropic Claude 3 Haiku 計算 `InvokeModel` 和 `Converse` 請求的字符。

**先決條件**
+ 您已下載 適用於 Python (Boto3) 的 AWS SDK，且您的組態已設定為自動辨識您的登入資料和預設AWS區域。
+ IAM 身分具有下列動作的許可 (如需詳細資訊，請參閱 [Amazon Bedrock 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html))：
  + bedrock:CountTokens：允許使用 `CountTokens`。
  + bedrock:InvokeModel：允許使用 `InvokeModel` 和 `Converse`。應至少將範圍設為 *arn:\$1\$1Partition\$1:bedrock:\$1\$1Region\$1::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"])
```