Huny's Dev Blog
huny.dev

Langfuse 토큰 자동 추정 종료: 비용 누락을 0원으로 오해하지 않기

11월 6일 발표된 Langfuse 토큰 자동 추정 종료를 정리한다. 사용량 누락·모델 단가·중복 집계를 구분하고, 8개 로컬 검사로 비용 미확인과 명시적 0을 분리하는 방법을 살펴본다.

Hun Jang
Hun Jang Nov 6, 2026

측정된 사용량과 비어 있는 관측값을 대비한 생성형 에디토리얼 이미지. 실제 제품 화면이나 데이터 흐름을 나타내지는 않는다.

LLM 호출은 계속 성공하는데 비용 그래프가 내려갔다. 정말 사용료가 줄었을까? Langfuse를 사용한다면 먼저 비용을 계산할 사용량이 도착했는지 확인해야 한다.

Langfuse는 November 6, 2026 입력·출력 텍스트로 토큰 수를 자동 추정하던 기능의 종료를 발표했다. 사용량이나 비용을 이미 전송하는 통합은 바꿀 필요가 없다. 자동 추정에 의존했다면 계측 코드를 점검해야 한다. 공식 발표

1. 토큰 추정과 비용 계산을 구분한다

이번 변경은 텍스트에서 토큰 수를 짐작하는 단계를 없앤다. 제출된 사용량과 모델 단가로 비용을 계산하는 기능은 유지된다. 비용을 직접 제출하는 방법도 남는다.

공식 발표는 추론 모델과 캐시 토큰의 가격 체계에서 텍스트 기반 추정이 잘못된 비용을 만들고 계측 누락을 가릴 수 있다고 설명한다. 새 쓰기와 재처리에 적용하며, 과거 observation을 일괄 수정하지는 않는다. 변경 범위

따라서 전후 비용 차트만 비교해 최적화 효과를 판단하면 곤란하다. 같은 기간의 호출 수, 사용량 기록 여부, 비용 기록 여부를 함께 확인하는 편이 안전하다. 과거 추정값과 새 계측값이 섞인 구간도 표시해 둔다.

2. 비용이 비어 있을 때 확인할 순서

공식 문서는 usage 또는 cost를 제출해야 하며, 추정 비용에는 사용량과 일치하는 모델 정의·단가가 필요하다고 안내한다. 직접 제출한 비용은 계산값보다 우선한다. usage not submitted와 no cost 경고에서 누락 원인을 확인할 수 있다. 사용량·비용 문서

다음은 이를 바탕으로 제안하는 점검 순서다.

  1. 문제가 난 호출의 식별자와 실행 시각을 찾는다. 성공 응답이 있었다는 사실만으로 계측도 성공했다고 보지 않는다.
  1. 공급자 응답에 usage가 있었는지, 애플리케이션이 이를 수집했는지 확인한다.
  1. Langfuse에 저장된 사용량과 모델 이름을 대조한다. 사용량이 있다면 모델 매칭과 단가부터 확인한다.
  1. 사용량이 없다면 통합 라이브러리, 스트리밍 종료 처리, 중간 게이트웨이의 변환을 순서대로 좁힌다.
  1. 비용을 직접 제출한다면 통화·단위·계산 주체를 기록한다. 계산 근거가 없는 0을 채워 경고만 없애지 않는다.

요청 본문이나 API 키를 로그에 복제할 필요는 없다. 재현에 필요한 식별자와 집계 값만 남기는 편이 낫다.

3. 수동 전송에서는 중복 집계를 조심한다

Python SDK의 usage_details, JS/TS의 usageDetails에 평평한 항목을 직접 넣는 경우 각 사용량 항목은 서로 겹치지 않아야 한다. 단, total은 별도 항목이 아니라 합계다. 예를 들어 전체 입력 1,000개 중 캐시 입력이 800개라면, 두 항목을 분리하는 표현에서 일반 입력은 200개다. 전체 1,000과 캐시 800을 독립 항목으로 더하면 1,800이 된다.

Langfuse 공식 통합·래퍼의 정규화와 수동 평면 데이터의 처리는 다르다. 이미 정규화된 데이터에서 다시 캐시 수를 빼지 않는다. 사용량 항목 이름은 적용할 모델 단가와도 맞아야 한다. 배타적 사용량 항목과 정규화 조건

이 예시는 구조를 설명하기 위한 숫자다. 실제 공급자의 토큰 항목이 서로 포함되는지, 별도 항목인지 먼저 확인한 뒤 매핑한다. 모델 이름만 바꾸고 기존 공급자의 변환 함수를 그대로 재사용하지 않는다.

4. 누락과 0을 분리하는 로컬 검증

대시보드 집계 코드에서 value or 0처럼 빈 값을 모두 0으로 바꾸면 누락을 발견하기 어렵다. 아래는 자체 보고서용으로 정규화한 행을 검사하는 작은 예제다. cost_usd는 이 예제의 필드이며 Langfuse API 응답 필드명이 아니다.

결과는 관측 4개 중 비용 확인 2개, 미확인 2개, 확인된 비용 합계 0.03달러다. 이를 전체 비용 0.03달러라고 표시하면 안 된다. 명시적인 0은 보존하고, 빈 값은 별도 상태로 남긴다.

이 함수는 Python 로컬 환경에서 8개 검사를 통과했다. 누락·null·0·양수의 혼합, 빈 입력, 명시적 0, 문자열, 불리언, 음수, NaN, 무한대를 확인했다. 음수는 이 예제의 관측 비용 입력에서 제외한다. 환불·크레딧을 처리하는 회계 계산에는 그대로 쓰지 않는다.

이 검증은 누락 분류 로직에 한정된다. 실제 Langfuse 서버, SDK 전송, 공급자 요금 계산을 시험한 결과가 아니다. 금액 정산에는 부동소수점 합계 대신 명확한 반올림 규칙과 적절한 십진수 표현도 필요하다.

5. 배포 완료는 새 관측값으로 확인한다

다음 검증은 테스트 환경에서 실행할 체크리스트다.

  • 일반 응답과 스트리밍 응답을 각각 한 건씩 확인한다.
  • 캐시 사용·미사용 경로를 구분해 토큰 총합과 세부 항목을 대조한다.
  • 오류나 취소로 usage가 오지 않은 호출은 성공 사례와 섞지 않는다.
  • 변경 후 새 observation에서 사용량·모델·비용을 함께 확인한다.
  • 배포 전후의 비용 미확인 비율을 비교하고, 누락이 늘면 비용 절감 성과로 보고하지 않는다.

과거 값이 남아 있다는 사실은 새 전송 경로가 정상이라는 증거가 아니다. 운영에서는 비용 합계와 비용을 알 수 없는 호출 수를 함께 보는 것이 이번 변경에 대응하는 가장 단순한 출발점이다.

확인 기준: November 6, 2026 한국 시간. 공개된 공식 발표·문서를 기준으로 정리했으며, 실제 계정 설정 변경이나 유료 API 호출은 수행하지 않았다.

추천 글