AmazonBedrockTokenCounter

AmazonBedrockTokenCounter

AmazonBedrockTokenCounter는 Amazon Bedrock의 CountTokens API로 특정 Bedrock 모델에 대한 ChatMessage 객체와 선택적 도구 스키마의 입력 토큰을 세어요. 이 API는 응답을 생성하지 않고 정확한 개수를 반환하므로 생성 비용이 들지 않아요.

Import path: haystack_integrations.token_counters.amazon_bedrock.AmazonBedrockTokenCounter 필수 init 변수: model — 개수를 셀 Bedrock 모델 ID 또는 ARN API reference: Amazon Bedrock GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/amazon_bedrock Package name: amazon-bedrock-haystack

출처: 문서

본문

원격 API를 호출하기 때문에 AWS 자격 증명이 필요하고, 매 횟수마다 네트워크 지연이 더해져요. Bedrock에 호스팅된 모델에 대해 정확하고 모델별 개수가 필요할 때 사용하세요. 로컬 추정이 필요하면 ApproximateTokenCounter나 TiktokenCounter를 쓰세요.

카운터는 AmazonBedrockChatGenerator와 같은 방식으로 메시지와 도구를 Bedrock Converse 형식으로 변환해요. 그래서 개수가 동등한 Converse 요청이 소비하는 것과 일치합니다.

Installation

amazon-bedrock-haystack 패키지를 설치하세요:

pip install amazon-bedrock-haystack

Usage

토큰 개수는 모델별로 다르므로, 생성에 사용할 모델을 전달해야 해요. 모델이 CountTokens API를 지원해야 합니다:

from haystack.dataclasses import ChatMessage
from haystack_integrations.token_counters.amazon_bedrock import (
    AmazonBedrockTokenCounter,
)

messages = [
    ChatMessage.from_system("You are a helpful assistant."),
    ChatMessage.from_user("Explain retrieval-augmented generation."),
]
counter = AmazonBedrockTokenCounter(model="anthropic.claude-sonnet-4-20250514-v1:0")
token_count = counter.count(messages)
print(token_count)

카운터는 다른 Amazon Bedrock 컴포넌트처럼 인증해요. 기본적으로 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, AWS_DEFAULT_REGION, AWS_PROFILE을 환경에서 읽습니다. Haystack Secret 인자로 전달하고 boto3_config로 기본 Boto3 클라이언트를 구성할 수도 있어요:

from haystack.utils import Secret

counter = AmazonBedrockTokenCounter(
    model="anthropic.claude-sonnet-4-20250514-v1:0",
    aws_region_name=Secret.from_token("us-west-2"),
    boto3_config={"read_timeout": 30},
)

도구 스키마가 소비하는 컨텍스트를 포함하려면 count()에 도구를 전달하세요:

token_count = counter.count(messages, tools=[search_tool])

카운터는 count()를 처음 호출할 때 Bedrock 클라이언트를 만들어요. 대신 애플리케이션 시작 시 만들려면 warm_up()을 명시적으로 호출하세요. 카운터 사용이 끝나면 close()를 호출해 클라이언트의 리소스를 해제합니다:

counter.warm_up()
...
counter.close()

Whole conversations only

Bedrock은 CountTokens의 입력을 Converse 요청을 검증하는 것과 같은 방식으로 검증해요: 대화는 사용자 메시지로 시작해야 하고, 각 도구 결과는 그것을 만든 도구 호출 뒤에 와야 합니다. 그래서 카운터는 완전한 대화만 측정하고, 단일 도구 결과 메시지 같은 조각에는 AmazonBedrockInferenceError를 던져요.

이 때문에 카운터를 CompactionHook이나 컴팩터에 전달하지 마세요. 그것들은 메시지 그룹과 단독 도구 결과를 세는데, Bedrock이 거부하기 때문이죠. 컴팩션에는 ApproximateTokenCounter 같은 로컬 카운터를 쓰고, 전체 요청을 보내기 전에 크기를 재려면 AmazonBedrockTokenCounter를 사용하세요.

Non-text content

카운터는 AmazonBedrockChatGenerator와 같은 형식으로 이미지와 파일을 Bedrock에 보내요. 그래서 Bedrock이 평면 추정치를 적용하는 대신 요청의 일부로 세죠. 생성기와 같은 콘텐츠 타입을 지원합니다: JPEG, PNG, GIF, WebP 이미지, PDF 및 기타 문서 형식, 비디오 파일이요. 지원되지 않는 MIME 타입은 추정되는 대신 오류를 발생시켜요.

더 알아보기 (Learn more)