

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

# 在執行推論之前，透過計算字符來監控字符用量
<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 來計算輸入字符。如需 URL、請求內文和範例，[使用 bedrock-mantle 端點計算權杖](#count-tokens-mantle)請參閱 。

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

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

**Topics**
+ [支援字符計數的模型和區域](#count-tokens-supported)
+ [使用 bedrock-runtime 端點計算權杖](#count-tokens-use)
+ [範例：Bdrock-runtime 請求的計數字符](#count-tokens-example)
+ [使用 bedrock-mantle 端點計算權杖](#count-tokens-mantle)

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

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

## 使用 bedrock-runtime 端點計算權杖
<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` 提示。

## 範例：Bdrock-runtime 請求的計數字符
<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"])
```

## 使用 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) 之 Anthropic Claude 模型的輸入字符 `bedrock-runtime`- 例如，當模型僅透過 上的跨區域推論 (CRIS) 提供時，`bedrock-runtime`因此沒有 [CountTokens](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html) 的目標區域特定端點。`/anthropic/v1/messages` 路徑為 Claude-specific；`bedrock-mantle`傳回 時的非 Anthropic 模型`The model 'X' does not support the '/anthropic/v1/messages' API`。

**請求詳細資訊**
+ **URL** – `POST https://bedrock-mantle.{{region}}.api.aws/anthropic/v1/messages/count_tokens`。若要了解支援的區域，請參閱 [支援的區域和端點](bedrock-mantle.md#bedrock-mantle-supported)。
+ **請求內文** – Anthropic `count_tokens`形狀，包括 `model`、 `messages`和選用 `system` 和 `tools` 欄位。請參閱 [Anthropic Messages 計數權杖參考](https://docs.anthropic.com/en/api/messages-count-tokens)。
+ **身分驗證** – 服務名稱為 的 SigV4 簽章`bedrock-mantle`，或 `x-api-key`標頭中傳遞的 Amazon Bedrock API 金鑰。請參閱 [API 金鑰](api-keys.md)。
+ **IAM 動作** – `bedrock-mantle:CountTokens`。授權的範圍是表單 的 Amazon Bedrock [專案](projects.md)資源`arn:aws:bedrock-mantle:{{region}}:{{account-id}}:project/{{project-name}}`。預設專案名稱為 `default`。
+ **SDK 支援** – AWS SDKs 目前不會公開以此端點為目標的方法。以 SigV4-signed HTTP 傳送請求`POST`，或搭配 Amazon Bedrock API 金鑰使用任何 HTTP 用戶端。`bedrock-runtime` 用戶端方法`count_tokens`不會將此端點設為目標，並針對 上不支援的模型傳回驗證錯誤`bedrock-runtime`。
+ **錯誤格式** – 錯誤遵循 Anthropic 形狀：`{"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`搭配 Amazon 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` 欄位，其值為所提供輸入的字符計數。