본문 바로가기

LLM

Claude Opus 4.7 토크나이저 함정 — 같은 가격, 더 많은 비용

반응형

Anthropic이 4월 16일 Opus 4.7을 출시하면서 이렇게 말했어요.

"가격 변동 없음. Opus 4.6과 동일한 $5/$25 per MTok"

맞아요. 토큰당 가격은 그대로예요.

근데 같은 텍스트가 더 많은 토큰으로 쪼개집니다.

Anthropic 공식 문서:
"새 토크나이저는 최대 35% 더 많은 토큰을 사용할 수 있음"

실제 측정값 (claudecodecamp.com):
기술 문서:    1.47x (47% 증가)
CLAUDE.md:   1.45x (45% 증가)
일반 코드:   1.20~1.35x
한국어/CJK:  1.01x (거의 동일)

Anthropic이 "최대 35%"라고 했지만 실제 영어/코드 기반 콘텐츠는 35%를 넘는 경우가 많아요.


실제 비용이 얼마나 늘어나나

케이스 1 — 일반 API 사용자

하루 API 요청:
- 입력: 1M 토큰
- 출력: 0.2M 토큰

Opus 4.6:
- 입력: 1M × $5 = $5.00
- 출력: 0.2M × $25 = $5.00
- 일 합계: $10.00
- 월 합계: $300

Opus 4.7 (35% 토큰 증가):
- 입력: 1.35M × $5 = $6.75
- 출력: 0.2M × $25 = $5.00  ← 출력은 내용 같으면 비슷
- 일 합계: $11.75
- 월 합계: $352.50

월 $52.50 추가 (17% 증가)

케이스 2 — RAG 파이프라인 (컨텍스트 무거운 경우)

하루 요청:
- 시스템 프롬프트: 5,000 토큰
- 검색된 문서: 20,000 토큰
- 사용자 질문: 500 토큰
- 1일 요청: 10,000회

Opus 4.6 월 비용:
- 입력: 25,500 × 10,000 × 30 = 7.65B 토큰
- 입력 비용: $38,250

Opus 4.7 (30% 증가 가정):
- 입력: 33,150 × 10,000 × 30 = 9.945B 토큰
- 입력 비용: $49,725

월 $11,475 추가 (30% 증가)

케이스 3 — 에이전트 코딩 (Claude Code 유저)

긴 CLAUDE.md + 레포 컨텍스트 + 대화 기록

실측 기준 (CLAUDE.md 1.45x):
세션당 기존 $0.50 → $0.72
하루 20 세션 기준:
  4.6: $10/일, $300/월
  4.7: $14.4/일, $432/월

월 $132 추가 (44% 증가)

왜 이렇게 됐나 — 토크나이저 변경의 의미

토크나이저는 텍스트를 토큰으로 쪼개는 방식이에요.

Opus 4.6 토크나이저:
"programming" → 1 토큰

Opus 4.7 토크나이저:
"programming" → 2 토큰
(더 세밀하게 쪼갬)

더 세밀하게 쪼개면 무슨 장점이 있냐고요?

장점:
→ 희귀 단어, 전문 용어 더 정확하게 이해
→ 코드 구조를 더 세밀하게 파악
→ 명령 수행 정확도 향상 (+5%p)
→ 비영어권 언어 처리 개선

단점:
→ 같은 텍스트 = 더 많은 토큰 = 더 많은 비용

언어별 영향 차이가 있어요.

영어/코드: 1.20~1.47x (가장 큰 영향)
한국어:    1.01~1.05x (거의 영향 없음)
일본어:    1.02~1.07x
중국어:    1.01x

→ 한국어 블로그, 한국어 서비스는 영향 적음
→ 영어 문서 처리, 코드 분석은 영향 큼

추가로 놓치기 쉬운 비용 증가 포인트

1. 이미지 토큰도 3배

Opus 4.6:
이미지 1장 = 최대 1,600 토큰

Opus 4.7:
이미지 1장 = 최대 4,784 토큰 (3x)

이미지 많이 쓰는 서비스:
Computer Use, 스크린샷 분석, 문서 OCR
→ 이쪽은 토큰 비용 폭탄

이미지 해상도가 필요 없으면 다운샘플링으로 대응:

from PIL import Image
import io

def downsample_for_api(image_path: str, max_pixels: int = 1_000_000) -> bytes:
    """필요 이상의 해상도 이미지는 다운샘플링"""
    img = Image.open(image_path)
    w, h = img.size

    if w * h > max_pixels:
        ratio = (max_pixels / (w * h)) ** 0.5
        new_w, new_h = int(w * ratio), int(h * ratio)
        img = img.resize((new_w, new_h), Image.LANCZOS)

    buf = io.BytesIO()
    img.save(buf, format="JPEG", quality=85)
    return buf.getvalue()

2. xhigh 기본값이 비용을 더 올린다

Claude Code 기본 추론 레벨:
4.6: high
4.7: xhigh (새 레벨)

xhigh = high보다 더 많은 추론 토큰 사용
→ 토크나이저 증가 + 추론 토큰 증가 이중 타격

3. 프롬프트 캐시도 더 비싸진다

캐시 쓰기 비용: 표준 입력의 125%
캐시 읽기 비용: 표준 입력의 10%

Opus 4.6 CLAUDE.md 10,000 토큰:
- 캐시 쓰기: 10,000 × $6.25 = $0.0625

Opus 4.7 같은 CLAUDE.md (1.45x):
- 캐시 쓰기: 14,500 × $6.25 = $0.0906

→ 캐시 쓰기 비용 45% 증가
→ 캐시 읽기도 45% 증가

마이그레이션 전 필수 확인

1단계 — 토큰 수 실측 (마이그레이션 전)

import anthropic

client = anthropic.Anthropic()

# 실제 프로덕션 프롬프트로 비교
def compare_token_count(sample_text: str) -> dict:
    results = {}

    for model in ["claude-opus-4-6", "claude-opus-4-7"]:
        response = client.messages.count_tokens(
            model=model,
            messages=[{"role": "user", "content": sample_text}]
        )
        results[model] = response.input_tokens

    ratio = results["claude-opus-4-7"] / results["claude-opus-4-6"]

    return {
        "opus_4_6_tokens": results["claude-opus-4-6"],
        "opus_4_7_tokens": results["claude-opus-4-7"],
        "ratio": ratio,
        "cost_increase_pct": (ratio - 1) * 100
    }

# 실제 프로덕션 샘플로 측정
samples = [
    open("system_prompt.txt").read(),
    open("CLAUDE.md").read(),
    open("example_user_message.txt").read(),
]

for i, sample in enumerate(samples):
    result = compare_token_count(sample)
    print(f"샘플 {i+1}: {result['ratio']:.2f}x ({result['cost_increase_pct']:.1f}% 증가)")

2단계 — Breaking Changes 수정

# ❌ 4.6 방식 — 4.7에서 400 에러
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    temperature=0.7,          # 제거됨
    top_p=0.9,                # 제거됨
    thinking={
        "type": "enabled",
        "budget_tokens": 8000  # 제거됨
    },
    messages=[...]
)

# ✅ 4.7 올바른 방식
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    thinking={
        "type": "enabled",
        "effort": "xhigh"     # budget_tokens 대신
    },
    messages=[...]
)

어시스턴트 프리필도 제거됐어요:

# ❌ 4.6에서 쓰던 프리필 패턴
messages = [
    {"role": "user", "content": "JSON으로 응답해줘"},
    {"role": "assistant", "content": "{"}  # 프리필 → 4.7에서 400 에러
]

# ✅ 4.7 대안
response = client.messages.create(
    model="claude-opus-4-7",
    system="반드시 유효한 JSON으로만 응답하세요. 다른 텍스트 없이.",
    messages=[{"role": "user", "content": "응답해줘"}]
)

3단계 — 비용 통제 설정

# Task Budget — 에이전트 루프 비용 제한
response = client.beta.messages.create(
    model="claude-opus-4-7",
    max_tokens=128000,
    output_config={
        "effort": "high",        # xhigh 대신 high로 절약
        "task_budget": {
            "type": "tokens",
            "total": 50000       # 에이전트 전체 루프 5만 토큰 제한
        }
    },
    messages=[...],
    betas=["task-budgets-2026-03-13"]
)

비용 절감 전략

전략 1 — 모델 라우팅

def choose_model(task_type: str, complexity: str) -> str:
    """
    Opus 4.7: 복잡한 코딩, 장기 에이전트 작업
    Sonnet 4.6: RAG, 분류, 일반 질답 (40% 저렴)
    Haiku 4.5: 분류, 라우팅, 단순 추출 (80% 저렴)
    """
    if task_type == "coding" and complexity == "hard":
        return "claude-opus-4-7"
    elif task_type in ["rag", "qa", "summarize"]:
        return "claude-sonnet-4-6"   # Opus 대비 40% 절약
    else:
        return "claude-haiku-4-5"   # Opus 대비 80% 절약

전략 2 — 캐싱으로 토크나이저 증가 상쇄

# 시스템 프롬프트를 캐싱하면
# 토크나이저 증가분 상당 부분 상쇄 가능

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "[긴 시스템 프롬프트]",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    messages=[{"role": "user", "content": user_message}]
)

# 캐시 히트 시: 캐시된 토큰 × $0.50/M (90% 할인)
# 토크나이저로 토큰이 35% 늘어도
# 캐시 읽기 비용이 워낙 싸서 실질 증가 억제

전략 3 — effort 레벨 조정

작업별 권장 effort:

max:    절대적 최고 품질 필요 (매우 비쌈)
xhigh:  복잡한 코딩, 에이전트 작업 (Claude Code 기본값)
high:   대부분의 지능 필요 작업
medium: 일반적인 질답, 간단한 코딩
low:    분류, 라우팅, 단순 추출

xhigh → high로 낮추면:
토큰 사용량 15~20% 감소
품질 저하 거의 없는 경우 많음

요약

가격: 동일 ($5/$25 per MTok)
실제 비용: 워크로드에 따라 다름

영어/코드 집중 서비스: 최대 47% 증가
한국어 서비스: 거의 영향 없음 (1~5%)
이미지 집중 서비스: 최대 3배 증가

Breaking Changes:
- temperature, top_p, top_k 제거
- thinking.budget_tokens → effort로 교체
- 어시스턴트 프리필 → 400 에러

대응:
1. count_tokens API로 실제 비용 미리 측정
2. 캐싱 최대한 활용
3. xhigh → high effort 다운그레이드 검토
4. Opus 불필요한 곳은 Sonnet/Haiku로 라우팅

 

반응형