평가연구소
Myrm의 Eval Lab은 에이전트에 대한 테스트 사례를 실행하고, 다양한 에이전트 프로필의 성능을 비교하고, 시간 경과에 따른 품질을 추적할 수 있는 내장 평가 대시보드입니다. 이 모든 작업이 WebUI에서 이루어집니다.주요 기능
- 단일 프로필 평가 — 현재 에이전트 구성에 대해 테스트 모음을 실행하고 통과/실패 결과를 실시간으로 확인하세요.
- 교차 프로필 매트릭스 평가 — 모델이나 프롬프트를 전환하기 전에 여러 에이전트 프로필에 걸쳐 동일한 테스트 사례를 실행하여 회귀를 감지합니다.
- 환경 재현성 — 모든 평가 실행은 고정된
EvalManifest스냅샷(모델, 도구, 프로필, 벤치마크 모드)을 캡처하므로 결과는 항상 재현 가능합니다. - 벤치마크 모드 — 핵심 도구만 사용하여 공정한 기준 점수를 생성하기 위해 사용자 사용자 정의(기술, MCPs, 메모리, 웹 검색)를 제거하는 원클릭 토글입니다.
- 과거 추세 추적 — 대화형 차트를 통해 시간 경과에 따른 합격률 추세를 확인하세요. 기록 테이블에는 프로필, 모델, 합격률, 평균 시간 및 실행당 토큰 사용량이 표시됩니다.
- 클릭하여 세부정보 보고서 — 사례별 결과, 환경 스냅샷 및 차이점 보기가 포함된 전체 보고서를 로드하려면 기록 실행을 클릭하세요.
시작하기
- 사이드바에서 Eval Lab으로 이동합니다(또는
/eval-lab으로 이동). - 구성 탭에서 데이터세트를 선택하고 선택적으로 벤치마크 모드를 활성화합니다.
- 실행을 클릭하여 평가를 시작합니다. 진행 상황은 실시간으로 업데이트됩니다.
- 보고서 탭에서 요약 카드, 사례별 테이블, 환경 스냅샷 등 결과를 봅니다.
- 기록 탭으로 전환하여 여러 실행을 비교합니다.
WorkBuddy Bench 벤치마크
Eval Lab에는 WorkBuddy Bench(Tencent의 멀티 도메인 코딩 에이전트 벤치마크)용 내장 어댑터가 포함되어 있으며, 공식 4개 트랙을 논문 정렬 점수 방식으로 지원합니다.하위 집합 다운로드
- Eval Lab을 열고 WorkBuddy Bench 탭으로 전환합니다.
- 각 트랙은 작업 수, 대략 크기, 로컬 상태(
미다운로드/다운로드됨)를 표시합니다. - 다운로드를 클릭하면 Hugging Face에서 아카이브를 백그라운드로 가져옵니다. 진행률은 SSE를 통해 스트리밍되고, 다운로드 중에는 버튼이 비활성화됩니다.
- 아카이브는 공식 SHA-256 체크섬으로 검증되고 원자적으로 설치됩니다 — 손상되거나 부분적인 아카이브는 절대 사용되지 않습니다.
- 언제든지 새로고침으로 로컬 디스크 상태를 다시 읽습니다. 방금 완료된 다운로드는 즉시 버튼을
다운로드됨으로 전환합니다.
벤치마크 실행
- 다운로드된 트랙에서 실행을 클릭하여 해당 하위 집합의 모든 작업을 평가합니다.
- 평가 중에 중지 컨트롤이 제공됩니다 — 실행 중과 다운로드 중 모두 중단할 수 있습니다.
- 완료되면 재현 가능한 보고서를 생성합니다(매니페스트에 모델, 도구, 프로필, 점수 모드 기록).
tests/scoring.py로 채점됩니다(LLM 판정 없음). Code/Web/Office는 합성 검증기(CompositeVerifier)를 사용합니다 — WBBench 논문의 수용 계층과 일치합니다.
:::
국제 권위 벤치마크(BrowseComp)
WorkBuddy Bench 외에도 Eval Lab은 BrowseComp를 통합합니다 — OpenAI 공식 벤치마크로, 다중 홉 증거 검색과 웹 브라우징이 필요한 1,266개의 실제 연구 질문으로 구성됩니다. 여기서 나온 점수는 최고 AI 연구소가 인용하는 작업 형식과 동일하므로 릴리스나 제안에서 인용할 수 있는 권위 있는 성적입니다.- 샘플 먼저 실행 — 대형 벤치마크는 작은 샘플을 자동 제안합니다(예: 1,266문제 중 20문제). 전체 실행 전에 토큰 비용의 일부로 전체 파이프라인을 검증할 수 있습니다. 샘플을 비우면 전체 세트를 실행합니다. 보고서는 실제로 샘플링한 실행만
sampled배지로 정직하게 표시합니다. - 공정한 기준선 — 벤치마크 모드는 스킬/MCP/메모리를 제거하여 점수가 ‘모델 + 핵심 도구’만 반영하게 합니다.
- 사전 점검 — 실행 전에 벤치마크가 필요로 하는 검색/임베딩 서비스가 구성되고 도달 가능한지 확인하여 토큰을 낭비하지 않습니다.
결정적 채점: 계층형 수용(CompositeVerifier)
모든 작업의 채점은 작업 자체 테스트 스위트가 주도합니다 — 통과/실패 경로에 블랙박스 LLM 판정이 없습니다. 합성 검증기는 다운로드된 트랙 내부에 포함된tests/ 코드를 깨끗한 시드 워크스페이스에서 실행하고 결과를 실제 턴별 점수로 변환합니다.
- 작업 자체 테스트 실행 —
test_suite어설션이 에이전트의 워크스페이스 산출물에 대해 작업에 번들된 테스트를 실행합니다. 결과는 JUnit XML 또는 일반 reward 스크립트 종료 코드에서 파싱됩니다. - 턴별
pass_rate— 다중 턴 대화는 각 턴을 개별적으로 채점합니다. 1턴에 통과했지만 나중에 퇴화하는 작업은 조기에 발견되어 토큰을 낭비하지 않습니다(구성 가능한on_turn_fail전략). - 숨겨진 LLM 판정 없음 — 파싱은 완전히 결정적입니다. 통과/실패는 모델이 출력을 읽는 것이 아니라 테스트 러너에서 나옵니다. 점수는 재현 가능하고 judge-prompt 드리프트에 면역입니다.
- 이진 판정이 아닌 부분 점수 —
skipped테스트는 분모에서 제외되어 수집 불가능한 flaky 테스트가 실제 통과를 깎지 못하게 합니다. reward 스크립트 출력은 점진 점수로 매핑됩니다. - 테스트 수준 가시성 — 각 트랙 카드는 실행 통과율과 테스트 통과율(턴 전체
avg_pass_rate평균)을 모두 표시하고, 모든 보고서는 집계된 테스트 수준 평균을 포함합니다.
test_suite 타임아웃은 기본 600초이며 케이스별로 구성 가능하므로, 오래 걸리는 작업 테스트(예: 컴파일 + 실행)가 조기 종료되지 않고 완료됩니다.
판정 모델 구성
Semantic(LLM-as-a-judge) 어설션은 특정 벤더 판정 모델을 하드코딩하지 않습니다. 판정 모델은 사용자 구성에서 해석됩니다 — 실행 시 명시적 재정의, 어설션 수준 필드, 기본 모델 구성 순으로 — 이미 사용 중인 어떤 모델 공급자로도 채점할 수 있습니다. 모든 보고서는 실제 채점한 판정 모델(judge_model)을 기록하며, 작업 네이티브 벤치마크는 LLM 판정이 없다는 의미로 none을 정직하게 표시합니다.
채점 진단: 실패가 조용히 지나가지 않습니다
채점 실행이 테스트 출력을 만들기 전에 실패할 수 있습니다 — 채점 명령이 샌드박스 보안 정책에 차단되거나, 타임아웃되거나, 크래시할 수 있습니다. 이러한 실패는 이제 정확히 귀인되어 실제 증거와 함께 표면화됩니다:- 실패 귀인 — 실행 수준 실패(보안 차단, 타임아웃, 크래시)가 실제 원인으로 보고되며, 더 이상 “reward 파일을 읽을 수 없음”으로 잘못 보고되지 않습니다. 채점이 왜 실패했는지 즉시 알 수 있습니다: 정책 차단, 타임아웃, 또는 명령 자체 오류.
- stdout 끝부분 표시 — 모든 “명령 실패”, “reward 파일을 읽을 수 없음”, “JUnit 파일을 읽을 수 없음” 메시지에 채점 명령의 실제 stdout 최대 800자를 첨부하여, 추측 대신 실제로 무슨 일이 있었는지 확인할 수 있습니다.
- 카운트 기반 reward 폴백 — 전체
score.json/reward.json스키마 대신tests_passed/tests_total카운터(또는tests[]배열)만 담은 reward 페이로드를 올바르게 파싱하여 채점하며, 읽을 수 없음으로 거부하지 않습니다. 이는 공식 WBBench 러너의 카운팅 의미를 미러링하면서 가벼운 채점 스크립트와도 호환됩니다.
교차 프로파일 매트릭스 평가
서로 다른 에이전트 구성이 동일한 작업을 처리하는 방식을 비교하려면 다음을 수행하세요.- 구성 탭의 칩 기반 다중 선택기에서 2개 이상의 프로필을 선택합니다.
- 2개 이상의 프로필을 선택하면 매트릭스 모드 배지가 자동으로 나타납니다.
- 실행 매트릭스를 클릭하여 시작합니다. 대시보드는 실시간 진행 상황을 보여주는 매트릭스 탭으로 전환됩니다.
- 현재 평가 중인 프로필
- 프로필 진행 상황(예: 2/3)
- 케이스 완료 진행률 표시줄
- 완료되면 매트릭스 탭이 표시됩니다.
- 요약 카드 — 총 사례, 안정 비율, 회귀 횟수, 총 시간
- 프로필별 표 — 각 프로필의 합격률, 토큰, 비용, 시간
- 사례 × 프로필 그리드 — 각 프로필의 각 사례 상태를 표시하는 색상으로 구분된 매트릭스(녹색 = 안정, 황색 = 회귀, 빨간색 = 모두 실패)
- 사건은 다음과 같이 분류됩니다.
- 안정적 — 선택한 모든 프로필을 전달합니다(모델을 전환해도 안전함)
- 회귀 — 일부는 통과했지만 일부는 실패함(위험한 영역)
- 모두 실패함 — 모든 프로필에서 실패함(관계없이 조사 필요)
메모리 A/B: 숫자로 메모리의 가치를 증명
메모리를 켜면 에이전트가 실제로 나아질까요? 메모리 A/B는 마케팅 문구 대신 나란히 놓인 실험으로 이 질문에 답합니다.작동 방식
- Eval Lab → WorkBuddy Bench를 열고 다운로드된 트랙을 선택합니다.
- 트랙 카드의 Memory A/B 버튼을 클릭합니다 — 확인 대화상자에 실행될 내용이 정확히 표시됩니다.
- 대화상자는 먼저 embedding 모델을 검사합니다: 메모리 검색은 embedding에 의존하므로, embedding이 없거나 연결할 수 없으면 실행 낭비를 막기 위해 미리 알려줍니다.
- Myrm은 동일한 작업을 두 번 실행합니다 — 한 번은
enable_memory=True, 한 번은enable_memory=False— 나머지 설정은 완전히 동일합니다. - 진행률은 SSE로 실시간 스트리밍됩니다. 헤더의 Stop 버튼으로 실행을 중단하고 중간 상태를 정리합니다.
보고서
매트릭스 보고서는 두 팔을 나란히 보여줍니다:- 통과율 — 메모리 켬 vs 끔의 작업 완료율
- 토큰 및 비용 — 기억하는 데 드는 대가
memory_tool_calls— 메모리 도구가 실제로 호출된 횟수. 메모리가 도움이 되었다면 실제로 사용되었음을 확인할 수 있습니다 — ‘켜져 있지만 사용되지 않은 메모리’의 거짓 양성은 없습니다.
기록 재열람
모든 메모리 A/B 실행은 Run History 테이블에 기록됩니다(타임스탬프, 데이터셋, 두 팔의 통과율 및memory_tool_calls). View를 클릭하면 과거 보고서를 다시 열 수 있습니다 — 제품이 진화하면서 메모리 가치가 어떻게 변하는지 추적할 수 있습니다.
격리 및 안전
메모리 A/B 실행은 임시 격리 메모리 저장소를 사용하며 실행 후 폐기됩니다 — 실제 메모리 데이터는 절대 건드리거나 오염되지 않습니다.테스트 커버리지
전체 연결 Chrome E2E 커버리지(실제 브라우저 + 실제 백엔드): 카드 진입 + 확인 대화상자, 시드된 이중 팔 보고서 + 기록 렌더링, 실제 실행 시작 + 중단 — E2E 테스트 3개 + 프론트엔드 단위 테스트 12개.평가 워크스페이스 수명주기: 격리 샌드박스, 실행 후 즉시 폐기
모든 평가 케이스는 물리적으로 격리된 워크스페이스(.myrm/eval_workspaces/{case_id})에서 실행됩니다 — 동시 케이스가 같은 파일에서 경합하지 않고, 에이전트는 자신의 샌드박스만 읽고 쓸 수 있습니다. 수명주기는 완전 자동입니다.
- 실행 후 즉시 폐기 — 성공·실패·중단·크래시 모두 동일한 정리 경로(
create_session및execute전용 실행 포함)로 이어져, 장기 운영 서버에도 디스크가 쌓이지 않습니다. - 크래시 자가 치유 — 죽은 프로세스가 남긴 워크스페이스는 다음 서버 시작 시 자동으로 정리되며 수동 청소가 필요 없습니다.
- 정리 체인 장애 방지 — 각 정리 단계(메모리 볼륨 해제, 디렉터리 삭제, 프로필별 워크스페이스 정리)는 독립적으로 보호되어, 한 단계가 실패해도 나머지 정리가 누수되지 않습니다.
평가 무결성: 오염 방지, 예산 통제, 궤적 공개
벤치마크 점수는 ‘실행을 속일 수 없고 보고서를 감사할 수 있을 때’만 신뢰할 가치가 있습니다. Eval Lab은 이 두 가지를 구조적으로 보장합니다.오염 방지 실행 (HF 유출 방지)
벤치마크 실행 중 에이전트는 정답이 보관된 저장소 — 특히 Hugging Face(WBBench 트랙과 수많은 정답 데이터가 호스팅된 곳) 접근이 차단됩니다. 심층 방어:- 웹 페치 — 벤치마크의 차단 목록에 있는 hostname에 도달하는 즉시
benchmark_blocked도구 오류가 발생합니다. - 웹 검색 — 차단된 호스트의 결과는 랭킹/포맷 전에 조용히 제거되고, 차단된 쿼리 용어는 즉시 실패합니다.
- Shell / 코드 실행 — 네트워크 정책은 기본적으로 외부 접근이 차단되거나(Hugging Face가 없는 엄격한 허용 목록) 정답을 외부로 빼낼 사이드 채널이 없습니다.
- 보고서는 오염 방지 활성 여부(
decontam_active)를 기록하고 Report 탭에 배지로 표시합니다 — ‘깨끗한 점수’는 가정이 아니라 증명 가능합니다.
선언된 실행 예산
모든 타사 벤치마크는 자체 도구 호출 및 반복 예산(max_tool_calls / max_iterations)을 선언합니다:
- 막힌 에이전트가 무한정 토큰을 태울 수 없습니다 — 도구 호출 미들웨어와 엔진의 재귀 예산이 상한을 강제합니다.
- 상한에 도달하면 실행이 중단되고 per-case 보고서에 어떤 상한이 중단시켰는지 정확히 기록됩니다(
limit_reached, 예:max_tool_calls또는max_iterations). 잘린 케이스는 정상 완료와 절대 혼동되지 않습니다. - 매니페스트는 선언된 예산을 기록하고 Report 탭에 예산 · N회 호출 / M회 반복으로 표시됩니다.
궤적 공개
모든 보고서는 점수 뒤의 실행 증거를 노출합니다:- 도구 호출 세부사항 — 에이전트가 실제로 도구를 몇 번 호출했는지(
N×배지 + 툴팁). - 차단 횟수 — 오염 방지 가드가 몇 번의 시도를 가로챘는지(
Blocked N배지). - 도달한 상한 — 어떤 예산이 실행을 중단시켰는지(
Limit배지, 툴팁에 구체적 유형 표시). - 판정 투명성 — 의미론적(LLM-as-a-judge) 어서션은 설정 가능한
judge_prompt를 허용하고 보고서에 기록됩니다. 모든 실행에agent_model/judge_model이 공개됩니다(작업 네이티브 채점은 정직하게none으로 표시). 정확히 일치하는 답변은 판정자를 완전히 우회하므로 사소한 적중이 판정 토큰을 소모하지 않습니다.
환경 스냅샷
모든 평가 실행은 다음을 사용하여EvalManifest을 기록합니다.
이 스냅샷은 보고서 탭의 환경 및 기록 테이블에 프로필 및 모델 열로 표시됩니다.
벤치마크 모드
깨끗한 기준을 얻으려면 구성 탭에서 벤치마크 모드를 전환하세요.- 시스템 프롬프트 → 비어 있음
- 도구 → 코어 전용(MCP 없음, 기술 없음, 하위 에이전트 없음)
- 메모리, 웹 검색, 재계획, 압축 → 비활성화
테스트 케이스 작성
테스트 사례는 각 줄이 JSON 개체인 JSONL 파일입니다.스킬 게시 품질 가드
기술이 Myrm의 Skill Evolution 파이프라인을 통해 발전하면 프로덕션에 도달하기 전에 5개 방어 계층을 통과합니다.- EvolutionScreener — 5단계 스크리닝(잠김 → 강제 재시도 → 쿨다운 → 거부 내역 → LLM 확인)을 통해 잘못된 진화 시도가 리소스를 소비하기 전에 차단합니다.
- EvalCase 회귀 게이트 — 후보 변형에 대해 바인딩된 EvalCases를 실행합니다. 실패한 사례에 비례하여 점수 페널티를 적용합니다. 100% 사례에 실패하는 하드 필터 변형입니다.
- 개선 관문 — 원래의 기술을 기본 경쟁자로 주입합니다. 원본보다 실제로 더 높은 점수를 받은 변종만이 살아남습니다.
- SandboxValidator — 격리된 샌드박스에서 후보를 실행하여 실제로 작동하는지 확인합니다.
- ConfidenceApprovalFlow — 다중 신호 위험 제어(차이율, 유효 비율, 신뢰 임계값). 위험 신호는 GUI에서 인간 Diff 검토로 다운그레이드됩니다.
역사 및 저하
- 이전 보고서(매니페스트 추적 전에 생성됨)는 프로필 및 모델 열에
-을 표시하며 데이터 손실은 없습니다. - 히스토리 테이블은 좁은 화면에서 가로 스크롤을 지원합니다.
- 실패한 보고서 로드는 자동으로 실패하는 대신 토스트 알림을 표시합니다.