에이전트 스킬, 이제 '느낌' 말고 '증거'로 평가하세요!
에이전트 스킬의 성능 개선을 위해, 기존의 주관적인 평가 대신 평가(Evals)를 활용하여 객관적인 기준을 마련함
평가는 프롬프트(Prompt), 캡처된 실행 결과, 검증 항목, 점수로 구성되며, 경량화된 엔드투엔드(End-to-End) 테스트와 유사하게 작동함
성공 기준 정의, 결정적 검증, 루브릭 기반 채점을 통해 개선 사항(Improvements)과 회귀(Regressions)를 명확하게 파악할 수 있도록 지원함
Codex를 활용하여 평가를 자동화하고, CI 환경에서 일관된 결과를 얻을 수 있도록 지원하며, 지속적인 스킬 개선(Continuous Skill Improvement)을 가능하게 함
평가(Evals)의 핵심 원리: 프롬프트, 실행, 검증, 점수
본문은 에이전트 스킬의 품질을 객관적으로 평가하기 위해 평가(Evals)를 활용하는 방법을 제시한다. 평가는 프롬프트(Prompt)를 통해 에이전트의 동작을 유도하고, 실행 결과(Trace + Artifacts)를 캡처하여, 정의된 검증 항목(Checks)에 따라 점수를 매기는 방식으로 진행된다.
결정적 검증(Deterministic Checks): `npm install` 실행 여부, `package.json` 생성 여부 등, 명확한 기준을 통해 회귀(Regression)를 조기에 감지
루브릭 기반 채점(Rubric-based Grading): 스타일, 컨벤션 등, 정성적인 측면을 평가하기 위해 JSON 스키마(JSON Schema)를 활용하여 일관된 결과를 도출
자동화된 평가 파이프라인(Automated Evaluation Pipeline): `codex exec --json`을 통해 구조화된 이벤트(Structured Events)를 수집하고, 이를 기반으로 자동화된 평가 환경 구축
Codex를 활용한 평가(Evals) 구축 및 자동화
글에서는 Codex를 사용하여 평가(Evals)를 구축하고 자동화하는 방법을 설명한다. Codex는 에이전트 스킬을 생성하고 실행하는 데 사용되며, `--json` 옵션을 통해 실행 결과를 JSONL 형식으로 출력하여 결정적 검증(Deterministic Checks)을 용이하게 한다.
`codex exec` 명령어 활용: `--full-auto` 옵션을 통해 파일 시스템 접근 권한을 부여하고, `--output-schema` 옵션을 통해 구조화된 출력을 생성
Node.js 런너(Runner) 구현: `spawnSync`를 사용하여 Codex 명령어를 실행하고, JSONL 파일을 파싱하여 검증 로직을 수행
CI/CD 통합: Codex GitHub Action을 활용하여 CI 환경에서 평가를 자동화하고, 지속적인 통합(Continuous Integration)을 구현
성공 기준 정의 및 테스트 케이스 설계
에이전트 스킬의 성공적인 평가를 위해서는 명확한 성공 기준(Definition of Done) 정의가 선행되어야 한다. 성공 기준은 결과 목표(Outcome Goals), 프로세스 목표(Process Goals), 스타일 목표(Style Goals), 효율성 목표(Efficiency Goals)로 구분하여 설정한다.
테스트 케이스(Test Case) 설계: `id`, `should_trigger`, `prompt`로 구성된 CSV 파일을 활용하여 다양한 시나리오를 테스트
명시적 호출(Explicit Invocation): 스킬의 이름(Name)을 직접 언급하여 스킬이 정확하게 호출되는지 확인
암시적 호출(Implicit Invocation): 스킬의 기능(Functionality)을 설명하는 프롬프트를 사용하여 스킬이 의도대로 작동하는지 검증
부정적 테스트(Negative Control): 스킬이 호출되지 않아야 하는 경우를 테스트하여 오작동(False Positives) 방지
평가(Evals) 확장을 위한 추가적인 검증 방법
본문은 평가(Evals)를 확장하여 에이전트 스킬의 품질을 더욱 향상시키는 방법을 제시한다. 초기에는 간단한 검증부터 시작하여, 점진적으로 더 복잡한 검증을 추가하는 것이 권장된다.
명령어 실행 횟수 및 토큰 사용량 측정: `command_execution` 이벤트와 `turn.completed` 이벤트를 활용하여 성능 저하(Performance Degradation) 감지
빌드 검증(Build Checks): `npm run build`를 실행하여 코드의 유효성을 검증하고, 빌드 오류(Build Errors) 조기 발견
런타임 검증(Runtime Smoke Checks): `npm run dev`를 실행하고, `curl` 또는 Playwright를 사용하여 애플리케이션의 정상 작동 여부 확인
샌드박스 및 권한 검증: 최소 권한(Least-Privilege) 설정을 통해 보안 취약점(Security Vulnerability)을 방지