

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

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

若要查看哪些模型支援字符計數，請[快速瀏覽模型](model-cards.md)並挑選您感興趣的模型。

## 計算請求中的字符
<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:${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"])
```