

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 추론을 실행하기 전에 토큰을 계산하여 토큰 사용량 모니터링
<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를 사용해도 요금이 발생하지 않습니다.

**참고**  
리전 간 추론(CRIS)으로만 시작하는 모델을 포함한 일부 Anthropic Claude 모델은에서 [CountTokens](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html)를 지원하지 `bedrock-runtime` 않습니다`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)
+ [예: bedrock-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`의 형식은 대화에 포함된 `messages` 및 `system` 프롬프트를 지정하는 JSON 객체입니다.

## 예: bedrock-runtime 요청에 대한 토큰 수 계산
<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:${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) on을 지원하지 않는 Anthropic Claude 모델의 입력 토큰 수를 계산합니다`bedrock-runtime`. 예를 들어, 모델이의 교차 리전 추론(CRIS)을 통해서만 제공`bedrock-runtime`되므로 [CountTokens](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CountTokens.html)가 대상으로 지정할 리전별 엔드포인트가 없는 경우입니다. `/anthropic/v1/messages` 경로는 Claude별이며 `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) 섹션을 참조하세요.
+ **요청 본문** - , 및 선택적 `model` `messages`및 `system` `tools` 필드를 포함한 Anthropic `count_tokens`셰이프입니다. [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) 참조하세요.

다음 예제에서는를 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` 필드가 포함됩니다.