LLM 비용 제어 for Agents: 지출을 제한하는 5가지 가드레일
AI 에이전트가 한 달 예산을 오후에 소진하는 것을 막는 5가지 가드레일, 각 플래그십 모델에서 200-스텝 런어웨이 루의 가격 예시, 그리고 달러 한도에서 중단되는 30줄 Python 러너.
기사 텍스트에는 검토 날짜가 포함되어 있습니다. 아래 요금표는 매 배포마다 실시간 카탈로그에서 재구성됩니다.
가장 빠른 이점
에이전트 비용은 스텝 수의 제곱에 비례하여 증가합니다. 모든 스텝이 이전 내용을 다시 보내기 때문입니다. Claude Sonnet 5에서 정상 12-스텝 실행은 약 $0.39입니다. 동일한 에이전트가 200-스텝 루에 갇히면 36.7만 개의 입력 토큰을 읽고 약 $74, Claude Opus 5에서는 $185입니다. 모든 응답의 사용량 필드에서 계산된 실행당 달러 예산과 하드 스텝 제한이 피해 규모에 맞는 유일한 가드레일입니다.
에이전트 지출 제한에 대한 간단한 답변
Claude Sonnet 5에서 정상적으로 12단계로 실행되는 에이전트의 비용은 약 $0.39입니다. 동일한 에이전트가 200단계 루프에 갇히면 약 $74가 발생하는데, 이는 매 단계마다 컨텍스트가 1,800 토큰씩 증가하고 모든 단계를 거치며 전체 내용을 다시 전송하기 때문입니다. 총 입력 토큰 수는 36.7백만 개입니다. Claude Opus 5 또는 GPT-5.5에서는 동일한 루프에 약 $185가 듭니다. 이를 방지하는 5가지 안전장치는 다음과 같습니다: 호출당 max_tokens 설정, 실행당 단계 수 제한, 명시적인 종료 조건, 각 응답의 usage 필드를 기반으로 계산된 실행당 달러 예산, 그리고 벤더 콘솔의 일일 사용량 한도.
첫 번째 세 가지는 각각 한 줄로 구현할 수 있습니다. 네 번째는 아래에 있는 30줄짜리 러너 코드입니다. 다섯 번째는 콘솔 설정입니다. 모두 적용해야 합니다. 서로 다른 실패 케이스를 잡아내기 때문입니다.
무한 루프 발생 원인
에이전트는 보통 하나의 거대한 응답을 생성하면서 실패하지 않습니다. 대신, 작고 합리적인 단계를 반복하다 실패합니다. 가장 흔히 관찰되는 실패 패턴은 다음과 같습니다:
- 오류 메시지를 반환하는 도구로, 모델이 이를 다시 시도하라는 프롬프트로 인식해 동일한 인자로 영원히 반복함
- “작업 검증” 지시를 모델이 전체 작업을 다시 실행함으로써 충족시킴
- 호출할 때마다 결과가 약간 달라져 모델이 완료감을 느끼지 못하는 검색 도구
- 두 에이전트가 작업을 주고받으며, 각각 상대방이 마무리한다고 생각하는 경우
stop_reason이max_tokens인데 루프 코드가 이를 “오류 발생”이 아니라 “다시 호출”로 처리함
이들 중 어느 것도 5번째 단계에서는 비싸 보이지 않습니다. 80번째 단계가 되었을 때 비로소 비용이 부담스럽게 느껴집니다. 이때 컨텍스트는 147,000 토큰이며, 한 단계 비용이 처음 20개 단계 비용을 합친 것보다 더 큽니다. 이러한 비용 증가 메커니즘은 [AI 에이전트 실행 비용](/guides/how-much-does-an-ai-agent-cost-to-run) 가이드에서 자세히 다룹니다.
주요 모델별 200단계 루프 비용
참고 추적 데이터: 4,000토큰 접두사, 500토큰 작업, 각 단계마다 300토큰 도구 호출과 1,500토큰 결과가 추가됩니다. k번째 단계의 입력은 4,500 + 1,800 × (k − 1)입니다. 200단계를 합산하면: 200 × 4,500 + 1,800 × 19,900 = 36,720,000 입력 토큰입니다. 출력은 200 × 300 = 60,000 토큰입니다. 200단계 시점의 컨텍스트는 362,700 토큰으로 1M 윈도우에 적합합니다. 반면 기존 Claude Haiku 4.5 같은 200K 모델은 약 109단계에서 오류가 발생하는데, 이는 의도된 설계가 아닌 우연적인 가드레일입니다.
| 모델 ($/1M 입력 / 출력) | 입력 비용 | 출력 비용 | 200단계 총합 | 정상 12단계 실행 |
|---|---|---|---|---|
| Claude Sonnet 5 ($2 / $10) | 36.72M × $2 = $73.44 | 60,000 × $10 = $0.60 | $74.04 | $0.39 |
| Claude Opus 5 ($5 / $25) | 36.72M × $5 = $183.60 | 60,000 × $25 = $1.50 | $185.10 | $0.98 |
| GPT-5.4 ($2.50 / $15) | 36.72M × $2.50 = $91.80 | 60,000 × $15 = $0.90 | $92.70 | $0.50 |
| GPT-5.5 ($5 / $30) | 36.72M × $5 = $183.60 | 60,000 × $30 = $1.80 | $185.40 | $1.01 |
| Gemini 3.1 Pro ($2 / $12) | 36.72M × $2 = $73.44 | 60,000 × $12 = $0.72 | $74.16 | $0.40 |
| Gemini 3.8 Flash ($0.75 / $3.75) | 36.72M × $0.75 = $27.54 | 60,000 × $3.75 = $0.23 | $27.77 | $0.15 |
| DeepSeek V4.1 Flash ($0.30 / $1.20) | 36.72M × $0.30 = $11.02 | 60,000 × $1.20 = $0.07 | $11.09 | $0.058 |
단계 수는 17배, 비용은 약 190배 증가합니다. 프롬프트 캐싱 적용 시(Anthropic 기준 캐시 읽기 약 10%, 쓰기 약 125%), Sonnet 5 루프 비용은 362,700 × $2.50 + 36,357,300 × $0.20 + $0.60 = 약 $8.78로 줄어듭니다. [prompt caching for AI agents](/guides/prompt-caching-for-ai-agents)에서도 알 수 있듯이 캐싱은 유용하지만, 정상 실행 비용의 22배는 여전히 눈에 띄는 청구서입니다. DeepSeek V4.1 Flash(API 이름: deepseek-flash)는 DeepSeek가 은퇴시킨 V4 Flash를 대체했습니다. DeepSeek 행은 피크 시간 요금을 사용했으며, 오프피크 시간에는 요금이 절반입니다. DeepSeek 요금은 2026-10-27에 api-docs.deepseek.com에서 확인했습니다.
5가지 안전장치
1. 호출당 max_tokens 설정. 모델의 최대 한계가 아닌, 한 단계 분량에 맞춰 조정하세요. 도구 호출 단계에는 512~2,048 토큰이 필요하며, 최종 보고서에는 4,000 토큰 정도 필요할 수 있습니다. Opus 5에서 제어되지 않는 32,000 토큰 응답 하나만으로도 비용이 32,000 × $25 = $0.80이며, 이후 모든 단계에서 이 토큰이 컨텍스트에 쌓입니다.
2. 실행당 최대 단계 수. 트레이스에서 값을 추출하세요: 성공적인 실행의 p95 값에 여유분을 더한 수치입니다. 대부분의 도구 루프에서는 15~30단계가 적절합니다. 한도에 도달한 실행은 조용히 현재 상태만 반환하지 말고 명확하게 실패해야 합니다.
3. 명시적인 종료 조건. 모델에 finish 또는 report 도구를 제공하고, 해당 도구가 호출되거나 stop_reason이 end_turn일 때 루프를 종료하세요. 또한 진행 정체를 감지해야 합니다: 동일한 도구를 동일한 인자로 연속 두 번 호출하면 루프이므로 실행을 중단해야 합니다.
4. usage 필드 기반 실행당 달러 예산. 모든 응답에는 입력, 캐시, 출력 토큰 수가 보고됩니다. 모델 요금에 곱해 누적하고, 총액이 한도를 넘으면 중단하세요. 실제 관심 있는 단위(달러)로 임계값을 설정할 수 있는 유일한 안전장치입니다.
5. 벤더 콘솔의 일일 계정 한도. Anthropic과 OpenAI는 워크스페이스 또는 프로젝트별로 지출 한도와 알림을 설정할 수 있으며, Google Cloud Budgets는 알림을 보내고 지출을 중단하도록 연동할 수 있습니다. 아직 생각하지 못한 버그에 대한 마지막 안전망입니다.
재시도 및 백오프 비용
SDK 클라이언트는 기본적으로 속도 제한과 서버 오류에 대해 재시도하며, 일반적으로 지수 백오프 방식으로 2~3회 시도합니다. 거부된 요청은 일반적으로 과금되지 않지만, 생성이 시작된 후 타임아웃된 요청은 과금되는 경우가 많으며, 애플리케이션 수준에서 단계를 재시도하면 전체 컨텍스트가 다시 전송됩니다.
기준 루프의 100번째 단계에서 컨텍스트는 4,500 + 99 × 1,800 = 182,700 토큰입니다. Sonnet 5에서 캐싱 없이 한 번 시도하면 182,700 × $2 = $0.37이며, 세 번 시도하면 진척도 없이 $1.10이 발생합니다. 캐싱 적용 시 시도당 비용은 약 $0.04입니다. 따라서 다음 두 가지 규칙을 따르세요: SDK의 기본 재시도 횟수를 유지하고 절대 자체 재시도 루프로 감싸지 말며, 실패한 실행을 처음부터 재시도해야 한다면 새 예산을 시작하지 말고 기존 실행당 예산에서 차감하세요.
30줄짜리 BudgetedRunner
이 Python 러너는 Claude 툴 루프를 구동하며, 달러 한도 또는 단계 한도에 도달하면 중지됩니다. 동일한 형태는 OpenAI에서 responses.create 및 usage.input_tokens_details.cached_tokens로 작동합니다.
from anthropic import Anthropic
PRICES = {"claude-sonnet-5": (2.0, 2.5, 0.2, 10.0)} # $/1M: input, cache write, cache read, output
class BudgetedRunner:
def __init__(self, model, system, tools, budget_usd, max_steps=25):
self.client, self.model, self.system, self.tools = Anthropic(), model, system, tools
self.budget, self.max_steps, self.spent = budget_usd, max_steps, 0.0
def cost(self, u):
i, w, r, o = PRICES[self.model]
return (u.input_tokens * i + (u.cache_creation_input_tokens or 0) * w
+ (u.cache_read_input_tokens or 0) * r + u.output_tokens * o) / 1e6
def run(self, messages, execute_tool):
for step in range(1, self.max_steps + 1):
resp = self.client.messages.create(model=self.model, max_tokens=1024,
system=self.system, tools=self.tools, messages=messages)
self.spent += self.cost(resp.usage) # e.g. 24,300 in × $2 + 300 out × $10 = $0.052
if self.spent > self.budget:
raise RuntimeError(f"budget ${self.budget} exceeded at step {step}: ${self.spent:.3f}")
messages.append({"role": "assistant", "content": resp.content})
if resp.stop_reason != "tool_use":
return resp, self.spent
results = [{"type": "tool_result", "tool_use_id": b.id,
"content": execute_tool(b.name, b.input)}
for b in resp.content if b.type == "tool_use"]
messages.append({"role": "user", "content": results})
raise RuntimeError(f"step cap {self.max_steps} hit after ${self.spent:.3f}")budget_usd를 트레이스에서 설정하세요: 성공적인 실행의 중간값의 세 배가 합리적인 시작점입니다. Sonnet 5 기준 실행의 경우 약 $1.20이며, 200단계 루프는 24단계에서 이 금액에 도달하여 콘솔이 알아차리기 전에 약 $73이 소요됩니다.
청구서가 도착하기 전에 알림을 설정하는 방법
예산은 한 번의 실행을 중지시킵니다. 알림은 실행이 예산을 필요로 하기 시작했음을 알려줍니다.
- 호출별이 아닌 실행별로 비용을 기록하고, 모델, 단계 수 및 중지 이유를 포함하세요.
- 각 실행을 트리거한 기능 또는 고객으로 태그를 지정하여, 급증에 소유자가 있도록 하세요.
- 실행당 p99 비용과 단계 한도 또는 예산에 도달한 실행의 비율에 대해 알림을 설정하세요; 둘이 함께 상승한다면, 바쁜 날이 아니라 새로운 실패 모드를 의미합니다.
- 공급업체의 사용 보고서와 주간 조정을 수행하세요, 토큰을 과소 계산하는 러너 버그 자체가 폭주이기 때문입니다.
OpenRouter를 통해 라우팅하는 경우, 키별 크레딧 한도가 공급업체와 독립적인 두 번째 한도를 제공합니다; 절충점은 [OpenRouter vs direct API](/compare/openrouter-vs-direct-api)에서 확인할 수 있습니다.
이 작업을 수행하는 가장 저렴한 모델과 플래그십에 비용을 지불해야 할 때
가드레일이 피해를 제한합니다. 모델 선택이 기울기를 결정합니다. 잘 정의된 루프의 경우 DeepSeek V4.1 Flash ($0.30 / $1.20)는 200단계 재난을 $11짜리 귀찮은 일로 바꾸고, Gemini 3.8 Flash ($0.75 / $3.75)는 $28로 바꿉니다. 우리 경험상 둘 다 작업이 명확할 때 구조화된 도구 호출에서 신뢰할 수 있으며, [Gemini 에이전트 API 비용](/guides/gemini-agent-api-cost) 문서에서 Gemini 측면을 다룹니다.
작업이 모호하거나 루프가 길면 Claude Sonnet 5, GPT-5.4 또는 플래그십 모델에 비용을 지불하세요. 저렴한 모델이 가장 방황할 가능성이 높은 실행이기 때문이며, 방황은 위 표에서 가격이 매겨지는 것입니다. 무엇을 선택하든 위의 러너는 변경 없이 작동합니다. PRICES 행만 다릅니다. [계산기](/calculator)에서 자신의 트레이스 가격을 책정하고, [Claude 에이전트 API 비용](/guides/claude-agent-api-cost)에서 공급업체별 사용 필드를 확인하세요.
핵심 요점
- →200단계 루프는 36.7M 입력 토큰입니다: Claude Sonnet 5에서 $74, GPT-5.4에서 $93, Opus 5 및 GPT-5.5에서 $185, Gemini 3.8 Flash에서 $28, DeepSeek V4.1 Flash에서 $11.
- →이는 건강한 12단계 실행 비용의 약 190배이며, 단계 수는 17배입니다; 비용은 단계 수에 대해 제곱으로 증가합니다.
- →다섯 가지 가드레일: 호출당 max_tokens, 실행당 최대 단계 수, 명시적 중지 조건, 사용량 기반 실행당 USD 예산, 공급업체 콘솔의 일일 한도
- →100단계에서의 재시도는 약 183K 토큰을 다시 전송합니다: Sonnet 5에서 캐시되지 않은 경우 시도당 $0.37, 캐시된 경우 약 $0.04
- →프롬프트 캐싱은 Sonnet 5에서 200단계 재앙을 약 $8.78로 줄이며, 여전히 건강한 실행의 22배입니다.
- →실행별 비용을 기록하고 기능별로 실행을 태그하세요; p99가 급등하는 것이 첫 번째 경고입니다.
편집 컨텍스트
대상은 누구인가요?
프로덕션에서 도구 호출 에이전트를 실행하며, 실행이 잘못되었을 때 유지되는 지출 상한이 필요한 개발자 및 플랫폼 팀.
사용하지 말아야 할 경우
사람이 모든 단계를 지켜보는 1회성 스크립트와 노트북에서는 안전장치가 여전히 도움이 되지만, 실행별 예산은 과합니다.
가격 인사이트
동일한 에이전트가 Claude Sonnet 5에서 12단계에 $0.39, 200단계에 $74가 듭니다. 모든 단계가 커져 가는 컨텍스트를 다시 보내기 때문입니다.
고려할 대안
공급업체 측 워크스페이스 한도, OpenRouter 키별 크레딧 한도, 더 저렴한 루프 모델 모두 노출을 줄여 주지만, 어떤 것도 실행별 예산을 대체하지는 못합니다.
최종 결론
에이전트를 사용자 앞에 내놓기 전에 모든 실행에 달러 상한을 설정하세요. 코드 30줄이면 되고, $0.39 실행과 $74 실행을 가르는 차이입니다.
자주 묻는 질문
AI 에이전트가 지출할 수 있는 금액을 어떻게 제한하나요?
다섯 가지 제어를 함께 사용하세요: 모든 호출에 max_tokens, 실행당 최대 단계 수, 모델이 트리거할 수 있는 명시적 중지 조건, 각 응답의 사용량 객체에서 계산된 실행당 달러 예산, 공급업체 콘솔의 일일 또는 월간 한도. 실행당 예산이 실제로 피해를 추적하는 이유는 에이전트 비용이 단계 수의 제곱에 따라 증가하기 때문입니다.
폭주 에이전트 루프의 비용은 얼마인가요?
4,500토큰 시작 컨텍스트에 단계당 1,800토큰이 추가되는 200단계 루프는 약 3,670만 입력 토큰을 읽습니다. 피크 요금 기준으로 Claude Sonnet 5에서 대략 $74, GPT-5.4에서 $93, Claude Opus 5 또는 GPT-5.5에서 $185, Gemini 3.8 Flash에서 $28, DeepSeek V4.1 Flash에서 $11입니다. 동일한 에이전트의 정상 12단계 실행은 Sonnet 5에서 약 $0.39입니다.
API 응답에서 실행당 비용을 어떻게 계산하나요?
모든 응답에는 usage 객체가 포함됩니다. Anthropic에서는 input_tokens, cache_creation_input_tokens, cache_read_input_tokens, output_tokens에 각각 백만 개당 요금을 곱하고, OpenAI에서는 input_tokens, input_tokens_details.cached_tokens, output_tokens를 사용하며, Gemini에서는 usage_metadata를 사용합니다. 루프 전체에 걸쳐 합산하고 총합이 한도를 초과하면 중단하세요.
재시도에도 비용이 들까요?
속도 제한 오류로 거부된 요청은 일반적으로 청구되지 않지만, 모델이 생성하기 시작한 후 시간 초과된 요청은 대개 청구됩니다. 그리고 애플리케이션 수준에서 전체 단계를 재시도하면 전체 컨텍스트를 다시 보내게 됩니다. 참조 루프의 100번째 단계에서는 약 183,000개의 토큰으로, Claude Sonnet 5 캐시 미사용 시 시도당 약 $0.37입니다. SDK 재시도 횟수를 신중하게 설정하고, 그 위에 또 다른 재시도 루프를 절대 중첩하지 마세요.
공급업체 콘솔에서 하드 지출 한도를 설정할 수 있나요?
예, 다만 차이가 있습니다. Anthropic과 OpenAI는 모두 경고 임계값과 함께 워크스페이스 또는 프로젝트별 지출 한도를 설정할 수 있으며, 하드 한도에 도달하면 요청이 실패합니다. Google Cloud 예산은 기본적으로 알림만 제공하고 지출을 중단하려면 추가 구성이 필요합니다. 콘솔 한도는 첫 번째 방어선이 아니라 마지막 방어선으로 취급하세요. 문제가 있는 실행만이 아니라 모든 실행을 중단시키기 때문입니다.
프롬프트 캐싱이 통제 불능 루프로부터 나를 보호해 주나요?
어느 정도 완화해 줍니다. 캐시 읽기가 정가의 약 10%일 때, 200단계 Claude Sonnet 5 루프는 약 $74에서 약 $8.78로 줄어듭니다. 그래도 정상 실행 비용의 22배이므로, 캐싱은 비용 최적화이지 안전장치가 아닙니다. 단계 상한과 달러 예산은 어떤 경우에도 유지하세요.
Related
무료 강좌 · 회원가입 불필요
아직 결정하지 못하셨나요? 먼저 기본을 배우고, 나중에 가격을 확인하세요.