

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 推論を実行する前にトークンをカウントしてトークンの使用量をモニタリングする
<a name="count-tokens"></a>

モデル推論を実行する場合、入力で送信するトークンの数は、リクエストのコストと、1 分間および 1 日に使用できるトークンのクォータに影響します。[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` の形式は、会話に含まれる `messages` プロンプトと `system` プロンプトを指定する JSON オブジェクトです。

## 例を試す
<a name="count-tokens-example"></a>

このセクションの例では、Anthropic Claude 3 Haiku を使用して `InvokeModel` リクエストと `Converse` リクエストのトークンをカウントします。

**前提条件**
+ ダウンロードするとAWS SDK for Python (Boto3)、認証情報とデフォルトの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"])
```