View a markdown version of this page

在运行推理之前,通过计算词元来监控您的词元使用情况 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在运行推理之前,通过计算词元来监控您的词元使用情况

运行模型推理时,您在输入中发送的词元数量,会计入到请求的成本中,还会计入到您每分钟和每天可以使用的词元配额中。该 CountTokens API通过返回在推理请求中向模型发送相同输入时使用的令牌数量,帮助您在向基础模型发送请求之前估算令牌使用量。

注意

使用 CountTokens API 不会产生费用。

注意

某些 Anthropic Claude 模型,包括那些仅开启跨区域推理 (CRIS) 的模型,不支持开启bedrock-runtime。 CountTokens bedrock-runtime对于这些模型,改为通过在bedrock-mantle端点上调用 Anthropic 的 count_tokens API 来计算输入令牌。使用 bedrock-mantle 端点计算代币有关 URL、请求正文和示例,请参见。

词元计数特定于模型,因为不同的模型使用不同的词元计算策略。此操作返回的词元计数,与向模型发送相同输入来运行推理时将收费的词元计数相符。

您可以使用 CountTokens API 来执行以下操作:

  • 在发送推理请求之前估算成本。

  • 优化提示以适应词元限制。

  • 规划应用程序中的词元使用量。

支持词元计数的模型和区域

要查看哪些型号支持代币计数,请一目了然地访问模型并选择您感兴趣的模型。

使用基岩运行时端点计算代币

要计算推理请求中的输入令牌数量,请使用 Amazon Bedrock 运行时终端节点发送CountTokens请求,在标头中指定模型,并在字段中指定要计算令牌的输入。body该body字段的值取决于你是在计算请求的输入令牌还是 Converse 请求InvokeModel的输入令牌:

  • 对于 InvokeModel 请求,body 的格式是表示一个 JSON 对象的字符串,其格式取决于您指定的模型。

  • 对于 Converse 请求,body 的格式是一个 JSON 对象,指定对话中包含的 messages 和 system 提示。

示例:计算基准运行时请求的代币

此部分中的示例让您可以对通过 InvokeModel 和 Converse 发出的 Anthropic 和 Claude 3 Haiku 计算词元数量。

先决条件
  • 您已经下载 适用于 Python (Boto3) 的 AWS SDK 并设置了配置,可以自动识别您的凭证和默认 AWS 区域。

  • 您的 IAM 身份有权执行以下操作(有关更多信息,请参阅 Amazon Bedrock 的操作、资源和条件键):

    • 基岩:CountTokens — 允许使用. CountTokens

    • 基岩: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 on 的 Anthropic Claude 模型的输入令牌 bedrock-runtime ——例如,当模型仅通过跨区域推理 (CRIS) 开启时,因此没有 Region-specific 可供目标的终端节点。bedrock-runtime CountTokens 路/anthropic/v1/messages径是 Claude-specific;回归的非人类模型。bedrock-mantle The model 'X' does not support the '/anthropic/v1/messages' API

请求详细信息
  • 网址 —POST https://bedrock-mantle.region.api.aws/anthropic/v1/messages/count_tokens. 有关受支持的区域,请参阅 支持的区域和终端节点。

  • 请求正文 -人体形count_tokens状,包括modelmessages、system和可选tools字段。请参阅 Anthropic Messages 计数代币参考文档。

  • 身份验证 — 要么是带有服务名称的 SigV4 签名bedrock-mantle,要么是标题中传递的亚马逊 Bedrock API 密钥。x-api-key请参阅API 密钥。

  • IAM 行动 —bedrock-mantle:CountTokens. 此操作使用bedrock-mantle服务前缀,出现在亚马逊 Bedrock Powered by AWS Mantle 服务授权参考中,而不是亚马逊 Bedrock (bedrock) 参考中。授权范围限于该表格的亚马逊基岩项目资源。arn:aws:bedrock-mantle:region:account-id:project/project-name默认项目名称是default。

  • SDK 支持 — 软件开发工具包目前未公开针对此端点的方法。 AWS 以 SigV4-signed HTTP 形式发送请求POST,或使用任何带有亚马逊 Bedrock API 密钥的 HTTP 客户端。bedrock-runtime客户端方法count_tokens不以此端点为目标,并且对于不支持的模型返回验证错误bedrock-runtime。

  • 错误格式 —错误遵循人类形状:{"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有关特定模型的特征表面,请查阅模型卡。

以下示例curl使用亚马逊 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字段,其值是所提供输入的令牌数。