본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

Token Economics

~22 min · tokens, cost, tiktoken

Level 0Tokenizer
0 XP0/54 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

OpenAI 는 글자 수가 아니라 token 수를 기준으로 과금해. 영어는 평균적으로 token 하나에 약 네 글자가 들어가지만, 한국어나 일본어는 같은 분량이어도 더 많은 token 이 필요해. 한글 1000 자짜리 프롬프트가 600 token 을 넘을 수도 있어서, 영어 문장을 볼 때의 감각으로 비용을 어림하면 크게 빗나가.

언어가 달라지면 비용도 달라져

여러 언어를 지원하는 앱은 같은 기능이라도 언어별 비용이 달라질 수 있어. 언어마다 예산을 따로 잡거나, 반복되는 system prompt 부분을 prompt caching 으로 아껴. 배포 전에 tiktoken 으로 직접 재는 게 가장 확실해. 눈으로 짧아 보인다는 이유만으로 싸다고 생각했다가는 원인을 찾는 데 더 많은 token 을 쓰게 돼.

vision token 은 이미지 크기와 detail 로 정해져

이미지 입력에 드는 token 은 이미지 크기와 detail 수준을 바탕으로 계산돼. detail='low' 는 85 token 으로 고정되고, detail='high' 는 이미지를 32×32 patch 로 나눠 계산해서 큰 이미지일수록 비싸져. high-detail 이미지를 대화 기록에 계속 쌓으면 비용이 빠르게 커져.

반복되는 앞부분은 cache 에 맡겨

OpenAI prompt caching 은 1024 token 이상인 같은 앞부분이 반복될 때 그 부분에 50% 할인을 적용해. 바뀌지 않는 system 지시와 few-shot 예시는 앞에 두고, 요청마다 달라지는 user input 은 뒤에 둬. 그래야 cache 가 긴 구간에 걸쳐 재사용돼.

Code

tiktoken 으로 토큰 카운트·python
import tiktoken

# Get encoding for a model
enc = tiktoken.encoding_for_model("gpt-4o")

# Or by encoding name directly
enc = tiktoken.get_encoding("o200k_base")

# Count tokens
text = "Hello, how are you today?"
tokens = enc.encode(text)
print(f"Token count: {len(tokens)}")  # → 6
Cost 추정 헬퍼·python
import tiktoken

def count_tokens_for_messages(messages: list[dict], model: str = "gpt-4o") -> int:
    """
    Approximate token count for a list of chat messages.
    Each message incurs a ~4-token overhead; each reply starts with 3 tokens.
    """
    enc = tiktoken.encoding_for_model(model)
    tokens_per_message = 3
    tokens_per_name = 1

    total = 0
    for msg in messages:
        total += tokens_per_message
        for key, value in msg.items():
            total += len(enc.encode(str(value)))
            if key == "name":
                total += tokens_per_name
    total += 3  # every reply is primed with <|start|>assistant<|message|>
    return total

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is the capital of France?"},
]
print(count_tokens_for_messages(messages))  # → ~26 tokens

External links

Exercise

파일 경로를 받아 (1) input token 수, (2) gpt-4.1 가격을 적용한 입력 비용, (3) prompt cache 가 80% 맞았을 때 아끼는 금액을 출력하는 작은 CLI 를 만들어. tiktoken 의 get_encoding('o200k_base') 를 사용해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.