LLM API를 비교하는 것은 간단해 보이지만, 첫 스프레드시트 업데이트에서 문제가 발생합니다. 제공업체가 요율을 변경하거나, 라우터가 동일한 모델을 다른 식별자로 나열하고, 캐시된 입력에 대한 할인이 특정 채널에만 적용되는 경우가 있습니다. 단일한 “백만 토큰당 가격” 열로는 이러한 차이점들을 모두 보존할 수 없습니다.
저는 LLM 가격표를 작은 출처(provenance) 시스템으로 취급합니다. 표시되는 모든 숫자는 네 가지 질문에 답해야 합니다: 어떤 모델인지, 어떤 채널을 통해 접근하는지, 어떤 토큰 유형인지, 그리고 어떤 소스 스냅샷이 이를 생성했는지입니다.
제공업체 및 라우터 가격 분리 유지
동일한 모델이라도 해당 제공업체로부터 직접 구매할 수도 있고, 또는 라우팅 플랫폼을 통해 구매할 수도 있습니다. 이러한 경로는 서로 다른 입력 및 출력 가격, 캐시 규칙, 수수료, 모델 식별자, 업데이트 시간을 가질 수 있습니다.
따라서 유용한 기록에는 채널(channel) 필드가 필요합니다:
{
"model": "example-model",
"channel": "official",
...
}
동일한 모델에 대한 OpenRouter의 기록은 덮어쓰기가 아니라 두 번째 기록입니다. 이는 제공업체 자체가 요율을 변경했다고 암시하지 않으면서도 가격 차이를 가시화할 수 있게 합니다.
비용 계산 전에 워크로드 모델링하기
가격표는 입력 토큰과 출력 토큰이 동등한 양으로 발생하는 경우가 드물기 때문에 이해하기 어렵습니다. 계산기는 사용자에게 여러 요율을 정신적으로 평균 내라고 요구하는 대신, 워크로드 자체를 받아야 합니다.
요청마다 다음 정보를 저장해야 합니다:
- 새로운 입력 토큰(fresh input tokens)
- 캐시 읽기 공유(cache-read share)
- 출력 토큰(output tokens)
- 월별 요청 횟수(requests per month)
- 선택적 채널 수수료 가정
그렇게 되면 계산이 명확하게 유지될 수 있습니다:
fresh input cost = fresh tokens × input rate
cached input cost = cached tokens × cache-read rate
output cost = output tokens × output rate
...
캐시 읽기 요율(cache-read rate)을 알 수 없는 경우, 가장 안전한 기본값은 눈에 띄는 주석과 함께 전체 입력 요율입니다. 누락된 할인은 절대 조용히 제로 비용 토큰이 되어서는 안 됩니다.
정밀도를 지어내기보다 알려지지 않은 값을 보존하기
가격 페이지는 다른 채널에서 노출하는 요율을 종종 생략합니다. “검증 대기(Pending verification)”는 의미 있는 상태입니다. 이는 검증되지 않은 0이 순위에 포함되는 것을 막고, 업데이트 프로세스에 정확히 어떤 부분이 아직 검토가 필요한지 알려줍니다.
동일한 원칙은 도구 호출(tool-call) 요금, 긴 컨텍스트(long-context) 할증료, 배치 할인(batch discounts), 세금, 그리고 신용 구매 수수료에도 적용됩니다. 계산기는 추정치가 청구서인 척할 필요 없이 유용하도록 무엇을 제외하는지 목록화해야 합니다.
하나의 단일 출처(source of truth)에서 비교 생성하기
기록이 구조화되면, 홈페이지 테이블, 모델 상세 페이지, 두 모델 비교, 월별 계산기 모두 동일한 데이터셋에서 데이터를 읽을 수 있습니다. 표시 기능은 결과 옆에 출처 링크와 검증 날짜를 보여줄 수 있습니다.
저는 이 접근 방식을 LLM API Prices에서 사용했습니다. 이곳은 공식 요율과 OpenRouter 요율을 출처 링크로 비교하고, 신규 입력(fresh input), 캐시된 입력(cached input), 출력(output), 월별 요청에 대한 워크로드 계산기를 제공합니다.
실질적인 교훈은 가격 데이터가 산술적 계산만큼이나 출처의 계보(lineage)를 필요로 한다는 것입니다. 채널을 분리하고, 알 수 없는 상태는 유지하며, 모든 스냅샷에 날짜를 지정하고, 가정을 명시적으로 보이게 해야 합니다. 이렇게 하면 변동성이 큰 숫자 목록이 사용자가 감사할 수 있는 비교 자료로 바뀝니다.