토크나이저(Tokenizer) 변경이 AI 에이전트 예산 가설을 깨뜨릴 수 있는 이유
요약
토크나이저 변경이 AI 에이전트의 비용 추정 모델에 미치는 영향을 분석합니다. 동일한 텍스트라도 토큰화 방식에 따라 비용이 변할 수 있으며, 에이전트의 반복적인 호출 특성상 이 오차가 복리로 증폭될 수 있음을 경고합니다.
핵심 포인트
- 토크나이저 업데이트는 동일 프롬프트의 토큰 수를 변화시켜 비용 예측을 어렵게 함
- 에이전트의 반복적 호출(재시도, 도구 실행 등)은 작은 비용 오차를 복리로 증폭시킴
- 단순 가격 계산을 넘어 실행 전 가드(Guard) 로직을 통한 비용 제어 필요
Claude Sonnet 5는 AI 에이전트의 비용 제어가 단순히 모델 가격에 관한 것만이 아니라는 점을 잘 상기시켜 줍니다.
Anthropic은 Sonnet 5가 2026년 8월 31일까지 입력 토큰 100만 개당 $2, 출력 토큰 100만 개당 $10로 출시되며, 그 이후에는 입력 토큰 100만 개당 $3, 출력 토큰 100만 개당 $15로 전환된다고 밝혔습니다.
Vercel의 AI Gateway 변경 로그(changelog)는 중요한 구현 세부 사항을 추가했습니다. Sonnet 5는 업데이트된 토크나이저 (tokenizer)를 사용하며, 동일한 입력이라도 더 많은 토큰으로 매핑될 수 있다는 점입니다.
에이전트를 구축한다면 이 점은 매우 중요합니다.
모델이 매력적인 가격을 가지고 있더라도, 여전히 런타임 비용 가설을 변화시킬 수 있습니다.
문제점
많은 에이전트 시스템은 다음과 같이 비용을 추정합니다:
const estimatedCost =
inputTokens * inputPrice +
maxOutputTokens * outputPrice;
시작 단계로서는 괜찮습니다.
하지만 이는 런타임이 다음 사항들을 알고 있다고 가정합니다:
- 어떤 모델이 사용되고 있는지
- 입력이 어떻게 토큰화 (tokenized) 되는지
- 정확한 입력 가격
- 정확한 출력 가격
- 몇 번의 재시도 (retries)가 허용되는지
- 몇 단계 (steps)가 허용되는지
- 에이전트가 진전을 보이고 있는지
이러한 가정 중 어느 하나라도 어긋나면, 추정치는 신뢰도가 떨어집니다.
토크나이저 (tokenizer) 업데이트는 이런 일이 발생하는 한 가지 방식입니다.
프롬프트 (prompt) 텍스트는 동일할 수 있습니다.
하지만 토큰 수는 동일하지 않을 수 있습니다.
에이전트는 작은 추정 오류를 증폭시킵니다
단일 요청의 경우, 토큰 수의 예상치 못한 변화는 대개 관리 가능한 수준입니다.
하지만 에이전트의 경우, 이는 복리로 작용할 수 있습니다.
에이전트는 다음과 같은 작업을 수행할 수 있습니다:
- 모델 호출
- 파일 검사
- 컨텍스트 (context) 추가
- 도구 (tools) 실행
- 재시도
- 유사한 프롬프트 요청
- 모델 전환
- 더 많은 단계 지속
호출당 발생하는 작은 비용 편차는 실행 전체에 걸쳐 더 커집니다.
여기에 병렬 에이전트, 폴백 경로 (fallback paths), 또는 긴 컨텍스트 워크플로 (long-context workflows)를 추가해 보십시오.
이제 문제는 "이 모델의 비용이 얼마인가?"가 아닙니다.
문제는 다음과 같습니다:
"다음 제공자(provider) 호출을 허용해야 하는가?"
호출 전 결정 단계 추가
제공자 호출 전에 가드 결정 (guard decision)을 추가하십시오.
type BeforeCallInput = {
runId: string;
model: string;
prompt: string;
estimatedInputTokens: number;
maxOutputTokens: number;
stepCount: number;
retryCount: number;
budgetRemaining: number;
previousPrompts: string[];
};
type GuardDecision =
|
{ allowed: true }
|
{
allowed: false;
reason:
|
"unknown_model_pricing"
|
"budget_exceeded"
|
"max_steps_exceeded"
|
"retry_storm"
|
"prompt_loop";
};
실행 전에 이를 사용합니다:
const decision = guard.beforeCall({
runId,
model,
prompt,
estimatedInputTokens,
maxOutputTokens,
stepCount,
retryCount,
budgetRemaining,
previousPrompts,
});
if (!decision.allowed) {
return {
status: "stopped",
reason: decision.reason,
};
}
const result = await provider.call({
model,
prompt,
});
중요한 부분은 배치(placement)입니다.
체크는 provider 호출 전에 발생합니다.
청구 후에 하는 것이 아닙니다.
알 수 없는 가격 책정 시에는 닫힌 상태로 실패(Fail closed on unknown pricing)
런타임이 모델 가격을 모른다면, 신뢰할 수 있는 예산을 강제할 수 없습니다.
if (!pricingCatalog.has(model)) {
return {
allowed: false,
reason: "unknown_model_pricing",
};
}
추측하지 마십시오.
모델 별칭, 폴백(fallback), 게이트웨이 리라이트(gateway rewrite) 또는 오타는 여러분의 가정을 무너뜨릴 수 있습니다.
알 수 없는 가격 책정은 호출이 실행되기 전에 런을 중단해야 합니다.
모델 마이그레이션 후 토큰 재계산
모델을 변경할 때, 동일한 프롬프트가 동일한 토큰 수를 갖는다고 가정하지 마십시오.
기본적인 마이그레이션 체크리스트:
- 새로운 토크나이저를 통해 런 대표 프롬프트를 실행합니다
- 입력 토큰 수를 비교합니다
- 출력 길이 동작을 비교합니다
- 가격 책정 메타데이터를 업데이트합니다
- 최대 단계 제한(max-step limits)을 재테스트합니다
- 재시도 동작(retry behavior)을 재테스트합니다
- 폴백 경로를 확인합니다
- 성공적인 작업당 비용(cost per successful task)을 측정합니다.
토큰당 비용(Cost per token)은 유용합니다.
하지만 성공적인 작업당 비용이 더 유용합니다.
재시도 및 프롬프트 루프 동작 모니터링
더 스마트한 모델은 더 적은 단계로 작업을 완료할 수 있습니다.
또한, 더 복잡한 계획을 추구할 수 있기 때문에 더 오래 지속될 수도 있습니다.
여러분의 런타임은 여전히 명백한 낭비는 중단해야 합니다.
if (stepCount >= maxSteps) {
return { allowed: false, reason: "max_steps_exceeded" };
}
if (retryCount >= maxRetries) {
return { allowed: false, reason: "retry_storm" };
}
if (similarToRecentPrompt(prompt, previousPrompts)) {
return { allowed: false, reason: "prompt_loop" };
}
이러한 체크(checks)들이 모델을 더 뛰어나게 만드는 것은 아닙니다.
이것들은 시스템을 더 안전하게 운영할 수 있도록 만듭니다.
AI CostGuard의 역할
AI CostGuard는 제가 AI 에이전트(AI-agent) 프로젝트를 위해 구축하고 있는 로컬 우선(local-first) TypeScript/Node.js 런타임 안전 계층(runtime safety layer)입니다.
이 도구는 다음과 같은 항목들에 대한 호출 전 안전 점검(pre-call safety checks)에 집중합니다:
- 재시도 폭풍 (retry storms)
- 프롬프트 루프 (prompt loops)
- 최대 단계 폭발 (max-step explosions)
- 통제 불능 실행 (runaway execution)
- 알 수 없는 모델 가격 (unknown model pricing)
- 예산 초과 (budget overruns)
- 통제되지 않는 제공자 호출 (uncontrolled provider calls)
이것은 과금 장부(billing ledger)가 아닙니다.
이것은 엄격한 보안 경계(hard security boundary)가 아닙니다.
이것은 제공자(provider)의 대시보드를 대체하지 않습니다.
목표는 명백히 위험한 호출이 실행되기 전에 이를 포착하는 것입니다.
핵심 요약 (Takeaway)
모델 가격 페이지는 단위 가격(unit price)을 알려줍니다.
하지만 여러분의 에이전트가 다음 호출을 수행해야 하는지 여부는 알려주지 않습니다.
토크나이저(Tokenizer) 변경, 폴백 모델(fallback models), 재시도(retries), 그리고 프롬프트 루프(prompt loops)는 모두 실제 런타임 비용(runtime cost)에 영향을 미칩니다.
AI 에이전트에게 있어, 비용 안전성(cost safety)은 제공자 호출 이전에 확보되어야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기