토큰 카운팅
토큰 카운팅 (Token Counting)
개요
LiteLLM은 프로바이더별 토큰 카운팅 API를 호출해 정확한 토큰 카운팅을 제공합니다. 이는 요청을 보내기 전에 정확한 토큰 수를 얻어 비용 추정과 컨텍스트 창 관리에 도움을 줍니다.
| 기능 | 상세 |
|---|---|
| SDK 메서드 | litellm.acount_tokens() |
| Proxy 엔드포인트 | /v1/messages/count_tokens (Anthropic 형식), /v1/responses/input_tokens (OpenAI 형식) |
| 폴백 | 지원되지 않는 프로바이더는 로컬 tiktoken 기반 카운팅 |
지원 프로바이더
| 프로바이더 | 토큰 카운팅 API | 형식 |
|---|---|---|
| OpenAI | Responses API /input_tokens |
OpenAI Responses |
| Anthropic | Messages /count_tokens |
Anthropic Messages |
| Vertex AI (Claude) | Vertex AI Partner Models Token Counter | Anthropic Messages |
| Bedrock (Claude) | AWS Bedrock CountTokens API | Anthropic Messages |
| Gemini | Google AI Studio countTokens API |
Anthropic Messages |
| Vertex AI (Gemini) | Vertex AI countTokens API |
Anthropic Messages |
| 기타 프로바이더 | 로컬 tiktoken 폴백 | N/A |
SDK 사용법
기본 사용법
import asyncio
import litellm
async def main():
# OpenAI
result = await litellm.acount_tokens(
model="openai/gpt-5.6-terra",
messages=[{"role": "user", "content": "Hello, how are you?"}],
)
print(f"Token count: {result.total_tokens}")
print(f"Tokenizer: {result.tokenizer_type}") # "openai_api"
# Anthropic
result = await litellm.acount_tokens(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "Hello, how are you?"}],
)
print(f"Token count: {result.total_tokens}")
print(f"Tokenizer: {result.tokenizer_type}") # "anthropic_api"
asyncio.run(main())
도구 및 시스템 메시지와 함께
import asyncio
import litellm
async def main():
result = await litellm.acount_tokens(
model="openai/gpt-5.6-terra",
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
},
},
}],
system="You are a helpful weather assistant.",
)
print(f"Token count (with tools): {result.total_tokens}")
asyncio.run(main())
응답 형식
litellm.acount_tokens() 은 TokenCountResponse 를 반환합니다:
TokenCountResponse(
total_tokens=15, # Token count
request_model="openai/gpt-5.6-terra", # Model requested
model_used="gpt-5.6-terra", # Model used for counting
tokenizer_type="openai_api", # "openai_api", "anthropic_api", "local_tokenizer"
original_response={"input_tokens": 15}, # Raw API response
error=False, # True if counting failed
error_message=None, # Error details if failed
)
폴백 동작
프로바이더가 토큰 카운팅 API를 지원하지 않거나 API 키가 누락되면, acount_tokens() 가 자동으로 로컬 tiktoken 기반 카운팅으로 폴백합니다:
# Unsupported provider → automatic fallback
result = await litellm.acount_tokens(
model="together_ai/meta-llama/Llama-3-8b-chat-hf",
messages=[{"role": "user", "content": "Hello"}],
)
print(result.tokenizer_type) # "local_tokenizer"
프록시에서 로컬 카운팅은 워커 스레드에서 실행되므로 큰 페이로드가 다른 요청을 막지 않아요. 각 워커 프로세스는 한 번에 최대 TOKEN_COUNTER_MAX_CONCURRENT_COUNTS 개(기본 4) 페이로드를 카운트하고 나머지는 큐에 넣어, 대량 카운트 버스트가 차지할 메모리를 제한합니다. TOKEN_COUNTER_MAX_EXACT_CHARS 문자(기본 4,000,000, 대략 백만 토큰)보다 긴 문자열은 총합 그만큼이 되는 16개의 균등 간격 샘플을 토큰화하고 그 결과를 문자열 길이로 스케일링해 추정하므로 가장 큰 페이로드의 비용을 제한합니다.
출처: 문서
본문
Proxy 사용법
OpenAI 형식: /v1/responses/input_tokens
- curl
- Python (httpx)
curl -X POST "http://localhost:4000/v1/responses/input_tokens" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "gpt-5.6-terra",
"input": "Hello, how are you?"
}'
import httpx
response = httpx.post(
"http://localhost:4000/v1/responses/input_tokens",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer sk-<your-litellm-api-key>"
},
json={
"model": "gpt-5.6-terra",
"input": "Hello, how are you?"
}
)
print(response.json())
# {"object": "response.input_tokens", "input_tokens": 13}
응답:
{"object": "response.input_tokens", "input_tokens": 13}
Anthropic 형식: /v1/messages/count_tokens
전체 문서는 Anthropic Token Counting 참고.
curl -X POST "http://localhost:4000/v1/messages/count_tokens" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "claude-sonnet-5",
"messages": [
{"role": "user", "content": "Hello, how are you?"}
]
}'
Proxy 구성
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: openai/gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY
- model_name: claude-sonnet-5
litellm_params:
model: anthropic/claude-sonnet-5
api_key: os.environ/ANTHROPIC_API_KEY