예산 관리도 답의 일부: 무료 티어에서 평가 에이전트 실행하기 부트캠프 실습
요약
본 실습은 에이전트 개발 시 단순히 기능 작동 여부만 평가하는 것이 아니라, 주어진 예산과 비용 제약 내에서 효율성을 측정하는 방법을 제시합니다. 무료 티어의 할당량을 '제약 조건'으로 활용하여, 모델 호출 및 도구 사용에 대한 모든 과정을 원장(ledger) 형식으로 기록하고 관리하는 규율을 강조합니다.
핵심 포인트
- 에이전트 개발은 기능 작동 여부보다 예산 내 효율성이 중요함.
- 무료 할당량은 무한한 샌드박스가 아닌, 중요한 제약 조건임.
- 모든 모델/도구 호출은 JSON 라인으로 기록하여 비용을 추적해야 함.
- 재시도는 명확한 이유(reason)를 부여하고 관리하는 것이 중요함.
예산 관리도 답의 일부: 무료 티어에서 평가 에이전트 실행하기 부트캠프 실습
에이전트 실행이 테스트가 녹색으로 변했을 때 끝난 것이 아닙니다. 주어진 예산 내에서 테스트가 녹색으로 변했을 때 끝나는 것입니다. 이것이 바로 이 실습의 전부입니다.
제가 지켜본 대부분의 학생들은 무료 티어를 무한한 샌드박스로 취급합니다. 그렇지 않습니다. 무료 할당량은 공짜로 얻는 제약 조건이며, 이는 신용카드보다 훨씬 나은 교육 도구가 됩니다.
그래서 여기 과제가 있습니다: 하나의 프롬프트, 하나의 무료 모델 접근 등급, 하나의 무료 서버 박스, 그리고 조정해야 하는 원장(ledger)이 필요합니다. 점수는 '작동했는가'가 아닙니다. 점수는 '무엇에 얼마의 비용이 들었는지 증명할 수 있고, 그 비용이 어디로 갔는지 보여줄 수 있는가'입니다.
이 실습이 존재하는 이유 (그리고 이것이 아닌 것)
최근 학생들의 에이전트 프로젝트 형태를 바꾼 세 가지 요소가 있습니다. 모델 출력 비용이 더 저렴하고 상세해졌고; 실행 시간이 길어졌으며; 재시도 루프(retry loop)가 기본 디버깅 전략이 되었습니다. 마지막 것이 예산을 소진시키는 곳입니다.
이 실습은 벤치마크가 아닙니다. 제공업체 간의 비교도 아닙니다. 이것은 이 실습이 가정하는 무료 티어를 포함하여 어떤 무료 티어에서도 실행할 수 있는 계량(metering) 규율입니다.
그 가정이란: MonkeyCode가 무료 모델 접근과 무료 서버 옵션을 제공하며, 이것이 아예 돈이 들지 않는 실습을 가능하게 하는 것입니다. 공개합니다: 이 글은 MonkeyCode의 제품 홍보의 일환으로 작성되었습니다. 여기서 할당량 숫자를 다시 언급하지 않겠습니다. 할당량 조건은 변하기 때문에, 오래된 숫자는 끔찍한 채점 기준이 됩니다. 진실의 원천은 프로젝트 자체의 현재 약관 페이지이며, 모든 학생들은 실습 시작 시 이를 예산 계약서로 스크린샷을 찍습니다.
설정: 다섯 단계, 이십 분
- 약관 페이지를 스크린샷하세요. 파일명은
budget_contract.png로 지정합니다. 이것이 전체 실습의 상한선입니다. - 판단 기준(oracle)이 명확한 작업을 하나 선택하세요. 로그 형식 파싱, 페지네이터에서 오프-바이-원(off-by-one) 오류 수정, 실패하는 엣지 케이스 추가 등 테스트가 '예' 또는 '아니오'로 판별할 수 있는 무언가를 고르세요.
- 로그가 존재하기 전까지는 작업을 건드리지 마세요. 로그가 없으면 실행도 없습니다. 이 규칙이 어떤 프롬프트 트릭보다 시간을 많이 절약해 줍니다.
- 모든 호출을 하나의 JSON 라인으로 기록하세요. 모델 호출마다, 도구 호출마다 각각 한 줄씩 기록하며, 절대 배치(batched)로 처리하지 마세요.
- 다른 무엇보다 먼저 로그를 내보내세요. 무료 서버는 재활용됩니다. 박스에만 존재했던 로그는 당신이 가지지 못하는 로그입니다.
이벤트 스키마는 의도적으로 작습니다:
{"step":"fix_offbyone","attempt":1,"kind":"model_call","prompt_tokens":812,"completion_tokens":204,"reason":"initial"}
{"step":"fix_offbyone","attempt":2,"kind":"model_call","prompt_tokens":1490,"completion_tokens":331,"reason":"test_1_failed"}
{"step":"fix_offbyone","attempt":2,"kind":"tool_call","prompt_tokens":0,"completion_tokens":0,"reason":"pytest"}
reason 필드에 주목하세요. 이유 없이 재시도하는 것은 실습 규칙상 '레이블이 없는 재시도(unlabeled retry)'이며, 레이블이 없는 재시도는 평가 기준에서 두 배의 비용을 차지합니다. 아래에서 그 이유를 알게 될 것입니다.
아티팩트: 실행 가능한 원장(ledger)
이 스크립트는 로그를 시도별 원장으로 줄여서 '재시도 오버헤드 비율'을 출력합니다. 이것은 지루한 코드인데, 왜냐하면 지루한 코드가 새벽 2시에 신뢰할 수 있는 것이기 때문입니다.
# ledger.py -- JSONL 실행 로그를 시도별 예산 원장으로 줄임.
# 사용법: python ledger.py run.jsonl > ledger.csv
import csv, json, sys
...
이것을 실행하고 두 행을 원본 로그와 대조하여 확인해 보세요. 만약 unparsed_events가 0보다 크다면, 그것은 모델 버그가 아니라 로깅 버그입니다. 이 구별만으로도 전체 실습의 가치가 있습니다.
무료 서버는 체크포인트 질문을 바꾼다
자신이 소유한 박스에서는 작업 디렉토리가 영구적(durable)입니다. 하지만 무료 서버에서는 그렇지 않다고 가정하세요. 그래서 이 실습은 하나의 습관을 강제합니다:
탭을 닫기 전에, 무엇이든 다시 시도하기 전에:
tar czf ledger_$(date +%s).tgz run.jsonl ledger.csv budget_contract.png<br>sha256sum ledger_*.tgz >> ledger_hashes.txt<br><br>두 개의 파일이 상자에서 나옵니다: 아카이브와 그 해시입니다. 해시는 검증할 수 없는 점수는 소문자이기 때문에 중요합니다. 만약 박스가 실행 도중에 죽더라도, 무엇이 지출되었는지에 대한 증거는 여전히 가지고 있습니다.
평가 기준 (Rubric): 100점
| 가중치 | 기준 | 만점을 얻는 방법 |
|---|---|---|
| 25 | 태스크 오라클 (Task oracle) | 이전에 실패하고 나중에 통과하며, 학급 친구가 재현할 수 있는 테스트 |
| ... | ||
| '빨리 느껴졌다'는 점수는 존재하지 않습니다. 예쁜 데모도 점수가 없습니다. 테스트를 통과하지만 예산 점수를 떨어뜨리는 실행이, 테스트에 실패하고 초과 지출을 정직하게 보고하는 실행보다 더 좋은 점수를 받는 것이 아니라 — 이것이 실험의 요점입니다. |
학생 코호트가 매번 겪는 실패 모드 (Failure modes students hit every cohort)
- 재시도 기억 상실 (Retry amnesia). 수정 사항이 시도 4에 적용되었지만, 시도 4만 기록됩니다. 총 비용은 이제 한 번의 호출로 읽힙니다. 이것은 장부가 거짓말하는 가장 흔한 방법입니다.
- 이유 인플레이션 (Reason inflation). 모든 줄에 `reason:
ledger.py에--fail-over플래그를 추가하여total_tokens이 지정한 값을 초과할 경우 0이 아닌 값으로 종료되게 하세요. 이 기능을 실행 스크립트에 연결하세요.retry_overhead을 실패 클래스(test_failed,timeout,tool_error)별로 분리하여 어떤 클래스가 실제로 할당량을 소모하는지 확인해 보세요.- 동일한 작업을 두 번 작성하되, 한 번은 시도 횟수(attempt)가 2에서 중단되고 다른 한 번은 예산 상한선(budget cap)에서 중단되도록 하고, 어떤 것이 학급 친구에게 더 유용하다고 여겨지는지 비교해 보세요.
- 레저에 대한 두 번째 독립적인 검사 —
jq를 사용한 셸 원라인어(shell one-liner)로 동일한 필드를 합산하는 것을 추가하세요. 동의하는 두 개의 카운터가 신뢰할 수 있는 하나의 카운터보다 낫습니다.
이 실습이 알려줄 수 없는 것, 그리고 누가 건너뛰어야 하는지
이 실습은 지연 시간(latency), 처리량 상한선(throughput ceilings), 또는 모델이 특정 도메인에 적합한지에 대해서는 아무것도 말해주지 않습니다. 이것은 단 한 가지를 측정합니다: 실행이 무엇을 소비했는지 계산할 수 있는지 여부입니다. 또한, 다음 경우라면 시도하지 마세요:
- 작업 부하(workload)가 자체 네트워크를 벗어날 수 없는 경우, 외부 무료 티어는 불가능합니다;
- 예산 제약이 실제로 적용되지 않는 전용 유료 용량(committed paid capacity)을 사용하는 경우;
- 또는 채점기(grader)가 로그를 전혀 확인하지 않는 경우, 이 경우 계측(metering)은 보여주기식이며 대신 오라클(oracle)에 시간을 투자해야 합니다.
보고서의 수치는 당신의 것이지, 저의 것이 아닙니다. 자신이 직접 JSONL에서 계산하지 않은 총합을 인용하지 마세요 — 그리고 실행하는 날짜마다 무료 티어의 현재 약관을 다시 확인하세요. 왜냐하면 할당량은 변하며 스크린샷이 유일한 예산 계약서이기 때문입니다.
만약 이 실습을 진행한다면, 유용한 보고서는 테스트를 통과했다는 사실 자체가 아닙니다. 재시도(retries)가 모델이 아니라 비용이 많이 드는 부분이었다는 것을 깨달은 레저 라인입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기