본문으로 건너뛰기

LLM 에이전트 API 비용 킬 스위치: 공급자 호출 전에 지출을 멈추는 법

L
10 분 소요AI API

유료 모델 요청이 공급자에게 나가기 전에 예산 게이트로 LLM 에이전트 비용 폭주를 차단합니다.

LLM 에이전트 API 비용 킬 스위치: 공급자 호출 전에 지출을 멈추는 법

LLM 에이전트 API 비용 킬 스위치는 유료 공급자 호출이 시스템 밖으로 나가기 전에 실행되어야 합니다. 월간 예산 알림, 사용량 대시보드, 결제 이메일은 운영에 도움을 주지만, 이미 루프를 돌고 있는 에이전트, 재시도 worker, sub-agent, 모델 호출을 숨긴 tool을 그 순간 멈춘다는 보장은 없습니다.

가장 작은 실무 설계는 다음과 같습니다. 요청이 만들 수 있는 최대 비용을 먼저 추정하고, 공유 원장에서 그 금액을 원자적으로 예약합니다. 예약이 성공한 경우에만 OpenAI, Anthropic, gateway, proxy 또는 다른 유료 모델 경로로 요청을 보냅니다. 응답 후에는 usage로 실제 금액을 정산하고 남은 예약을 해제합니다. 예산을 넘는다면 에이전트에는 retryable: false인 over_budget이 돌아와야 합니다.

제어막는 것비용 중지에서의 역할
예산 알림사람이 비용 증가를 늦게 보는 문제소프트 경고. 요청은 계속될 수 있음
공급자 또는 프로젝트 상한공급자 계정 단위 관리유용한 후방 장치. 에이전트의 첫 gate는 아님
Gateway 예산모든 트래픽이 하나의 proxy나 gateway를 통과할 때우회가 없으면 하드 스톱이 될 수 있음
호출 전 예산 게이트다음 유료 모델 호출자율 에이전트의 주 킬 스위치

중지 규칙은 코드와 runbook 양쪽에 있어야 합니다. over_budget 이후 planner는 새 유료 작업을 만들지 않고, sub-agent를 띄우지 않으며, 다른 paid key나 fallback route로 바꾸지 않고, tool 내부의 모델 호출도 멈춥니다. 사람이 cap이나 policy를 바꾸고 승인 이유를 기록하기 전까지 run은 끝난 상태입니다.

진짜 비용 킬 스위치란 무엇인가

진짜 킬 스위치는 사용량 그래프, billing dashboard, 이메일 알림, 일반 rate limit이 아닙니다. 다음 유료 요청을 보내기 전에 no라고 말할 수 있는 enforcement point입니다. 위치는 에이전트 runtime, 내부 OpenAI-compatible proxy, AI gateway, 공급자 wrapper, sidecar service 중 어디든 가능하지만, 반드시 에이전트가 실제로 쓰는 credential path를 통제해야 합니다.

흔한 장애는 예산을 모르는 것이 아니라 예산을 잘못된 층에 둔 것입니다. worker가 direct provider key를 이미 갖고 있는데 뒤쪽에 budget warning만 붙이면, 보호되는 것은 재무 메일함뿐입니다. planner loop, retry loop, tool loop, sub-agent queue는 모두 같은 budget scope를 통과해야 합니다.

운영 문서에서는 용어를 분리해야 합니다.

용어의미의미하지 않는 것
spend limit팀, 사용자, 프로젝트, run의 금액 상한시간당 token 처리량
rate limit시간 창당 요청 수 또는 token 수월간 전체 비용
soft budget알림, 리포트, threshold governance호출 전 차단
hard stop유료 작업 시작 전에 거절된 요청호출 후 도착한 메일 또는 그래프

이 구분은 사고 대응을 바꿉니다. 폭주 중 첫 질문은 어느 dashboard에 budget 필드가 있느냐가 아니라 어느 component가 다음 유료 호출을 막을 수 있느냐입니다.

제어 계층 선택

프로덕션에서는 계층을 나누는 편이 안전합니다. 요청 경로의 예산 게이트가 주 제어이고, 공급자, 플랫폼, 토큰 cap, 알림은 후방 장치입니다.

에이전트 루프 제한, token cap, gateway 예산, 공급자 후방 장치, 알림, 주 pre-provider gate를 비교하는 비용 제어 스택.

계층잘하는 일약점권장 역할
Agent loop limit무한 루프, 과도한 tool step, 긴 wall-clock최종 공급자 청구액을 모름로컬 안전장치
Per-call token cap한 요청의 최악 비용 축소많은 작은 요청 누적은 못 막음요청 형태 guardrail
Pre-provider spend gate시스템 밖으로 나가기 전 유료 요청 차단공유 원장과 경로 통제가 필요주 킬 스위치
Gateway budgetkey, team, provider, model을 가로지르는 통제우회 트래픽과 동시성 동작을 확인해야 함공유 control plane
Provider/project cap공급자 계정 단위 governance소프트일 수 있고 지연되며 에이전트 retry와 무관할 수 있음후방 장치
Alerts and audit logs감지, 알림, 사후 분석다음 호출을 꼭 막지는 않음관측성

OpenAI-compatible proxy를 이미 쓰고 있다면 거기에 budget check를 넣는 것이 가장 빠릅니다. 에이전트 runtime만 모든 모델 호출과 tool 호출을 본다면 runtime에 먼저 넣고 모든 sub-agent가 같은 budget scope를 상속하도록 해야 합니다. 여러 공급자를 쓰는 경우에는 worker마다 복사하는 것보다 내부 gateway나 proxy를 두는 편이 감사와 유지보수가 쉽습니다.

잘못된 설계는 일부만 막는 gate입니다. planner는 gate를 거치지만 evaluator, retrieval tool, image generator, emergency fallback key가 직통이면 사고 때 비용은 그 옆길로 빠져나갑니다.

예약, 호출, 정산 구현

응답 전에는 정확한 비용을 알 수 없습니다. 그래서 gate는 보수적으로 최대 합리 비용을 예약하고, 응답 후 usage로 실제 비용을 정산합니다.

최대 비용 추정, 원자적 예약, 공급자 호출, usage 기록, 정산, 상한 전 차단을 보여주는 reserve-call-reconcile 흐름.

최소 원장 필드는 다음과 같습니다.

필드필요한 이유
budget_id상한을 소유한 팀, 사용자, 프로젝트, 에이전트, run
limit_amount기간 또는 run의 최대 허용 비용
reserved_amount진행 중 호출에 이미 예약된 금액
actual_amount완료 후 usage로 정산된 실제 비용
period_start / period_end일간, 월간, run 단위 reset window
request_id예산 결정과 공급자 로그 연결
agent_run_idplanner, worker, sub-agent, tool 호출 그룹화
decisionallowed, blocked, reconciled, released
reasoncap reached, missing estimate, unknown model, override, policy block

호출 전 흐름은 짧게 유지할 수 있습니다.

ts
async function guardedModelCall(request) { const estimate = estimateWorstCaseCost(request); const reservation = await ledger.reserveAtomically({ budgetId: request.budgetId, requestId: request.requestId, agentRunId: request.agentRunId, amount: estimate, }); if (!reservation.allowed) { return { error: "over_budget", retryable: false }; } const response = await provider.responses.create(request.payload); await ledger.reconcile({ reservationId: reservation.id, actualAmount: costFromUsage(response.usage), usage: response.usage, }); return response; }

핵심은 원자적 예약입니다. 다섯 worker가 같은 남은 금액을 읽고 모두 공급자 호출을 보내면, usage 로그가 도착했을 때는 이미 늦습니다. 예약은 데이터베이스 transaction, Redis script, durable workflow step, gateway operation처럼 같은 budget_id에 대해 서로 끼어들 수 없는 단일 결정이어야 합니다.

streaming도 별도 규칙이 필요합니다. 처음 예약은 허용한 최대 출력 비용으로 잡습니다. usage가 stream 끝에만 나오면 close 후 정산합니다. client가 중간에 끊기고 usage가 불명확하면 전체 예약을 즉시 풀지 마세요. 보수적으로 보류하거나 unknown으로 표시하고 공급자 로그 기반 재정산 job을 돌리는 쪽이 안전합니다.

에이전트가 실제로 멈추게 만들기

예산 응답은 일반 예외가 아니라 에이전트 의미론입니다. timeout이나 일부 429는 재시도할 수 있지만, 같은 budget scope에서 over_budget은 끝입니다.

json
{ "error": "over_budget", "retryable": false, "budget_id": "team-alpha-agent-run", "next_allowed_action": "human_budget_override" }

세 가지 전파 규칙을 지키세요.

규칙이유
planner는 유료 작업을 더 만들지 않음root loop가 blocked job을 계속 만드는 것을 막음
sub-agent는 parent budget scope를 상속helper가 부모 중지 후 계속 쓰는 것을 막음
model call을 일으키는 tool도 같은 gate를 통과tool이 숨은 비용 경로가 되는 것을 막음

retry policy에는 stop list가 있어야 합니다. over_budget, policy_blocked, missing_budget_scope는 재시도하지 않습니다. 로그를 남기고 운영자에게 노출하며 run을 멈춥니다. 다른 공급자나 key로 바꾸는 것은 retry가 아니라 새로운 예산 결정입니다.

공급자와 gateway 경계 확인

공급자 제어는 유용하지만 같은 종류의 킬 스위치가 아닙니다. 내부 문서에 넣기 전에 현재 공식 문서를 다시 확인해야 합니다.

Surface현재 확인할 점실무 경계
OpenAI project budgets이번 run에서 확인한 OpenAI Help Center는 project monthly budgets를 soft spending threshold로 설명하며, 초과 후에도 API requests가 계속될 수 있다고 합니다. rate limits guide도 throughput limits와 usage/spend limits를 구분합니다.project budget만으로 request-path kill switch를 만들지 마세요.
OpenAI Responses usageusage fields는 실제 비용 정산에 도움을 줍니다.호출 후 기록에는 유용하지만 호출 전 차단은 아닙니다.
Anthropic limitsspend limits와 rate limits를 구분합니다.공급자 governance로 유용하지만 직접 호출은 gate를 거쳐야 합니다.
LiteLLM proxybudgets, agent/session caps, spend tracking이 문서화되어 있습니다.모든 유료 경로가 proxy를 통과한다면 구현 옵션입니다.
Cloudflare AI Gatewayspend limit 도달 후 HTTP 429로 차단할 수 있고 eventual consistency 주의가 있습니다.강한 gateway 옵션이지만 병렬 burst와 우회를 테스트해야 합니다.
Vercel Spend Managementnotify, webhook, pause deployment 같은 platform action이 있습니다.per-agent request gate의 대체품은 아닙니다.

OpenAI rate limit 또는 quota exceeded 증상은 별도 사고 경로로 다루세요. rate limit은 처리량 문제이고, spend kill switch는 다음 유료 요청을 예산 정책으로 막는 문제입니다.

공급자 호출 없이 테스트하기

킬 스위치가 준비되었다는 증거는 blocked 로그가 아니라 cap 이후 provider counter가 0이라는 점입니다.

fake provider, low cap, parallel calls, streaming abort, retry stop, audit proof를 포함한 zero-provider-call 검증 체크리스트.

테스트설정통과 조건
Fake providerprovider endpoint를 local counter service로 교체예산 소진 후 counter가 0
Cap below request남은 예산을 estimate보다 낮게 설정network call 전에 over_budget
Parallel workers경쟁이 있으면 초과될 만큼 동시 요청예약 성공분만 통과하고 나머지는 provider에 도달하지 않음
Streaming abortstream 중간에 강제 중단정산 전까지 보수적 예약 유지
Retry policytimeout, 429, over_budget 시뮬레이션retryable만 재시도, over_budget은 중지
Audit packetledger, request_id, agent_run_id, reason 확인운영자가 차단 이유를 설명 가능

가격 메타데이터, 모델 라우팅, retry policy, gateway 설정, ledger 저장소를 바꾸면 이 테스트를 다시 실행하세요. cap 이후 fake provider가 요청을 받는다면 아직 킬 스위치가 아니라 비용 모니터링입니다.

운영 runbook

  1. direct provider credential을 동결하고 worker가 gate를 우회할 수 없는지 확인합니다.
  2. budget scope를 확인합니다. user, team, project, agent run, monthly account cap 중 무엇인지 구분합니다.
  3. ledger에서 actual spend, reserved spend, in-flight calls, unknown reconciliation items를 확인합니다.
  4. agent가 terminal over_budget을 받았는지 확인합니다.
  5. retries, sub-agent scheduling, tool-triggered model calls를 중지합니다.
  6. provider logs와 ledger records를 request_id로 대조합니다.
  7. cap을 올릴지, task를 줄일지, run을 닫을지 결정합니다.
  8. human override가 필요하면 승인자, 새 cap, 만료 시간, 이유를 기록합니다.

가장 위험한 override는 다른 route로 다시 시도하는 것입니다. 공급자, 모델, gateway, key를 바꾸는 것은 같은 실패의 재시도가 아니라 새 budget decision입니다.

자주 묻는 질문

OpenAI project budget만으로 충분한가요?

아닙니다. 이번 확인 기준으로 OpenAI Help Center는 project budgets를 soft threshold로 설명합니다. governance와 alert에는 유용하지만 runaway agent를 멈추는 주 장치는 request-path gate여야 합니다.

HTTP 402, 429, 또는 domain error 중 무엇을 써야 하나요?

클라이언트가 일관되게 처리할 수 있는 것을 쓰면 됩니다. 다만 payload에는 budget cap 초과와 retryable: false가 있어야 합니다. gateway는 429를 쓸 수 있고 내부 runtime은 over_budget이 더 명확할 수 있습니다.

응답 전 비용은 어떻게 추정하나요?

그 요청이 만들 수 있는 최대 input, output, tool, image, streaming cost를 사용합니다. 완료 후 usage로 정산하고 남은 예약을 해제합니다.

provider usage가 늦게 오면요?

정산이 끝날 때까지 예약을 유지하거나 unknown으로 보수적으로 잡습니다. interrupted stream 직후 전액을 해제하면 실제 사용량 확인 전 예산이 다시 열립니다.

sub-agent는 별도 예산을 가져도 되나요?

가능하지만 parent run의 cap을 반드시 상속해야 합니다. helper가 parent 중지 후 계속 소비하면 안 됩니다.

이미 gateway가 있다면 어디서 시작하나요?

모든 paid model path가 gateway를 통과하는지 먼저 확인하세요. 그다음 fake provider, low cap, parallel calls로 테스트합니다. 우회가 닫힌 경우에만 gateway budget을 주 킬 스위치로 볼 수 있습니다.

Share:

laozhang.ai

One API, All AI Models

AI Image

Gemini 3 Pro Image

$0.05/img
80% OFF
AI Video

Sora 2 · Veo 3.1

$0.15/video
Async API
AI Chat

GPT · Claude · Gemini

200+ models
Official Price
Served 100K+ developers
|@laozhang_cn|Get $0.1