대규모 모델 토큰 계량이 어긋나는 이유와 해결 방법
벤더 청구서와 자체 게이트웨이 집계가 크게 차이 나는 사례를 들며 토큰 계량 불일치의 원인과 대응 방안을 정리했다.
중국어 원문을 AI로 번역했습니다. 고유명사와 수치는 원문 표기를 우선하며, 중요한 판단에는 아래 출처 원문을 함께 확인하세요.
대조 확인을 하는 날, 많은 운영 담당자가 같은 인생 회의감을 겪는다. 벤더 청구서에는 860만 token을 소비했다고 적혀 있는데, 자사 게이트웨이 통계로는 720만밖에 되지 않아 양쪽이 꼬박 140만 차이가 났다. 첫 반응은 "집계 코드를 잘못 짠 게 아닐까"였다. 코드를 한 바퀴 살펴봐도 문제가 없었고 SQL도 여러 번 돌려봤지만, 마지막에야 깨달았다. 누가 계산을 틀린 게 아니라, 애초에 양쪽이 같은 자로 재고 있지 않았다는 것을.
Token 계량이 부정확한 것은 대략 AI 비용 관리를 하는 사람이라면 누구나 언젠가 마주치게 되는 문제다. 그것은 우발적인 버그가 아니라, 여러 가지 기준 차이가 겹쳐서 생긴 결과다. 어디서 차이가 나는지 파악하는 것이 숫자를 반복해서 대조하는 것보다 훨씬 유용하다.
토크나이저가 다르면 숫자가 맞을 수 없다
Token이라는 단위는 객관적으로 보이지만 실은 전혀 통일되어 있지 않다. 모델 벤더마다 각자의 분할 방식을 쓰기 때문에, 같은 중국어 문장이라도 잘라낸 token 수가 한참 차이 날 수 있다.
중국어 상황에서는 특히 뚜렷하다. 어떤 모델은 글자 단위로 자르고, 어떤 모델은 단어 단위로 자르며, 또 어떤 모델은 흔한 단어 조합을 하나의 token으로 묶는다. 같은 제품 설명 한 단락을 A 모델은 210개 token으로 계산하고 B 모델은 178개로 계산하는데, 어느 쪽도 틀린 게 아니라 그저 알고리즘 로직이 다른 것이다. 오픈소스 토크나이저로 로컬에서 직접 계산한 뒤 벤더 청구서와 비교하면 맞지 않는 것이 거의 필연적인데, 로컬에서 쓰는 이 토크나이저가 벤더 백엔드에서 돌아가는 것과 근본적으로 같은 것이 아니기 때문이다.
이것은 가장 근본적인 층위의 차이로, 피해 갈 수 없으며 그저 인정할 수밖에 없다.
보이지 않는 부분이야말로 오차의 큰 몫이다
토크나이저 차이보다 더 함정에 빠지기 쉬운 것은 "청구 범위"의 차이다. 기업이 자체적으로 집계할 때는 흔히 업무의 평문만 세지만, 벤더가 청구할 때는 실제로 모델에 전달된 모든 내용을 센다.
시스템 프롬프트, 역할 설정, 도구 호출의 파라미터, 다중 턴 대화의 과거 컨텍스트는 보통 업무 코드의 집계 로직에는 나타나지 않지만, 실제로는 벤더 청구서에 그대로 계상된다. 간단한 문답 한 번에서 업무 측은 30개 token만 보냈다고 생각하지만, 실제로 모델이 받은 것은 300개일 수 있고, 차이는 이렇게 생긴다.
캐시 적중 문제도 있다. 어떤 벤더는 캐시에 적중한 입력을 할인 가격으로 청구해서 청구서에 나타나는 token 수는 많지 않아 보이지만, 업무 측에서 입고로 집계하는 양은 전량이다. 양쪽을 비교하면 또 하나의 맞지 않는 장부가 생긴다.
재시도와 타임아웃이 장부를 중복 계산하게 만든다
이 부분은 가장 간과되기 쉽고, 가장 쉽게 집계 결과를 부풀린다.
네트워크 흔들림, 인터페이스 타임아웃으로 클라이언트가 같은 요청을 자동으로 다시 보낸다. 벤더 측은 실제로 완료된 추론에만 청구하고, 실패한 몇 차례는 받지 않거나 부분적으로 받을 수 있다. 반면 기업의 자체 집계 로직은 흔히 요청이 시작될 때 한 건을 기록한다. 실패 후 재시도 한 번에 로컬은 두 번, 벤더는 한 번 기록하니 차이가 쌓인다.
스트리밍 출력에도 비슷한 함정이 있다. 첫 글자가 반환된 뒤 연결이 끊기면, 업무 측은 이미 출력 token을 계상했을 수 있지만 벤더 측 정산은 반드시 같은 규칙을 따르지는 않는다. 이런 경계 상황을 가볍게 넘기면, 월말에 합산할 때 설명하기 어려운 숫자가 한 덩어리로 나온다.
시간 기준과 태그 기준도 무시하지 말 것
집계가 맞지 않는 것은 때로는 순전히 시간 경계의 문제다.
벤더 청구서는 자체적인 청구 주기로 정산하는데, 자연 월일 수도 있고 정산일이나 결제 기간으로 나눌 수도 있다. 기업이 로컬 시간으로 집계하면 월말이나 월초 몇 시간 동안의 요청은 귀속에 편차가 생긴다. 시차를 두고 배포하는 경우라면 편차는 더 커진다.
태그 기준은 더 번거롭다. 같은 요청에 대해 기업은 비즈니스 라인에 따라 A 태그를 달았지만, 벤더 쪽은 이 차원을 아예 인식하지 못한다. "어느 부서가 얼마를 썼는가" 같은 분해를 하고 싶어도 벤더 청구서는 도움이 되지 않고, 스스로 다시 집계하는 수밖에 없다. 태그를 규범에 맞게 달지 않았거나 중간에 분류 규칙을 바꿨다면, 과거 데이터는 완전히 맞출 수 없게 된다.
숫자를 맞추고 싶다면 먼저 통일된 기준이 있어야 한다
이런 차이를 분명히 본 뒤의 결론은 실은 간단하다. 벤더 청구서로 내부 사용량을 역산하려 하지 말고, 로컬 추정치로 벤더 청구서를 검증하려 하지도 말라는 것이다. 양쪽은 애초에 같은 것이 아니다.
올바른 방법은 기업 자체의 통일된 계량 기준을 세우는 것이다. 모든 모델 호출은 백엔드가 어느 곳이든 같은 규칙으로 계량하고 기록한다. 이 기준은 벤더 청구를 대체하는 것이 아니라 대조를 위한 참조물이다. 벤더가 얼마라고 하든 자사 기준으로 비교해 보면, 차이가 어느 모델, 어느 시간대, 어느 단계에서 발생했는지를 빠르게 짚어낼 수 있고, 두루뭉술하게 "맞지 않는다"고 말하지 않아도 된다.
통일된 기준에는 추가 이점도 있다. 비즈니스 라인별, 애플리케이션별, 시나리오별 비용 귀속이 그제야 의미를 갖는다. 태그는 스스로 달고 기준은 스스로 정하기 때문에, 분해된 데이터라야 의사결정에 유용하다.
통일된 입구를 통해 계량을 한곳으로 모아라
기준을 세우려면 전제가 있는데, 모든 호출이 통일된 입구로 드나들어야 한다는 것이다. 업무별로 서로 다른 벤더에 직접 연결하면 계량 규칙이 곳곳에 흩어져 통일하기란 사실상 허무맹랑한 이야기다.
XApex 같은 멀티모델 통합 API 플랫폼을 통하면 한 번의 연동으로 OpenAI, Claude, Gemini, DeepSeek, Qwen, GLM 등 주류 모델을 아우를 수 있고, 코드, 이미지, 영상 생성 시나리오가 같은 인터페이스 세트로 처리된다. 모든 트래픽이 플랫폼을 거치면서 token 계량, 태그, 소요 시간이 같은 층에서 수집되고, 백엔드가 어느 곳에 연결되어 있든 같은 규칙으로 기록된다. 대조 시에는 플랫폼 데이터를 기준으로 삼아 각 벤더의 청구서와 확인하면, 차이를 구체적인 모델과 구체적인 시간대로 귀착시킬 수 있다.
통일된 사용량 데이터는 덤으로 비용 귀속 문제도 해결한다. 매 호출에 부서, 프로젝트 태그를 붙여 비즈니스 단위별로 리포트를 내고, 예산 임계치에 대한 경고를 한다. 서로 다른 모델의 효과와 비용도 같은 곳에서 가로로 비교할 수 있어 필요에 따라 모델을 선정하기 편하다. 플랫폼은 유연한 청구 방안을 제공해 독립 개발자, AI 애플리케이션 팀, 대량 호출 수요가 있는 기업에 맞추며, 시작부터 많은 인력과 예산을 들여 계량 시스템을 자체 구축할 필요가 없다.
마치며
Token 계량이 부정확한 것은 시스템에 고장이 난 경우가 드물고, 대개는 기준 차이가 겹친 결과다. 토크나이저가 다르고, 청구 범위가 다르고, 재시도 처리 방식이 다르고, 시간 경계가 다르며, 각 항목이 숫자를 조금씩 어긋나게 해 결국 한 장의 뒤죽박죽 장부가 된다.
숫자를 반복해서 대조하고 서로 의심하기보다는, 먼저 차이가 존재한다는 사실을 인정한 뒤 자사만의 통일된 기준을 세우는 편이 낫다. 계량을 통일된 입구로 모으고, 하나의 자로 모든 모델을 재야 청구서가 의사결정에 쓸 수 있는 데이터로 바뀐다. 숫자가 맞아야 비용도 관리할 수 있고, AI에 대한 이 투자가 해마다 짐작에 의존하지 않게 될 것이다.