View a markdown version of this page

推論を実行する前にトークンをカウントしてトークンの使用量をモニタリングする - Amazon Bedrock

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

推論を実行する前にトークンをカウントしてトークンの使用量をモニタリングする

モデル推論を実行する場合、入力で送信するトークンの数は、リクエストのコストと、1 分間および 1 日に使用できるトークンのクォータに影響します。CountTokens API は、推論リクエストで同じ入力がモデルに送信された場合に使用されるトークン数を返すため、基盤モデルにリクエストを送信する前にトークンの使用量を推定するのに役立ちます。

注記

CountTokens API を使用しても料金は発生しません。

注記

クロスリージョン推論 (CRIS) でのみ起動するモデルを含む一部の Anthropic Claude モデルはbedrock-runtime、 で CountTokens をサポートしていませんbedrock-runtime。これらのモデルでは、代わりにbedrock-mantleエンドポイントで Anthropic の count_tokens API を呼び出して入力トークンをカウントします。URL、リクエスト本文、および例bedrock-mantle エンドポイントを使用してトークンをカウントするについては、「」を参照してください。

使用されるトークン化戦略はモデルによって異なるため、トークンのカウントはモデル固有です。このオペレーションによって返されるトークン数は、推論を実行するために同じ入力がモデルに送信された場合に課金対象となるトークン数と一致します。

CountTokens API を使用して、以下のことを実行できます。

  • 推論リクエストを送信する前にコストを見積もる。

  • トークンの制限内に収まるようにプロンプトを最適化する。

  • アプリケーションでのトークンの使用量を計画する。

トークンのカウントでサポートされているモデルおよびリージョン

トークンカウントをサポートするモデルを確認するには、モデルを一目で確認し、関心のあるモデルを選択してください。

bedrock-runtime エンドポイントを使用してトークンをカウントする

推論リクエスト内の入力トークンの数をカウントするには、Amazon Bedrock ランタイムエンドポイントを使用して CountTokens リクエストを送信します。モデルをヘッダーに指定し、トークンをカウントする入力を body フィールドに指定します。body フィールドの値は、InvokeModel リクエストの入力トークンをカウントするのか、Converse リクエストの入力トークンをカウントするのかによって異なります。

  • InvokeModel リクエストの場合、body の形式は、指定したモデルによって異なる形式の JSON オブジェクトを表す文字列です。

  • Converse リクエストの場合、body の形式は、会話に含まれる messages プロンプトと system プロンプトを指定する JSON オブジェクトです。

例: bedrock-runtime リクエストのトークンをカウントする

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

前提条件
  • ダウンロードすると AWS SDK for Python (Boto3) 、認証情報とデフォルトの AWS リージョンが自動的に認識されるように設定が設定されます。

  • IAM アイデンティティに、次のアクションを行うためのアクセス許可が付与されていること (詳細については、「Amazon Bedrock のアクション、リソース、条件キー」を参照してください)。

    • bedrock:CountTokens – CountTokens の使用を許可します。

    • bedrock:InvokeModel – InvokeModel および Converse の使用を許可します。少なくとも arn:${Partition}:bedrock:${Region}::foundation-model/anthropic.claude-3-haiku-20240307-v1:0 にスコープを設定する必要があります。

InvokeModel リクエストのトークンのカウントを試すには、次の 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 リクエストのトークンのカウントを試すには、次の 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 エンドポイントを使用してトークンをカウントする

bedrock-mantle エンドポイントは、 で Anthropic の count_tokens API を公開します/anthropic/v1/messages/count_tokens。これを使用して、 で CountTokens をサポートしていない Anthropic Claude モデルの入力トークンをカウントしますbedrock-runtime。たとえば、モデルが でクロスリージョン推論 (CRIS) を介してのみ提供されbedrock-runtimeCountTokens がターゲットとするリージョン固有のエンドポイントがない場合などです。/anthropic/v1/messages パスは Claude 固有です。bedrock-mantle戻り値は Anthropic 以外のモデルですThe model 'X' does not support the '/anthropic/v1/messages' API

詳細をリクエストする
  • URLPOST https://bedrock-mantle.region.api.aws/anthropic/v1/messages/count_tokens。サポートされているリージョンについては、「サポートされているリージョンとエンドポイント」を参照してください。

  • リクエスト本文 – 、、オプションの systemフィールドmessagestoolsフィールドを含む Anthropic modelcount_tokensシェイプ。「Anthropic Messages count tokens reference」を参照してください。

  • 認証 – サービス名 の SigV4 署名bedrock-mantle、または x-api-keyヘッダーに渡された Amazon Bedrock API キー。「API キー」を参照してください。

  • IAM アクションbedrock-mantle:CountTokens。認可は、 形式の Amazon Bedrock プロジェクトリソースに限定されます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モデル固有の特徴表面については、モデルカードを参照してください。

次の例では、Amazon Bedrock API キーcurlで を使用して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フィールドが含まれており、その値は指定された入力のトークン数です。