코드 diff가 아니라 실험 그 자체 — 측정된 실패 하나를 겨냥해 변수 하나를 바꾸고, temp=0 A/B로 재고, promoted/rejected/inconclusive 판정을 남긴 루프.
수치는 모두 live DB의 experiments 원장(EXP-37~148)에서 그대로.
experiments.key_evidence JSONB 실값이다(기준 2026-06-24).
각 행은 그 실험의 A/B 쌍이라 셋·분모가 조금씩 다르다 — 그래서 “하나의 매끈한 곡선”이 아니라 쌍별 delta가 진실이다.
주력 라인(입력→프롬프트→도구)은 누적 개선, v6은 v1에서 갈라진 별도 가지(라우팅)이며 결론은 inconclusive다.두 축. ① L1 전체 pass@1(주력 라인) ② 첨부(has_attachment) 태스크 pass@1 — 도구 레버의 인과가 가장 깨끗한 지표.
* EXP-41은 v1 대비(L1 0.36→0.571) — v2의 경로주입 + v3의 템플릿수정이 함께 반영. † EXP-46 공유 15태스크 기준(0.533→0.600). ‡ EXP-42 전체 24태스크(0.52→0.577); v5의 진짜 효과는 아래 첨부 축에서 드러난다.
v6은 v5의 후속이 아니라 v1에 검증 게이트만 더한 가지. critic 경유율·검증부재실패는 분명히 고쳤지만 pass@1은 통계적으로 미미(§4 EXP-148).
모든 버전은 같은 6단계를 돈다. 이 루프가 experiments 테이블 한 행으로 응결된다.
temp=0 greedy, seed 고정. EXP-40 교훈: temp>0 측정은 노이즈로 소규모 효과를 가리거나 가짜 회귀를 만든다.verdict·key_evidence·lesson UPDATE. verdict=promoted인 team_after가 다음 베이스라인이 된다.실 GAIA L1 첫 실측(gaia_l1_real_20260610, n=25, pass@1=0.36, loop_rate=0.32). 이 4가지 실패가 v2~v5의 타깃이 됐다.
| 실패 모드 | 건수 | 근본 원인 | 겨냥한 버전 |
|---|---|---|---|
template_literal | 6 | 모델이 FINAL ANSWER: <answer> 예시를 그대로 출력 → 추출 실패 | v3 |
loop_exhaust | 5 | 형식 못 맞춰 max_messages까지 소진 | v3(부수효과) |
wrong_answer | 3 | 순수 오답(추론) | —(도구/추론 한계) |
empty_format | 2 | 한 단어 답에 형식 생략(예: Guava) | v4 |
전(全) 첨부 태스크 실패 — 별도 축: attachment_path_not_injected(경로 미주입 → 환각) + binary_file_unreadable(xlsx/png/mp3를 UTF-8로) + python_calc_misuse(산술 전용에 파싱코드) → v2(경로) · v5(멀티포맷·python_exec) | |||
각 카드는 원장 1행. 측정값은 key_evidence 실수치(before → after).
[첨부파일 경로: …] 한 줄 주입. 프롬프트·도구 불변.FINAL ANSWER: <answer> 플레이스홀더를 실제 예시값으로 교체하면 template_literal 실패(6건)가 제거돼 pass@1이 오른다.<answer> → 구체 예시(42, Paris, cat,dog,fish). v2의 경로주입은 유지.FINAL ANSWER: 형식을 강제하면 format_invalid가 줄고 pass@1이 오른다.FINAL ANSWER: 행 없으면 길이 무관 반려.Guava 케이스 ✗→✓
loop_exhaust 2→4 ↑
read_attached_file→xlsx/docx/pptx/pdf 파서(이미지·오디오는 안내문), python_calc→격리 python_exec. 형식 프롬프트 v4 계승, 경로주입 유지.attempts=3 반복.--retry-crashed 재개EVAL_MAX_MESSAGES=16 환경변수만 — 팀·프롬프트·도구 불변.7개 실험(+타 도메인 원장)에서 반복된, 데이터로 확정된 규칙성.
| 레버 종류 | 실험 | 결과 |
|---|---|---|
| 도구 / 입력 / 데이터 수정 | EXP-40(경로) · EXP-41(예시값) · EXP-42·43(파서/실행) | 전부 promoted — surgical, 회귀 적음 |
| 프롬프트 ‘추가’ / 구조 변경 | EXP-45(캡) · (타도메인) EXP-57·60·63 | 전부 rejected — 비단조적 부작용·정확도 붕괴 |
| 라우팅 게이트 | EXP-148(검증 경유) | inconclusive — 한 실패 고치자 병목이 이동 |
옵션·환경 상세는 런타임 해부 §L(명령어) / §M(테스트 가이드). 핵심은 같은 task 셋·temp=0·seed 고정.
# 공통 전제 — 깨끗한 A/B를 위한 .env 고정 EVAL_DEFAULT_TEMPERATURE=0 # greedy (소규모 효과를 노이즈가 가리지 않게) EVAL_DEFAULT_SEED=42 # EXP-40 v1 → v2 (첨부 경로주입) 같은 L1 셋으로 두 배치 python cli.py run --batch a_v1 --team v1-baseline --benchmark gaia --level 1 python cli.py run --batch a_v2 --team v2-attach-path --benchmark gaia --level 1 python cli.py compare --batches a_v1,a_v2 # EXP-41/46 프롬프트 라인 (v3, v4) python cli.py run --batch a_v3 --team v3-prompt-fix --level 1 python cli.py run --batch a_v4 --team v4-prompt-fix --level 1 # EXP-42 도구 교체 A/B (v4 대조 vs v5) — 첨부 태스크에서 갈림 python cli.py run --batch a_v4ctl --team v4-prompt-fix --level 1 python cli.py run --batch a_v5 --team v5-multitool --level 1 python cli.py compare --batches a_v4ctl,a_v5 # EXP-43 v5의 Level-2 일반화 (개입 없음, 셋만 교체) python cli.py run --batch a_v5_l2 --team v5-multitool --level 2 --exclude-web # EXP-44 pass@k 안정성 (쿼터 여유 시간대 단독 실행 권장) python cli.py run --batch a_v5_k3 --team v5-multitool --level 1 --attempts 3 # 429로 크래시 나면 쿼터 회복 후: --retry-crashed 로 재개 # EXP-148 v6 검증게이트 (v1 대조) python cli.py run --batch a_v1b --team v1-baseline --level 1 python cli.py run --batch a_v6 --team v6-verify-gate --level 1 python cli.py compare --batches a_v1b,a_v6 # 판정 기록 — 원장 한 행 (src/agent_eval/experiments.py) # record_start(title, hypothesis, intervention, team_before, team_after, batch_before, batch_after) # record_conclude(exp_id, verdict='promoted'|'rejected'|'inconclusive', key_evidence={...}, lesson='...')
--attempts k로 플래키를 걸러라(EXP-44·70). ③ 효율 개입은 정확도 가드와 함께 본다(EXP-45·60). ④ 메트릭이 가리키는 틈을 좇기 전에 그 메트릭이 맞는지부터(EXP-57).