나는 일주일 동안 모든 LLM API 호출을 추적했는데, 65%가 불필요했다
Source: Dev.to
LLM API 호출 추적
저는 코딩 작업—리팩터링, 코드 리뷰, 아키텍처 질문, 디버깅—에 GPT‑5와 Claude를 API로 사용하고 있었습니다. 청구서가 $150 / 월을 넘어서고 있었는데, 어떤 호출이 실제로 비용을 정당화하는지 전혀 알지 못했습니다.
프로바이더 대시보드는 총 사용 토큰 수와 지출 금액을 보여주지만, 어느 특정 호출이 불필요했는지는 알려주지 않습니다. “auth 미들웨어가 어디 있나요”라는 $2.80 요청이 GPT‑4o에 보낼 가치가 있었을까요?
그래서 추적기를 만들었습니다.
llm-costlog 라이브러리
LLM API 호출을 감싸고 다음을 기록하는 작은 Python 라이브러리입니다:
- 프롬프트 + 완성 토큰
- USD 기준 비용 (40개 이상의 모델에 대한 내장 가격)
- 경로 – API로 보냈는지, 로컬에서 처리했는지
- 의도 – 어떤 종류의 요청인가? (코드 조회, 아키텍처 질문, 디버깅 등)
통합 방법
# llm_cost_tracker.py
from llm_cost_tracker import CostTracker
tracker = CostTracker("./costs.db")
tracker.record(
prompt_tokens=847,
completion_tokens=234,
model="gpt-4o-mini",
provider="openai",
intent="code_lookup",
)
다섯 줄만 있으면 모든 요청을 로깅할 수 있습니다.
낭비 분석 결과
일주일 동안 모든 것을 추적한 결과:
- 총 비용:
$0.2604 - 외부 API 호출의 **65 %**가 LLM이 전혀 필요하지 않은 작업(심볼 조회, 설정 확인, “이 함수는 어디에 정의돼 있나요”, 파일 검색) 때문이었습니다.
- 실제 상황에서 더 큰 컨텍스트(요청당 2 K–8 K 토큰)를 사용한다면, 65 % 회피율은 상당한 비용 절감으로 이어집니다.
- 월 $150 을 LLM API에 쓰고 그 중 65 %가 회피 가능하다면, 대략 $100 / 월이 낭비되는 셈입니다.
낭비가 존재한다는 사실을 아는 것이 1단계; 이를 자동으로 해결하는 것이 2단계입니다.
promptrouter – 자동 낭비 감소
코드와 LLM API 사이에 위치하는 게이트웨이입니다. 각 프롬프트에 대해 다음과 같이 결정합니다:
| Decision | Action |
|---|---|
| 로컬에서 답변 가능? (심볼 조회, 설정 확인, 파일 검색) | 즉시 처리, $0 비용 |
| LLM이 필요? (아키텍처 질문, 코드 리뷰, 복잡한 디버깅) | 컨텍스트를 압축해서 API에 전송 (가장 관련성 높은 3‑5 파일만) |
라우팅 로직
- 키워드 분류 + 구문 감지 (비ML, 테스트한 22가지 프롬프트 유형에 대해 100 % 정확).
코드 검색
- BM25 텍스트 매칭 + 선택적 의미 검색 (sentence‑transformers,
all‑MiniLM‑L6‑v2). - 혼합 스코어링: 60 % BM25 + 40 % 의미 유사도.
AST 분석
- Python 및 TypeScript/JavaScript에 대한 전체 호출 그래프와 import‑dependency 추적.
- TS/JS는 정규식 기반, Python은
ast모듈 사용. - 두 언어 모두 외부 종속성 없이 구현.
Git 통합
- 최신 커밋, blame, diff를 컨텍스트로 제공—“누가 언제 변경했는지” 때문에 토큰을 소모하지 않음.
비용 추적
- 제공자의 사용 블록에서 실제 토큰 수를 가져와 SQLite 기반 원장에 기록.
- 40개 이상의 모델을 포괄하는 내장 가격표 사용.
LLM 클라이언트
- OpenAI, Anthropic, Ollama 및 순수 HTTP 기반 OpenAI 호환 엔드포인트 지원.
- SDK 의존성 없음.
두 도구 모두 zero‑dependency (표준 라이브러리만) 로 핵심 기능을 제공하며, 임베딩 및 정밀 토크나이제이션은 선택적 부가 기능입니다.
설치
llm-costlog
pip install llm-costlog
GitHub:
promptrouter
pip install promptrouter
GitHub:
두 프로젝트 모두 MIT 라이선스로 배포됩니다. 피드백, 이슈, 별점 모두 환영합니다—첫 오픈소스 릴리스이며 사용자 의견을 반영해 빠르게 개선하고 있습니다. Reddit 댓글러가 TypeScript 지원과 낭비 점수 추세 기능을 요청했으며, 두 기능 모두 24시간 이내에 배포되었습니다.