
통과된 테스트는 학습된 것이 아니다: 인보이스 확인 루프를 위한 다섯 가지 증거
요약
AI 에이전트의 인보이스 검토 루프가 실제로 '학습'되었는지 검증하기 위한 다섯 가지 증거 체계를 제안합니다. 단순히 테스트를 통과하는 것을 넘어, 변경된 프롬프트나 스킬이 다음 실행 단계에서 실제로 로드되어 사용되었음을 증명하는 감사 가능한 기록의 중요성을 강조합니다.
핵심 포인트
- 테스트 통과와 실제 시스템 반영(학습)을 엄격히 구분해야 함
- 인보이스 검토 루프를 하나의 감사 가능한 작업으로 기록할 것
- 입력, 출력, 평가자 버전, 점수를 포함한 최소 증거 확보 필요
- 타임스탬프나 커밋만으로 누락된 평가 데이터를 재구성해서는 안 됨
- 변경사항이 다음 스타트업에 의해 실제로 소비되었는지 확인하는 것이 핵심
통과된 테스트는 학습된 것이 아니다: 인보이스 확인 루프를 위한 다섯 가지 증거
수락된 해시(hash)를 다음 스타트업(startup)이 소비하기 전까지는 그린 테스트(green test)가 학습된 것이 아니다
다음 스타트업이 수락된 버전을 로드하고 결합된 작업 결과(joined task result)를 생성할 때까지 인보이스 검토 루프(invoice-review loop)를 학습된 것으로 표시하지 마십시오. 반복되는 작업의 경우, 다음 세 가지 수준을 분리하십시오:
인보이스 검토를 운영하는 경우, 마지막 Sources 블록에 링크된 Anicca의 증거 기록 체크리스트를 사용하여 다음 실행을 하나의 감사 가능한 작업(auditable action)으로 기록하십시오. URL은 그대로 유지하여 CTA(Call to Action)가 사실 인용과 혼동되지 않도록 합니다.
| 수준 | 발생한 일 | 최소 증거 |
|---|---|---|
| 원샷 테스트 (One-shot test) | 하나의 입력이 실행되고 점수가 매겨짐 | 입력(input), 출력(output), 평가자 버전(evaluator version), 점수(score) |
| ... |
이 글에서 저는 "학습됨(learned)"이라는 용어를 마지막 수준에 대해서만 사용합니다. 이는 모델 가중치(model weights)가 변경되었음을 의미하지 않습니다. 이는 수락된 프롬프트(prompt) 또는 스킬(skill) 버전이 변경되었고, 다음 스타트업이 실제로 이를 로드했음을 의미합니다.
먼저, 실제 인보이스 관찰자(invoice-observer) 실행 사례를 읽어보십시오
공개된 프로덕션 증거 기록에는 실제 uGig 인보이스 관찰자 실행 기록이 포함되어 있습니다. 해당 기록의 최신 stdout은 다음과 같습니다:
{"observed_at":"2026-07-28T09:55:05.299Z","deliveries_seen":4,"pending":4,"invoiced":0,"invoice_created":0,"paid":0,"revenue_recorded":0,"revenue_duplicates":0,"rejected":0,"invoices":[]}
이는 관찰자가 4개의 배송(deliveries)을 확인했으며, 4개 모두 pending 상태로 남아 있었고, 생성된 인보이스는 0개, 확인된 결제 완료 인보이스는 0개, 기록된 매출은 0개임을 증명합니다. 이는 결과가 없는 상태를 포함한 실제 결과입니다. invoice_created=0을 발행된 인보이스라고 설명하는 것은 부정직한 일일 것입니다.
동일한 증거 기록은 다음과 같은 코드 식별자(code identities)를 제공합니다:
| 기록 (Record) | 관찰된 값 (Observed value) |
|---|---|
| delivery commit | a0424042815523f438f85c333938af691a9741f8 |
| ... |
공개된 관찰자 로그 (public observer log)는 별도의 run_id, score_before, score_after 또는 startup_hash를 노출하지 않습니다. 로그의 observed_at 타임스탬프는 유용한 식별자이지만, 평가 점수 (evaluation score)나 스타트업 해시 (startup hash)를 대체할 수는 없습니다. 타임스탬프나 커밋 (commit)으로부터 누락된 필드를 재구성하지 마십시오.
그 경계가 바로 테스트된 관찰자 (tested observer)와 폐쇄형 개선 루프 (closed improvement loop) 사이의 차이입니다. 우리는 인보이스 상태가 변경되지 않았음을 관찰할 수 있습니다. 하지만 이 로그만으로는 게이트 업데이트 (gated update)가 다음 스타트업 (startup)에 의해 소비되었음을 증명할 수 없습니다.
다섯 가지 영수증을 연결하는 방법
1. 작업과 버전을 명명하십시오
run_id, task_id, 입력 해시 (input hash), 그리고 스타트업에 로드된 버전 해시 (startup-loaded version hash)를 고정하십시오. improved와 같은 파일 이름은 덮어쓰여질 수 있지만, 해시 (hash)는 평가된 버전을 식별 가능한 상태로 유지해 줍니다.
2. 평가자 (evaluator)를 고정하고 분할 (split)하십시오
평가자 버전 (evaluator version)과, 수정을 고안하는 데 사용된 분할 (split) 및 이를 수락하는 데 사용된 홀드아웃 (held-out) 또는 선택 분할 (selection split)을 기록하십시오. 후보 (candidate)를 확인한 후에 평가자를 선택하는 것은 비교를 재현 불가능하게 만듭니다.
3. 이전(before), 후보(candidate), 이후(after)를 보존하십시오
수락된 후보와 거절된 후보를 모두 유지하십시오. 최소한 다음과 같은 추가 전용 (append-only) 행 하나를 작성해야 합니다:
run_id | task_id | evaluator_version | selection_split | base_hash | candidate_hash | score_before | score_after | decision
score_after가 더 높다는 것만으로는 설명이 되지 않습니다. 해당 행은 베이스 버전 (base version), 후보 (candidate), 평가자 (evaluator), 분할 (split), 그리고 결정 (decision)을 식별할 수 있어야 합니다.
4. 게이트 (gate)가 결정하게 하십시오
Microsoft SkillOpt는 이 루프를 롤아웃 (rollout), 성찰 (reflect), 집계 (aggregate), 선택 (select), 업데이트 (update), 그리고 게이트 (gate)로 설명합니다. 공식 가이드에 따르면, 게이트가 활성화된 경우 후보는 선택 분할 (selection split)에서의 설정된 점수가 현재 버전보다 엄격히 높을 때만 수락됩니다. 게이트가 비활성화된 경우, 후보는 강제로 수락됩니다. 이것이 바로 안전 경계 (safety boundary)입니다.
5. 다음 스타트업이 해시를 소비했는지 확인하십시오
승격된 해시(promoted hash)를 다음 프로세스가 로드한 값과 비교하십시오:
accepted_hash == startup_hash
그런 다음 다음 결과(next result)를 다음 run_id 아래의 동일한 task_id에 결합합니다. 오직 이 단계가 완료되어야 루프가 닫힙니다. 이 리포지토리(repository)의 학습 컨트롤러(learning controller)는 before_hash, candidate_hash, after_hash 및 승격 상태(promotion state)를 유지하며, 스타트업 컨슈머(startup consumer)는 활성 버전의 해시를 확인합니다. 이것이 바로 인보이스 옵저버(invoice observer)가 노출해야 할 계약(contract)입니다. 이는 옵저버 로그에 이미 해당 필드들이 포함되어 있었다는 소급적 주장(retroactive claim)이 아닙니다.
컨트롤러의 구체적인 거부 확인(rejection check) 로직은 다음과 같습니다:
if consumed_hash != learning.get("after_hash"):
raise ValueError("consumed weight hash differs from promoted hash")
SkillOpt의 +24.8점은 무엇을 의미하는가?
공식 README에 따르면, GPT-5.5가 Codex 에이전틱 루프(agentic loop) 내에서 실행될 때 기술이 없는(no-skill) 정확도 대비 평균 +24.8점의 향상이 보고되었습니다. 이 비교는 6개의 벤치마크(benchmarks), 7개의 타겟 모델(target models), 그리고 3개의 실행 하네스(execution harnesses)를 아우릅니다. README는 SkillOpt가 평가된 52개 셀(cells) 모두에서 최고 성능을 기록했거나 공동 최고 성능을 기록했다고 명시합니다.
6개의 연구용 벤치마크는 DocVQA (문서 QA), ALFWorld (Embodied AI), OfficeQA (기업용 QA), SearchQA (Open-domain QA), LiveMathematicianBench (수학적 추론), 그리고 SpreadsheetBench (스프레드시트 편집)입니다.
이것이 제가 확인한 공식 README와 문서에 명시된 헤드라인 주장의 한계입니다. 문서들은 헤드라인에 언급된 셀별 샘플 크기(per-cell sample size), 실제 운영 환경의 인보이스 작업 결과(production invoice-task result), 또는 평가자 분산(evaluator variance)을 제공하지 않습니다. 따라서 이 수치는 단일 운영 작업에서의 개선을 예측하는 수치가 아닙니다.
+24.8에 대한 질문 | 공식 출처가 확립한 내용 |
|---|---|
| 작업 및 베이스라인 (baseline) | 6개의 벤치마크 (benchmarks) 및 기술 없음 정확도 (no-skill accuracy) 대비 평균 상승폭 |
| ... |
표를 증거 경계 (evidence boundary)로 사용하십시오: 헤드라인은 명시된 벤치마크/모델/하네스 (harness) 범위에 대한 평균 기술 없음 정확도 비교를 뒷받침하지만, 셀 수준의 샘플 크기 (sample size), 평가자 (evaluator), 분산 (variance), 그리고 인보이스 작업 결과는 검토된 자료에 게시되지 않았습니다. +24.8을 실제 운영 개선율 (production improvement rate)로 변환하지 마십시오.
감사를 위한 직접적인 답변: 작업 (tasks) = DocVQA, ALFWorld, OfficeQA, SearchQA, LiveMathematicianBench, SpreadsheetBench; 베이스라인 (baseline) = 기술 없음 정확도 (no-skill accuracy); 조건 (condition) = Codex 에이전트 루프 (agentic loop) 내부의 GPT-5.5; +24.8 셀당 샘플 크기 = 미게시; 평가자 = 미게시; 분산 = 미게시; 인보이스 작업을 위한 홀드아웃 (held-out) 또는 실제 작업 결과 = 미게시. 확인된 증거는 집계된 벤치마크 비교 및 명시된 범위만을 지원합니다.
SkillOpt-Sleep은 별도의 실험을 게시합니다: 매일 밤 10개의 새로운 실제 작업으로 5일간 진행, GPT-5.5를 최적화 도구 (optimizer)로 사용, 시드 (seed) 42. 해당 별도 연구에서 SearchQA는 SQuAD 완전 일치 (exact match)를 사용하는 1,400개 항목의 홀드아웃 세트를 사용하며, SpreadsheetBench는 280개의 홀드아웃 항목을 사용하고 생성된 openpyxl 코드를 실행한 후 골든 파일 (golden file)과 워크북을 셀 단위로 비교합니다. 천장(ceiling)에 근접한 지점에서, 해당 페이지는 약 ±1–2 포인트의 단일 시드 분산 (single-seed variance)을 보고하며 약 1.5 포인트 미만의 차이는 노이즈 (noise)로 취급할 것을 권장합니다. 이것들은 유용한 공개 조건들이지, +24.8 헤드라인에 누락된 메타데이터가 아닙니다.
가장 작은 감사와 올바른 작업
이 감사를 위해, 하나의 추가 전용 (append-only) 행으로 시작합니다:
run_id | task_id | input_hash | evaluator_version | selection_split | base_hash | candidate_hash | score_before | score_after | decision | startup_hash | next_result
수정 사항을 만들어내는 데 사용된 데이터는 이를 승인하는 데 사용되는 홀드아웃 데이터 (held-out data)와 분리되어야 합니다. 그렇지 않으면 후보 (candidate)가 자신에게 영감을 준 예시들에 과적합 (overfit)될 수 있거나, 결과가 알려진 후에 평가자 (evaluator)가 조정될 수 있습니다. 고정된 정답의 경우, 완전 일치 (exact match)와 같은 엄격한 지표를 동결하십시오. 부분적인 정답의 경우, 수정 전에 항목별 루브릭 (rubric)을 동결하고 선택/홀드아웃 분할 (selection/held-out split)을 저장하십시오. 판단이 주관적인 경우에는 루브릭과 평가자의 버전을 관리하고, 아주 미세한 점수 차이만으로는 변경을 수용하지 마십시오.
이 루프 (loop)는 작업이 반복되고, 정확성 또는 점수 규칙을 안정적으로 유지할 수 있으며, 실질적인 개선 여지 (headroom)가 있을 때 도입할 가치가 있습니다. 인보이스 검토 (invoice review)의 경우, 기술 (skill)을 변경하기 전에 금액, 날짜, 중복 탐지에 대한 규칙을 동결하십시오. 만약 정답이 매번 바뀌거나 점수가 주로 평가자의 선호도 문제라면, 먼저 베이스라인 (baseline)을 구축하고, 루브릭의 버전을 관리하며, 평가자 간 일치도 (evaluator agreement)를 측정하십시오. 아직 자동 업데이트를 활성화하지 마십시오.
기록은 또한 구체적인 진단 지도 (diagnosis map)를 제공합니다: 점수/평가자가 누락되었다면 점수 산출 경로 (scoring path)를 점검하십시오; 베이스/후보 해시 (base/candidate hashes)가 누락되었다면 업데이트 도구 (updater)와 아티팩트 영속성 (artifact persistence)을 점검하십시오; 결정 (decision)이 누락되었다면 게이트 (gate)를 점검하십시오; 오래된 스타트업 해시 (startup hash)는 분포 (distribution)를 점검하십시오; 홀드아웃 점수는 상승했으나 반복되는 작업의 성과가 나빠졌다면 과적합 (overfitting) 또는 작업 분포 드리프트 (task-distribution drift)를 점검하십시오.
홀드아웃 점수는 상승했지만 다음 실제 작업의 성과가 떨어지거나 알 수 없는 경우, 후보를 승격시키지 마십시오. 이전 활성 버전을 유지하고, 실패하거나 알 수 없는 카나리 (canary)는 before_hash로의 되돌리기 (revert)로 취급하며, 그 이유를 동일한 실행 (run)에 저장하십시오. 측정된 향상 (lift)이 실험의 노이즈 (noise)를 초과하고 반복되는 작업에서도 나타날 때만 계속 진행하십시오. 그런 다음 이를 측정된 비용 (cost)과 비교하십시오.
비용: 측정된 것만 기록하십시오
SkillOpt-Sleep README에는 보수적인 배포 기본값(shipping defaults)이 나열되어 있습니다: dream_rollouts=1, recall_k=0, 그리고 dream_factor=0입니다. 공식 실험 소스에서는 백엔드의 tokens_used 필드를 반환하지만, 이는 토큰 회계 (token accounting)일 뿐 인보이스 가격이 아닙니다.
직접 비용 답변: 사이클당 엔지니어링 노력 (engineering effort per cycle) = 미발표; 사이클당 컴퓨팅 비용 (compute dollars per cycle) = 미발표; 사이클당 실제 경과 시간 (wall-clock latency per cycle) = 미발표; 사이클당 스토리지 증가량 (storage growth per cycle) = 미발표. 문서화된 유일한 수치적 연결 고리는 백엔드의 tokens_used이며, 이는 가격, 지연 시간(latency), 또는 스토리지 측정이 아닌 토큰 회계 (token accounting)일 뿐입니다. 작업이 반복되고, 정확성을 확인할 수 있으며, 홀드아웃(held-out) 성능 향상이 측정된 노이즈를 초과하고, 반복되는 실제 업무에서 퇴보가 나타나지 않을 때만 도입을 정당화하십시오.
cycle_id | task_count | provider/model | input/output tokens | wall_ms | storage_bytes_before/after | decision | held_out_delta
이야기를 수정하지 말고, 누락된 영수증을 수리하십시오
| 누락된 증거 | 가장 먼저 점검해야 할 곳 |
|---|---|
| 점수 또는 평가자 버전 (score or evaluator version) | 평가자 호출 및 분할 동결 (evaluator call and split freeze) |
| ... |
인보이스 검토 (invoice review) 업무를 수행한다면, 실행 ID (run ID), 입력 해시 (input hash), 평가자 및 분할 (evaluator and split), 전/후 점수, 결정 (decision), 그리고 다음 시작 해시 (next startup hash)를 동일한 레코드에 수집하십시오. 이것이 단순히 통과된 테스트와 다음 실행까지 도달한 실제 개선을 구분하는 실질적인 방법입니다.
출처
출처
-
uGig invoice observer production evidence: https://github.com/Daisuke134/life-manager/blob/main/docs/evidence/agent-economy/2026-07-28-ugig-invoice-observer-live.md
-
Hash-bound learning controller: https://github.com/Daisuke134/profitable-claude/blob/main/marketing/engine/learning/controller.py
-
Startup strategy consumer: https://github.com/Daisuke134/profitable-claude/blob/main/skills/article-writer/scripts/strategy_runtime.py
-
Microsoft SkillOpt README: https://github.com/microsoft/SkillOpt/blob/main/README.md
-
Microsoft SkillOpt documentation index: https://github.com/microsoft/SkillOpt/blob/main/docs/index.md
-
SkillOpt training loop: https://github.com/microsoft/SkillOpt/blob/main/docs/guide/training-loop.md
-
SkillOpt-Sleep README: https://github.com/microsoft/SkillOpt/blob/main/docs/sleep/README.md
-
SkillOpt-Sleep results: https://github.com/microsoft/SkillOpt/blob/main/docs/sleep/RESULTS.md
-
SkillOpt-Sleep experiment source (
tokens_used): https://raw.githubusercontent.com/microsoft/SkillOpt/main/skillopt_sleep/experiments/run_experiment.py -
Invoice 검토 증거 기록 체크리스트: [https://aniccaai.com/?product_id=anicca&run_id=20260729-173948&artifact_id=article-en&variant_id=check-five-receipts-en&click_id=20260729-173948-article-en]
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기