테마 전환

AI Agent 비용 제어: 모델 라우팅, 도구 예산, 캐시, 재시도 한도 설계

Easton editorial illustration: agent rollout and rollback rail
7
예산 계층
user, tenant, workflow, task, tool, retry, cache.
4
제어 액션
route, degrade, pause, abort.
3
캐시 유형
prompt prefix cache, business result cache, tool response cache.
数据来源: 이 엔지니어링 체크리스트는 1 단계 공식 문서 조사를 바탕으로 정리했습니다. 가격, 할인, 모델 제공 여부는 공개 전에 공식 페이지에서 다시 확인해야 합니다.

"OpenAI API Pricing"

새벽 3 시, 백그라운드 report Agent 가 빈 응답을 돌려줍니다. HTTP 상태 코드는 200 이지만 body 는 비어 있습니다. 재시도 로직은 상태 코드만 확인하므로 계속 다시 시도합니다. 요청마다 500 token 입력을 보내고, 1,500 번 재시도한 끝에 75 만 token 을 태웁니다. 다음 날 아침 청구서를 보고 나서야 문제가 보입니다.

근본 원인은 “비싼 모델을 골랐다”가 아닙니다. 빠진 것은 세 가지입니다. circuit breaker, 예산 확인, 오류 분류입니다. Agent 비용이 통제되지 않는 전형적인 패턴은 세 가지입니다.

재시도에 상한이 없습니다. 실패 모드 분류가 없어 빈 응답을 재시도 가능한 오류로 취급합니다. circuit breaker 도 없어서 1,500 번 연속 실패해도 멈추지 않습니다. 재시도마다 전체 컨텍스트를 다시 보내 비용이 2-5 배 커집니다.

컨텍스트가 비대해집니다. 긴 작업이 6 시간 동안 실행되며 대화 기록이 80K tokens 까지 커집니다. checkpoint 가 없으면 실패 후 처음부터 다시 실행하고, 모든 단계에서 다시 비용을 냅니다.

모델을 과하게 씁니다. 라우팅 전략 없이 모든 작업을 frontier model 로 보냅니다. 단순 분류 작업도 가장 비싼 모델을 사용해 token 의 70% 를 낭비합니다.

Agent 비용 제어는 단일 최적화가 아닙니다. 예산 객체, 라우팅 전략, 캐시 히트, 재시도 차단, 비용 로그, 알림 임계값을 겹겹이 설계하는 일입니다. 이 여섯 가지 엔지니어링 대상을 판단표나 실행 가능한 체크로 바꿔야 합니다.

예산 객체 설계: 무엇을 기록하고, 어디에 두며, 어떻게 차단할까

비용 제어는 예산 객체에서 시작합니다. 총액만 기록해서는 부족합니다. 계층이 없으면 청구 이상이 생겼을 때 어떤 사용자, 작업, 도구가 비용을 태웠는지 찾을 수 없습니다.

7 계층 예산 객체

예산 객체는 거친 단위에서 세밀한 단위로 7 계층으로 나눌 수 있습니다.

예산 계층예산 객체권장 상한알림 조건
Layer 1user사용자별 일/월 상한잔여 < 20% 알림
Layer 2tenanttenant 별 독립 예산 풀잔여 < 30% 알림
Layer 3workflowworkflow 유형별 독립 예산잔여 < 40% 알림
Layer 4task작업 유형별 독립 예산잔여 < 50% 알림
Layer 5tool도구 호출별 독립 예산상한 초과 시 도구 건너뛰기
Layer 6retry재시도 횟수 상한 + circuit breaker연속 실패 N 회 후 도구 비활성화
Layer 7cache캐시 히트율 모니터링히트율 < 기대값 알림

각 계층의 예산 상한은 비즈니스 모델에 따라 달라지는 설정입니다. 하지만 계층 구조 자체는 안정적입니다. 남은 예산 필드는 비용 로그에 써서 알림과 차단 판단에 사용합니다.

각 계층이 기록해야 할 필드

각 예산 계층은 다음 필드를 기록해야 합니다.

필드명용도타입기록해야 하는 이유
model모델 식별string모델 라우팅이 적절한지 판단
inputTokens입력 token 수integer입력 비용 계산
outputTokens출력 token 수integer출력 비용은 별도로 기록해야 함
cachedTokens캐시 히트 token 수integer캐시 절감 효과 계산
costEstimate이번 호출의 비용 추정float실시간 비용 누적
budgetRemaining남은 예산floatcircuit breaker 판단 근거

예산 객체 설계의 핵심은 “차원별 회계”입니다. “total_cost 만 기록”하는 것이 아닙니다. 멀티테넌트에서는 tenantId 로 비용을 나누고, 여러 도구를 쓰는 경우 toolName 으로 블랙박스를 찾아야 합니다.

차단 로직

남은 예산이 임계값보다 낮으면 circuit breaker 를 발동합니다.

def check_budget_before_retry(budget_remaining, retry_cost_estimate):
    if budget_remaining < retry_cost_estimate:
        return "skip_retry"  # 예산을 넘기므로 재시도 건너뛰기
    if budget_remaining < threshold:  # threshold 예: 20%
        return "wait_approval"  # 잔여 예산이 부족하므로 승인 대기
    return "continue"

차단 로직은 재시도 후가 아니라 재시도 전에 남은 예산을 확인해야 합니다. 매번 재시도 전에 비용을 추정하고, 예산을 넘으면 멈춥니다. 그래야 “빈 응답을 1,500 번 재시도해 하루 예산을 태우는” 일을 피할 수 있습니다.

어떤 컨텍스트를 안정적인 prefix 에 넣고 어떤 것을 실행 시 변수로 뒤에 둘지는 같은 시리즈의 context engineering 글에서 다룹니다.

모델 라우팅 전략: 모든 작업에 가장 비싼 모델이 필요한 것은 아니다

ticket triage Agent 의 실제 분포를 보면 70% 는 단순 분류, 20% 는 답변 초안, 고객에게 메일을 보내기 전 frontier model 로 올려야 할 작업은 10% 정도입니다. 라우팅 전략은 비용을 40-85% 줄일 수 있습니다.

모델 계층 라우팅

모델 계층 라우팅은 작업 복잡도로 나눕니다.

작업 계층전형적 작업권장 모델 계층비중비용 특성
70% - S 급분류, 추출, 필터링, 간단 Q&Anano/flash(가장 저렴)70%짧은 출력, 적은 턴, 적은 도구 호출
20% - M 급초안, 요약, 코드 생성, 중간 수준 추론mid-tier(중간 가격)20%중간 길이 출력, 도구 호출 가능
10% - L 급리뷰, 아키텍처 설계, 복잡 추론, 다중 도구 조율frontier(가장 비쌈)10%긴 출력, 많은 턴, 잦은 도구 호출

라우팅 전략은 세 단계입니다.

첫 단계: 작업을 분류합니다. 각 workflow 에 S/M/L 복잡도 기준을 정의합니다. 출력 길이, 도구 호출 수, 추론 깊이, 위험 수준을 포함합니다.

둘째 단계: 기본값은 S 급입니다. 복잡한 특징에 해당할 때만 M 또는 L 로 올립니다.

셋째 단계: 단계적으로 올립니다. S 급 모델이 실패하면 M 급, M 급이 실패하면 L 급으로 올립니다. L 급도 실패하면 사람 개입으로 넘깁니다. 올리기 전에 남은 예산을 확인하고, 초과하면 업그레이드를 건너뜁니다.

서비스 계층 라우팅

같은 모델도 latency priority 에 따라 나눌 수 있습니다. 할인율과 완료 시간은 변하기 쉬우므로 공개 전에 공식 가격을 다시 확인합니다.

서비스 계층비용 할인완료 시간적합한 경우
Realtime API할인 없음즉시 응답대화형 Agent, 높은 우선순위 작업
Batch API50% cost discount(공개 전 재확인)24-hour turnaround(공개 전 재확인)batch eval, 분류, embedding, 콘텐츠 저장소 처리
Flex Processing낮은 비용(공개 전 재확인)느린 응답, 간헐적 사용 불가낮은 우선순위 비동기 작업, model evaluations, data enrichment

오프라인 작업 라우팅 체크리스트입니다.

  • 즉시 응답이 필요한가요? 예 -> Realtime API, 모델 라우팅 적용.
  • 24 시간 지연을 허용할 수 있나요? 예 -> Batch API.
  • 낮은 우선순위이고 간헐적 실패를 허용하나요? 예 -> Flex Processing.
  • eval, 분류, embedding 같은 batch 처리인가요? 예 -> Batch API.

위험도 분류

작업은 위험 수준별로도 나누고, 이에 따라 라우팅 경로를 바꿉니다.

위험 수준전형적 작업라우팅 전략예산 분기
낮은 위험분류, 추출, 내부 요약S 급 모델 + 자동 경로승인 없음, 예산 상한 여유
중간 위험고객 답변 초안, 코드 변경 제안M 급 모델 + 선택 승인예산 초과 시 승인 요청 가능
높은 위험고객 메일 발송, 결제, 아키텍처 변경L 급 모델 + 필수 승인승인 대기, 거절, timeout 이 예산 분기

승인 대기, 거절, timeout 이 예산 분기에 어떤 영향을 주는지는 같은 시리즈의 Human-in-the-Loop 글에서 다룹니다.

핵심 제약

라우팅 전략에는 몇 가지 제약이 필요합니다.

  • 가격 숫자를 하드코딩하지 않습니다: 가격은 변합니다. 비용 공식을 비즈니스 로직에 박지 말고 model + pricingVersion 을 기록합니다.
  • 남은 예산을 확인합니다: 올리기 전에 budgetRemaining 을 확인합니다. 예산이 부족하면 건너뛰거나 승인을 요청합니다.
  • 오류를 분류합니다: 라우팅 실패는 복구 가능한 모델 능력 부족과 복구 불가능한 파라미터 오류, 권한 거부를 구분해야 합니다.

도구 호출 예산: per-tool budget, timeout, 재시도 상한

도구 호출에는 schema 비용과 API 비용이 함께 있습니다. 매번 schema, 인자, 응답 파싱 컨텍스트를 보내고, 외부 API 는 rate limit 이나 timeout 을 낼 수 있습니다. 이 비용은 모델 호출과 별도입니다.

도구 예산 제어

각 도구에 독립적인 예산 제어를 설정합니다.

제어 항목권장 설정모니터링 필드트리거 동작
Per-tool budget호출당 상한tool_cost_estimate상한 초과 시 도구 건너뛰기 또는 강등
Tool timeout외부 API timeouttool_durationtimeout 을 재시도 가능 오류로 표시
Retry limit per tool단일 도구 재시도 상한tool_retry_count상한 초과 시 도구 포기, 루프 진입 방지

검색, 데이터베이스, 외부 서비스 같은 외부 API 도구는 별도로 기록해야 합니다. 그렇지 않으면 도구 호출이 비용 블랙박스가 됩니다.

도구 실패 분류

도구 실패는 복구 가능과 복구 불가능으로 나눕니다.

실패 유형전형적 오류처리 전략비용 영향
복구 가능한 실패네트워크 timeout, 503 Service Unavailable, 429 Rate Limitexponential backoff 와 retry-after 로 자동 재시도각 재시도에서 전체 컨텍스트 소비
복구 불가능한 실패403 Permission Denied, 400 Bad Request, 없는 도구재시도하지 않고 오류를 주입해 모델이 판단재시도 없음, 무효 비용 방지

핵심은 “외부 원인의 일시적 실패만 재시도하고, 내부 설정 오류는 재시도하지 않는다”입니다.

Circuit breaker

연속 실패 N 회 후 도구를 비활성화해 “빈 응답 1,500 회 재시도”를 막습니다.

def circuit_breaker_tool(tool_name, consecutive_failures, threshold=5):
    if consecutive_failures >= threshold:
        return "disable_tool"  # 도구 비활성화
    return "continue"

circuit breaker 상태는 로그에 남깁니다. “왜 도구가 비활성화됐는지”를 추적하기 위해서입니다. 차단 후에는 사람의 개입이나 자동 복구 체크를 기다리고, 불안정한 도구를 반복 호출하지 않습니다.

도구 호출의 기본은 도구 호출에서 다루었습니다. 이 글은 per-tool budget, timeout, 재시도 상한을 확장합니다.

Prompt Caching 설계: 안정 prefix, 변수 위치, 1024 token 기준

Prompt Caching 은 안정적인 prompt prefix 의 입력 token 을 최적화하는 기능입니다. 비즈니스 결과 캐시가 아닙니다. 같은 prompt prefix 를 최근 처리한 서버로 요청을 라우팅해 지연 시간과 입력 token 비용을 줄입니다.

Prompt Caching 은 결과 캐시가 아니다

Prompt Caching 이 캐시하는 것은 안정적인 prompt prefix 이며, 비즈니스 결과가 아닙니다. 차이는 중요합니다.

  • Prompt Caching: system prompt, tool schema 같은 안정적인 prompt prefix 를 캐시합니다. 히트하면 입력 token 을 절약하지만 추론은 다시 실행됩니다.
  • 비즈니스 결과 캐시: 도구 호출 결과나 데이터베이스 조회 같은 완전한 출력을 캐시합니다. 히트하면 모델을 호출하지 않고 바로 반환합니다.

목적이 다릅니다. Prompt Caching 은 입력 token 비용을 최적화하고, 비즈니스 결과 캐시는 전체 호출 비용을 최적화합니다. 둘은 함께 쓸 수 있습니다. 안정적인 prefix 는 Prompt Caching, 자주 쓰는 도구 결과는 비즈니스 캐시에 둡니다.

구조 요구사항

핵심은 안정적인 prefix 와 실행 시 변수를 분리하는 것입니다.

콘텐츠 유형위치캐시 히트 가능성대표 내용
안정 prefix(cache 에 들어감)Prompt 앞부분높음System prompt, Tool schema, Policy 문서, Few-shot 예시
실행 시 변수(cache 에 넣지 않음)Prompt 뒷부분낮음User input, File fragments, Runtime state(현재 대화 턴, 임시 변수)

설계 단계입니다.

  1. System prompt, Tool schema, Policy 를 앞에 둡니다: 여러 호출에서 안정적이므로 캐시에 맞기 쉽습니다.
  2. User input, File fragments, Runtime state 를 뒤에 둡니다: 매번 바뀌므로 안정 prefix 에 들어가면 안 됩니다.
  3. Cache hit rate 를 모니터링합니다: cachedTokens 와 총 입력 token 을 기록하고 히트율을 계산합니다. 40% 초과면 건강하고, 20% 미만이면 prompt 구조를 점검합니다.

기준과 효과

Prompt Caching 의 자동 활성화 기준과 효과는 변할 수 있으므로 공개 전에 공식 문서를 다시 확인합니다.

  • 기준: 1024 tokens 이상에서 자동 활성화(공개 전 재확인).
  • 효과: 히트 시 비용과 지연 시간을 낮출 수 있음(정확한 비율은 재확인).
  • 히트 확인: usage.prompt_tokens_details.cached_tokens 필드.

Prompt Caching 의 지원 모델, 기준, 할인율은 바뀔 수 있습니다. 공개 전 공식 pricing 페이지에서 확인해야 합니다. 안정적인 설계 원칙은 “정적 내용은 앞에, 변동 내용은 뒤에”입니다.

실패 재시도 차단: 멱등성, 상태 저장, 남은 예산 확인

재시도는 비용 폭주의 가장 큰 원인 중 하나입니다. 백그라운드 report Agent 가 불안정한 도구에 걸리고 매번 전체 컨텍스트를 다시 보내면, 1,500 번 재시도 후 비용은 정상 경로에서 크게 벗어납니다.

재시도 전에 예산 확인하기

재시도 후가 아니라 재시도 전에 남은 예산을 확인합니다.

def should_retry(error_type, budget_remaining, retry_cost_estimate):
    # 오류 분류
    if error_type in ["403", "400", "tool_not_exist"]:
        return False  # 복구 불가능 오류, 재시도하지 않음

    # 예산 확인
    if budget_remaining < retry_cost_estimate:
        return False  # 예산 초과, 재시도하지 않음

    return True  # 재시도 가능

예산 확인은 재시도 로직보다 앞에 있어야 합니다. 그래야 빈 응답을 1,500 번 재시도해 하루 예산을 쓰는 일을 피할 수 있습니다.

멱등성

재시도는 이메일 발송이나 결제 같은 부작용을 반복 실행하면 안 됩니다.

  • 도구 호출에는 requestId 같은 멱등 ID 를 사용합니다. 외부 API 가 같은 ID 를 받으면 작업을 다시 처리하지 않고 캐시된 결과를 반환해야 합니다.
  • 멱등 ID 는 비용 로그에 기록해 중복 호출을 판단할 수 있게 합니다.

멱등 설계의 핵심은 “같은 작업이 두 번 비용을 쓰지 않게 하는 것”입니다. 없으면 재시도가 비용과 부작용을 모두 증폭합니다.

상태 저장(Checkpoint)

긴 작업은 실패 후 전체 workflow 를 다시 실행하지 않아야 합니다.

  • 중요한 노드에 도달하면 완료된 단계, 현재 상태, 컨텍스트 요약을 포함해 checkpoint 를 저장합니다.
  • 실패 복구 시 처음부터가 아니라 checkpoint 에서 이어갑니다.
  • Checkpoint 는 영속 저장소에 씁니다. 메모리에만 두면 부족합니다.

checkpoint 와 thread state 설계는 LangGraph Agent 아키텍처에서 다루었습니다.

재시도 전략

오류 유형별로 재시도 전략을 달리해야 합니다.

오류 유형전형적 오류재시도 전략비용 영향
네트워크 timeout10 초 응답 없음exponential backoff + retry-after, 최대 3 회각 재시도에서 전체 컨텍스트 소비
503/429Service Unavailable, Rate Limitrate limit window + retry-after 대기, 최대 3 회대기는 token 을 쓰지 않지만 재시도는 사용
403/400Permission Denied, Bad Request재시도하지 않고 오류를 주입해 모델 판단재시도 없음, 무효 비용 방지

핵심은 “복구 가능한 오류만 재시도”하는 것입니다. 무효 요청을 모델에 반복해서 보내면 안 됩니다.

Circuit breaker

연속 실패 N 회 후 재시도를 멈추고 개입을 기다립니다.

def circuit_breaker(consecutive_failures, threshold=5):
    if consecutive_failures >= threshold:
        return "stop_retry"  # 재시도 중지
    return "continue"

circuit breaker 판단은 로그에 남겨야 합니다. 왜 재시도를 멈췄는지 설명하기 위해서입니다. 차단 후에는 사람의 개입이나 예산 회복을 기다리고, 불안정한 도구나 모델을 반복 호출하지 않습니다.

비용 로그와 알림: 어떤 필드와 임계값을 둘까

비용 관측성은 비용 제어의 전제입니다. 로그 필드가 부족하면 문제 위치를 찾을 수 없습니다.

OpenTelemetry trace span attributes

비용 로그는 세 계층 span 으로 설계합니다.

Agent run span(최상위):

필드명용도타입기록해야 하는 이유
runId특정 실행 식별string같은 workflow 의 여러 실행 구분
tenantIdtenant 식별string멀티테넌트 비용 분배
userId사용자 식별string사용자별 비용 추세 확인
workflowNameworkflow 식별stringworkflow 유형별 비용 확인
totalCost총 비용 추정float실시간 비용 누적
budgetRemaining남은 예산floatcircuit breaker 판단 근거
totalRetries총 재시도 횟수integer재시도 증폭 확인

Model call span(자식 span):

필드명용도타입기록해야 하는 이유
model모델 식별string모델 라우팅이 적절한지 판단
pricingVersion가격 버전string비용 공식을 하드코딩하지 않기 위함
inputTokens입력 token 수integer입력 비용 계산
outputTokens출력 token 수integer출력 비용 별도 기록
cachedTokens캐시 hit token 수integer캐시 절감 계산
costEstimate이번 호출 비용 추정float실시간 비용 누적
latencyMs호출 지연 시간integerBatch/Flex 적합성 판단

Tool call span(자식 span):

필드명용도타입기록해야 하는 이유
toolName도구 식별string도구 호출 overhead 식별
toolBudget도구 예산 상한floatcircuit breaker 판단 근거
toolTimeout도구 timeoutintegertimeout 실패 분류
retryCount재시도 횟수integer재시도 증폭 측정
errorType오류 유형string복구 가능/불가능 분리

total_cost 만 기록하지 마세요. 차원별로 나눠야 합니다. 이런 필드가 없으면 청구 이상은 “초과”만 말해줄 뿐, 어떤 사용자, 도구, 재시도 경로가 원인인지 알려주지 않습니다.

로그, 알림, 실패 복구의 전체 설계는 Agent 모니터링과 복구에서 다루었습니다. 이 글은 비용 필드와 예산 객체를 보완합니다.

알림 임계값

알림 임계값은 차원별로 설정합니다.

알림 차원알림 임계값알림 방식트리거 동작
전체 예산 소비70%, 90%, 100%Slack/이메일 알림70% 알림, 90% 강등, 100% 차단
단일 user/tenant 소비평균의 3 배 초과Slack/이메일 알림비정상 호출 확인
단일 모델 실패율> 5%Dashboard 알림모델 라우팅 또는 서비스 상태 확인
단일 도구 재시도 횟수> 임계값Dashboard 알림도구 안정성 확인
캐시 히트율< 기대값Dashboard 알림prompt 구조 확인

알림 임계값은 비용 로직에 있어야 자동으로 알림과 circuit breaker 를 발동할 수 있습니다.

강등 전략

알림 후 강등 경로는 다음과 같습니다.

강등 경로강등 방식적합한 상황비용 영향
모델 강등큰 모델 -> 작은 모델단일 모델 실패율이 높음비용 감소, 품질 저하 가능
경로 강등Realtime API -> Batch API -> Flex Processing전체 예산이 너무 빨리 소진됨지연 증가, 비용 감소
기능 강등비핵심 도구 호출 끄기단일 도구 재시도가 많음도구 호출 overhead 감소
사용자 강등rate limit, queue, “나중에 다시 시도” 안내단일 사용자 소비가 비정상한 사용자가 예산을 태우는 것 방지

강등 전략은 예산 로직 안에 있어야 합니다. 알림이 발생하면 사람이 개입한 뒤가 아니라 시스템이 자동으로 강등해야 합니다.

다음 단계

Agent 비용 제어는 모니터링, 도구 호출, context engineering 과 함께 봐야 합니다.

  • 게시됨: Agent 모니터링과 복구: 로그 필드, 알림 설정, 실패 복구. 이 글은 비용 필드와 예산 객체를 보완합니다.
  • 게시됨: LangGraph Agent 아키텍처: checkpoint, thread state, 긴 작업 복구.
  • 게시됨: 도구 호출: 도구 호출 기초. 이 글은 per-tool budget, timeout, 재시도 상한을 확장합니다.
  • 같은 시리즈: context engineering: 안정 prefix 와 캐시 히트, 어떤 컨텍스트를 안정 prefix 에 넣고 어떤 것을 실행 시 변수로 둘지.
  • 같은 시리즈: Human-in-the-Loop: 승인 대기, 거절, timeout 예산 분기와 승인이 비용 및 재시도 경로에 주는 영향.

먼저 세션 단위 방어선부터 시작합니다. per-session cost limit 을 설정하고 단일 세션이 예산을 넘으면 자동 종료합니다. 폭주한 작업 하나가 하루 예산을 태우는 것을 막는 가장 빠른 첫 단계입니다. 이후 예산 객체 계층화, 모델 라우팅, 도구 호출 예산, Prompt Caching, 재시도 차단, 비용 로그로 확장합니다.

Agent 비용 예산과 circuit breaker 설계하기

예산 객체, 모델 라우팅, 서비스 계층 라우팅, 캐시, 도구 예산, retry circuit breaker 로 Agent 비용 제어를 각 run 실행 전으로 앞당깁니다.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: 모든 비용 경로 나열하기

    Agent 의 모델 호출, 도구 호출, 파일 읽기, 외부 API, batch 처리, 캐시, 재시도 경로를 나열합니다.
  2. 2

    Step 2: 예산 객체 정의하기

    tenant, user, run, workflow, model, tool, retry, cache, time window 축으로 예산 객체를 기록합니다.
  3. 3

    Step 3: 라우팅 전략 설정하기

    작업 유형별로 모델 계층 라우팅과 서비스 계층 라우팅을 설정하고 online, batch, flex, queue 를 구분합니다.
  4. 4

    Step 4: 캐시 히트 설계하기

    안정적인 컨텍스트를 prompt prefix 에 두고 변수 내용은 뒤에 둡니다. 동시에 prompt caching, 비즈니스 결과 캐시, 도구 응답 캐시를 구분합니다.
  5. 5

    Step 5: 도구와 재시도 제한하기

    각 도구에 timeout, max retries, idempotency key, per-tool budget, fallback 을 설정합니다.
  6. 6

    Step 6: 비용 span 기록하기

    run/span 에 token, cached token, tool, retry, latency, estimated cost, budget remaining, traceId 를 기록합니다.
  7. 7

    Step 7: 강등과 차단 설정하기

    강등, 일시정지, circuit breaker, 알림 임계값을 설정하고 실제 실패 사례로 회귀 테스트합니다.

FAQ

Agent 비용은 사용자, 세션, 작업, 도구 중 어떤 단위로 집계해야 하나요?
user, tenant, workflow, task, tool, retry, cache 의 7 계층으로 집계합니다. 각 계층에는 독립적인 예산과 circuit breaker 가 필요합니다. total_cost 만 기록하면 청구 이상이 생겼을 때 어떤 사용자, 도구, 재시도 경로가 원인인지 알 수 없습니다.
모델 라우팅은 단순 작업을 작은 모델로 바꾸는 것만으로 충분한가요?
아닙니다. 모델 계층 라우팅뿐 아니라 Batch/Flex/실시간 같은 서비스 계층 라우팅과 위험도 분류도 필요합니다. 같은 모델도 latency priority 로 나눌 수 있습니다. 오프라인 작업은 Batch API, 낮은 우선순위 작업은 Flex Processing 에 맞습니다.
Prompt Caching 과 일반 비즈니스 캐시는 무엇이 다른가요?
Prompt Caching 은 system prompt, tool schema, policy 같은 안정적인 prompt prefix 를 캐시합니다. 비즈니스 결과가 아닙니다. 비즈니스 결과 캐시는 완전한 출력이나 도구 응답을 저장합니다. 목적이 다르므로 함께 사용할 수 있습니다.
도구 호출이 실패하면 몇 번 재시도해야 하나요?
고정 횟수만으로 정하지 않습니다. 실패 분류, 남은 예산, circuit breaker 상태를 봅니다. 복구 가능한 오류만 적은 횟수로 재시도하고, 403, 400, 없는 도구 같은 복구 불가능 오류는 재시도하지 않습니다.
긴 Agent 작업이 중간에 예산을 거의 다 쓰면 어떻게 해야 하나요?
우선 pause 하고 checkpoint 를 저장한 뒤, 예산 회복 또는 사람의 승인을 기다리는 것이 안정적입니다. 즉시 실패시키면 진행 상황을 잃고, 무작정 강등하면 품질이 떨어질 수 있습니다.
비용 로그에는 어떤 필드를 기록해야 하나요?
최소한 runId, tenantId, workflow, model, input/output/cached tokens, toolName, retryCount, latency, costEstimate, budgetRemaining, decision, traceId 를 기록합니다.

3분 읽기 · 게시일: 2026년 9월 17일

댓글

GitHub로 로그인하여 댓글을 남기세요

Easton BlogEaston Blog