재시도(Retry)가 프롬프트 자체보다 예산을 더 많이 잡아먹고 있음
Retries are spending more budget than the prompt itself
핵심 요약
에이전트 루프의 과도한 재시도 정책과 툴 호출 스키마 오류로 인해 API 비용이 급증하는 문제에 대한 분석입니다.
- 비용 급증 원인 — 툴 호출 실패 시 반복되는 재시도와 전체 시스템 프롬프트 재전송으로 인한 토큰 낭비 발생
- 스키마 검증 문제 — 느슨한 enum 설정으로 인해 모델이 계속 실패하는 값을 생성하며 재시도 루프를 유발함
- 가시성 부족 — SDK 로그가 재시도를 개별 호출로 처리하여 비용 추적 및 원인 파악이 어려움
- 대응 전략 — 재시도 횟수 제한, Zod를 활용한 사전 검증, 재시도 깊이 모니터링 도입 필요
지난주 우리 메인 에이전트 루프의 비용 내역을 뽑아봤는데, 재시도 계층이 실제 프롬프트보다 거의 2배 가까이 많은 비용을 쓰고 있었음. 매 호출마다 같은 프롬프트를 사용하는데도 루프가 툴 사용 실패 시 3~4번씩 돌아갔고, 각 재시도마다 전체 시스템 프롬프트를 전체 입력 길이만큼 다시 실행했기 때문임.
코드베이스의 프롬프트 측면에서는 이런 문제가 전혀 보이지 않아서 더 심각했음. 프롬프트 자체는 1.4k 입력 토큰으로 괜찮아 보였지만, 재시도가 이를 곱절로 불려 원래 벤치마크에서는 예측하지 못한 결과가 나왔고, SDK는 이를 별도의 호출로 기록해서 비용을 원래 프롬프트 탓으로 돌리기도 어려웠음. 알고 보니 툴 호출 스키마가 원인이었고, 한 파라미터의 느슨한 enum 설정 때문에 모델이 계속 검증에 실패하는 값을 시도했고 재시도 루프가 비용을 다 잡아먹고 있었던 거임. 즉, 프롬프트가 문제가 아니라 그 주변을 감싸고 있는 하네스(harness)가 문제였음.

