행동 예산, 반복 제한과 비용 거버너(Action Budgets, Iteration Caps, and Cost Governors)

어느 중간 규모 이커머스(e-commerce) 에이전트(agent)의 월간 LLM 비용은 팀이 "order-tracking" 스킬(skill)을 켠 직후 $1,200에서 $4,800으로 뛰었습니다. 이는 가격 책정 버그가 아니라, 새로운 루프(loop)를 찾아내고 그 안에서 계속 돈을 쓴 에이전트의 모습입니다. 마이크로소프트(Microsoft)의 에이전트 거버넌스 툴킷(Agent Governance Toolkit, 2026년 4월 2일)은 이 부류의 실패를 방어하는 방법을 체계화합니다. 요청(request)별 max_tokens, 작업(task)별 토큰·금액 예산, 일·월 단위 상한, 반복 제한(iteration cap), 계층형 모델 라우팅(tiered model routing), 프롬프트 캐싱(prompt caching), 컨텍스트 윈도잉(context windowing), 비싼 행동에 대한 사람 개입(Human-in-the-Loop; HITL) 체크포인트, 예산 초과 시 킬 스위치(kill switch)까지 포함합니다. 앤트로픽(Anthropic)의 클로드 코드 에이전트 SDK(Claude Code Agent SDK)도 이름만 다를 뿐 같은 기본 요소들을 제공합니다. 금융성 속도 제한(financial velocity limit), 예를 들어 10분 안에 $50를 넘으면 접근을 끊는 방식은 월간 상한보다 훨씬 빠르게 루프를 잡아냅니다.

유형: Learn 언어: Python (stdlib, 계층형 cost-governor 시뮬레이터) 선수 지식: Phase 15 · 10 (권한 모드, Permission modes), Phase 15 · 12 (지속 실행, Durable execution) 예상 시간: 약 60분

문제

자율 에이전트는 매 턴(turn)마다 실제 돈을 씁니다. 챗봇(chatbot)이 답을 잘못 내놓으면 그저 답이 나쁠 뿐이지만, 에이전트가 잘못된 루프에 빠지면 그것은 곧 청구서가 됩니다. 업계에서 이 실패 모드(failure mode)에 붙인 이름이 바로 "지갑 거부(Denial of Wallet)"입니다. 에이전트는 계속 추론(reasoning)하고, 계속 도구를 호출(tool call)하고, 계속 과금되는데, 멈추도록 설계된 장치가 없어 멈추지 못하는 상황을 가리킵니다.

해결책은 단일한 숫자 하나가 아니라, 서로 다른 시간 단위와 세분도(granularity)에서 동작하는 한도(limit)들의 묶음입니다. 요청별, 작업별, 시간별, 일별, 월별 한도가 모두 필요합니다. 잘 설계된 스택은 폭주 루프(runaway loop)는 몇 분 안에, 느린 누수(slow leak)는 몇 시간 안에, 잘못된 릴리스(bad release)는 하루 안에 잡아냅니다. 또한 같은 스택은 에이전트가 장기 자율 수행을 하는 동안에도 예산(budget)이 끝까지 유지되도록 지탱합니다.

이것은 엔지니어링 강의입니다. 수학 자체는 사소하고, 팀이 무너지는 지점은 규율(discipline)입니다. 아래에 정리한 한도 목록은 마이크로소프트 에이전트 거버넌스 툴킷이나 앤트로픽 클로드 코드 에이전트 SDK 문서에 이미 이름이 붙어 있는 것들입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.자율 에이전트 맥락에서 '지갑 거부(Denial of Wallet)'란?

2.단일 월간 상한만으로 비용 통제가 불충분한 이유는?

0/2 답변 완료

개념

비용 거버너 스택(cost-governor stack)

  1. 요청별 max_tokens. 단순합니다. 단일 호출 하나가 끝없는 완료(completion)를 뱉지 못하도록 막습니다.
  2. 작업별 토큰 예산(per-task token budget). 한 번의 실행(run) 전체에서 N개의 토큰을 넘지 않도록 합니다. 상한에 닿으면 즉시 강제 종료(hard stop)됩니다.
  3. 작업별 금액 예산(per-task dollar budget). 토큰 예산과 같지만 단위가 통화입니다. 클로드 코드(Claude Code)의 max_budget_usd가 여기에 해당합니다.
  4. 도구 호출별 상한(per-tool call cap). WebFetch 호출 N회 이하, shell_exec 호출 N회 이하 같은 제한을 둡니다.
  5. 반복 제한(max_turns). 에이전트 루프 전체 반복 횟수를 제한해 무한 추론 루프를 차단합니다.
  6. 분·시·일·월 단위 상한(per-minute / per-hour / per-day / per-month cap). 롤링 윈도(rolling window) 방식입니다. 서로 다른 시간 단위에서 누수를 잡습니다.
  7. 금융성 속도 제한(financial velocity limit). 예: "10분 안에 지출이 $50를 넘으면 접근을 끊는다." 월간 상한이 발동되기 전에 루프 기반의 과다 소비(burn)를 잡습니다.
  8. 계층형 모델 라우팅(tiered model routing). 기본적으로 더 작은 모델을 쓰고, 분류기(classifier)가 작업이 그만한 가치가 있다고 판단할 때만 큰 모델로 승격(escalate)합니다.
  9. 프롬프트 캐싱(prompt caching). 시스템 프롬프트와 안정적인 컨텍스트를 공급자(provider) 캐시에 저장합니다. 재전송 시 토큰 비용이 거의 0에 가깝습니다.
  10. 컨텍스트 윈도잉(context windowing). 압축(compaction)이나 요약(summarization)을 통해 활성 컨텍스트(active context)를 임계값 아래로 유지합니다. 토큰 비용을 직접적으로 줄입니다.
  11. 비싼 행동에 대한 HITL 체크포인트. 오래 걸리는 도구 호출, 큰 다운로드, 비싼 모델로의 업그레이드처럼 비용이 큰 것으로 알려진 행동 전에는 사람의 승인(human tap)을 요구합니다.
  12. 예산 초과 시 킬 스위치(kill switch on budget breach). 어떤 상한이라도 발동되면 세션(session)이 중단됩니다. 발동된 상한은 기록되고, 다시 활성화하려면 별도의 재활성화(re-enable) 경로를 거쳐야 합니다.

왜 단일 상한이 아니라 스택인가

월간 상한 하나만 두면 폭주하는 에이전트는 지갑이 거의 비고 나서야 잡힙니다. 요청별 상한 하나만 두면 세션 수준에서는 아무것도 잡지 못합니다. 서로 다른 실패 모드에는 서로 다른 시간 단위가 필요합니다.

  • 폭주 루프(runaway loop) — 에이전트가 5초 간격의 재시도에 갇힌 경우. 속도 제한이 잡습니다.
  • 느린 누수(slow leak) — 에이전트가 작업마다 예상보다 약 2배의 일을 하는 경우. 일별 상한이 잡습니다.
  • 잘못된 릴리스(bad release) — 새 버전이 토큰을 5배 쓰는 경우. 주간·월간 상한이 잡습니다.
  • 정상적인 수요 증가(legitimate surge) — 버그가 아니라 실제 수요가 늘어난 경우. 시간·일 단위 상한과 명확한 로그(log)가 잡습니다.

클로드 코드의 예산 표면(budget surface)

클로드 코드 에이전트 SDK는 공개 문서 기준으로 다음을 노출합니다.

  • max_turns — 반복 제한.
  • max_budget_usd — 금액 상한이며, 초과 시 세션이 중단됩니다.
  • allowed_tools / disallowed_tools — 도구 허용 목록(allowlist)과 차단 목록(denylist).
  • 도구 사용 전에 사용자 정의 비용 회계(cost-accounting) 로직을 끼워 넣을 수 있는 훅 포인트(hook point).

이를 권한 모드 사다리(permission-mode ladder, Lesson 10)와 결합하세요. max_budget_usd가 없는 autoMode 세션은 통제되지 않은 자율성에 해당합니다. 앤트로픽은 Auto Mode에 반드시 예산 제어가 필요하다고 명시적으로 못 박아 두고 있으며, 분류기는 비용과는 직교(orthogonal)하는 별도의 축입니다.

EU AI Act, OWASP Agentic Top 10

마이크로소프트 에이전트 거버넌스 툴킷은 OWASP Agentic Top 10과 EU AI Act 14조(사람 감독, human oversight) 요구사항을 다룹니다. EU에서 프로덕션(production)을 운영한다면 로깅(logging)과 상한 강제(cap enforcement)는 선택 사항이 아닙니다.

관찰된 $1,200 → $4,800 사례

마이크로소프트 문서에 등장하는 실제 사례입니다. 어떤 이커머스 에이전트는 새 도구가 추가된 뒤 월간 비용이 세 배로 늘었습니다. 그 도구는 에이전트가 모든 세션에서 주문 상태(order status)를 폴링(poll)할 수 있게 만들었습니다. 루프 탐지(loop detection)도 없었고, 도구별 상한도 없었으며, 주간 단위(week-over-week) 증가 알림도 없었습니다. 해결은 도구별 상한과 일별 증가 알림을 함께 도입하는 것이었습니다. 이는 하나의 템플릿입니다. 새로 추가되는 도구 표면(tool surface)은 모두 잠재적인 새 루프이고, 새로 추가되는 모든 도구에는 자기만의 상한과 자기만의 알림이 필요합니다.

사용해보기

code/main.py는 계층형 비용 거버너 스택이 있을 때와 없을 때의 에이전트 실행을 시뮬레이션합니다. 시뮬레이션 에이전트는 몇 턴이 지나면 폴링 루프(polling loop)로 흘러갑니다. 계층형 스택은 속도 제한 윈도 안에서 이를 잡아내지만, 월간 상한만 있다면 며칠 뒤에야 발동합니다.

산출물 만들기

outputs/skill-agent-budget-audit.md는 제안된 에이전트 배포(agent deployment)의 비용 거버너 스택을 감사하고, 빠진 계층(layer)을 표시합니다.

연습문제

  1. (쉬움) code/main.py를 실행하세요. 폴링 루프 궤적(trajectory)에서 속도 제한이 반복 제한보다 먼저 발동하는지 확인하세요. 그런 다음 속도 제한을 끄고, 반복 제한이 잡기 전까지 에이전트가 얼마나 "지출"하는지 측정하세요.

  2. (중간) 브라우저 에이전트(Lesson 11)를 위한 도구별 상한 집합을 설계하세요. 어떤 도구에 가장 빡빡한 상한이 필요한가요? 어떤 도구는 위험 없이 상한 없이 실행해도 되나요?

  3. (중간) 마이크로소프트 에이전트 거버넌스 툴킷 문서를 읽으세요. 툴킷에 이름 붙은 모든 상한 유형을 나열하고, 각각을 실패 모드(폭주 루프, 느린 누수, 잘못된 릴리스, 수요 증가) 중 하나에 매핑하세요.

  4. (중간) 현실적인 작업(예: "어떤 저장소(repo)의 이슈 50개를 분류(triage)")에 대한 야간 무인 실행(overnight unattended run) 비용을 산정하세요. max_budget_usd를 자신이 추정한 값의 2배로 설정하고, 왜 2배인지를 정당화하세요.

  5. (어려움) 클로드 코드의 max_budget_usd는 세션 누적 비용을 기준으로 발동합니다. 외부에서 함께 강제할 보완적 속도 제한을 설계하세요. 무엇이 차단(cut-off)을 발동시키고, 재활성화는 어떤 모습이어야 하나요?

핵심 용어

용어흔한 설명실제 의미
지갑 거부(Denial of Wallet)"통제되지 않는 청구서"멈출 상한 없이 에이전트 루프가 지출을 계속 만들어내는 상황
max_tokens"요청별 상한"단일 완료(completion) 크기의 상한
max_turns"반복 제한"세션 안의 에이전트 루프 반복 횟수 상한
max_budget_usd"금액 킬 스위치"세션 비용 상한이며, 초과 시 중단
속도 제한(Velocity limit)"단위 시간당 상한"짧은 윈도 안의 지출 제한 (예: $50 / 10분)
계층형 라우팅(Tiered routing)"작은 모델 먼저"기본은 저렴한 모델, 분류기가 필요하다고 판단할 때만 승격
프롬프트 캐싱(Prompt caching)"캐시된 시스템 프롬프트"공급자측 캐시가 재전송 토큰 비용을 거의 0으로 줄여줌
HITL 체크포인트(HITL checkpoint)"사람 승인 게이트"비싼 행동 전에 사람의 승인이 필요

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

agent-budget-audit

Audit an agent deployment's cost-governor stack and flag missing layers before enabling unattended runs.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.이커머스 에이전트의 비용이 주문 추적 도구 추가 후 $1,200에서 $4,800/월로 뛰었습니다. 원인은?

2.'금융성 속도 제한(financial velocity limit)'이란 무엇이며 월간 상한보다 폭주 루프를 빠르게 잡는 이유는?

3.Claude Code의 max_budget_usd는 세션 금액 상한을 강제합니다. autoMode에 함께 필요한 보완 통제는?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다