개요
2026년 3월, Andrej Karpathy가 공개한 AutoResearch는 AI 에이전트가 LLM 학습 실험을 자율적으로 수행하는 도구다. 에이전트가 코드를 수정하고, 5분간 학습을 돌리고, 성능이 올랐으면 유지하고 아니면 되돌린다. 이 단순한 루프를 밤새 반복해서 GPT-2 학습 시간을 11% 단축했다.
그런데 이 패턴이 LLM 학습에만 쓰일 이유가 없다. 코드를 수정하는 대신 프롬프트를 수정하고, 학습 지표 대신 평가 통과율을 측정하면, 에이전트의 스킬과 서브에이전트를 자동으로 개선하는 데 그대로 적용할 수 있다.

AutoResearch란 무엇인가
Karpathy의 AutoResearch는 세 개의 파일로 구성된 최소한의 실험 환경이다.
- prepare.py: 데이터 준비와 평가 로직. 에이전트가 수정하지 않는 고정된 기반
- train.py: 에이전트가 유일하게 수정하는 파일. 모델 구조, 하이퍼파라미터, 학습 루프가 담겨 있음
- program.md: 에이전트에게 주는 지시 사항. 사람이 마크다운으로 작성
작동 방식은 다음과 같다.
- 에이전트가 program.md의 지시를 읽는다
- train.py에 한 가지 변경을 가한다
- git commit으로 변경을 기록한다
- 정해진 시간(5분) 동안 학습을 실행한다
- 검증 지표(val_bpb)를 측정한다
- 성능이 좋아졌으면 유지, 아니면 revert한다
- 1번으로 돌아간다
핵심은 단일 파일 수정, 고정된 평가 시간, 명확한 단일 지표, 이진 판단(유지/폐기)이라는 네 가지 제약이다. 이 제약들이 에이전트의 자율 실험을 안정적이고 측정 가능하게 만든다.
Karpathy는 이 방식으로 nanochat 프로젝트에서 약 700번의 실험을 돌려 20개의 유효한 개선점을 찾았고, GPT-2 학습 시간을 2.02시간에서 1.80시간으로 줄였다.
왜 에이전트 스킬 개선에 필요한가
Claude Code의 스킬이나 OpenAI Codex의 AGENTS.md 같은 에이전트 지시 파일을 작성해본 경험이 있다면, 다음 상황이 익숙할 것이다.
- 스킬을 작성했는데 특정 케이스에서 기대와 다르게 동작한다
- 프롬프트를 고쳤더니 다른 케이스가 깨진다
- 어떤 수정이 전체 성능에 어떤 영향을 미치는지 파악하기 어렵다
- 수작업 테스트를 반복하다 보면 시간이 금방 소모된다
사람이 직접 프롬프트를 다듬는 방식은 두 가지 한계가 있다. 첫째, 사람의 시간과 주의력에 의존한다. 둘째, 변경의 영향을 체계적으로 측정하기 어렵다.
AutoResearch 패턴은 이 문제를 정면으로 해결한다. 에이전트가 스스로 스킬을 수정하고, 평가 스위트를 돌리고, 결과에 따라 유지하거나 되돌린다. 사람은 평가 기준만 잘 설계하면 된다.

핵심 방법론: AutoResearch 패턴을 에이전트 스킬에 적용하기
원래 AutoResearch에서는 train.py라는 학습 코드를 수정했다. 에이전트 스킬에 적용할 때는 이 구조를 다음과 같이 대응시킨다.
AutoResearch 원본과 에이전트 스킬 적용의 대응 관계
- train.py (수정 대상) → SKILL.md 또는 시스템 프롬프트 (수정 대상)
- prepare.py (고정된 평가 기반) → 평가 스크립트와 테스트 케이스 (고정된 평가 기반)
- program.md (에이전트 지시) → 메타 프롬프트: 스킬 개선 방향 지시 (에이전트 지시)
- val_bpb (성능 지표) → 평가 통과율 (성능 지표)
- 5분 학습 (고정 평가 시간) → N개 테스트 케이스 실행 (고정 평가 범위)
이 대응을 기반으로 에이전트 스킬의 자동 개선 루프를 구성할 수 있다.
루프의 네 단계
1단계: Generate (생성)
현재 스킬을 사용해 테스트 입력에 대한 출력을 생성한다.
2단계: Evaluate (평가)
생성된 출력을 이진 테스트(Binary Assertion)로 검증한다. 주관적 점수(1~5점) 대신 “통과/실패”만 판단한다.
3단계: Score (점수화)
전체 테스트 케이스 중 모든 조건을 통과한 비율을 계산한다.
4단계: Iterate (반복)
실패 패턴을 분석하고, 스킬 파일을 수정하고, 다시 1단계로 돌아간다. 점수가 올랐으면 유지, 내려갔으면 되돌린다.
이진 평가(Binary Assertion)가 중요한 이유
평가 방식 선택은 이 패턴 전체의 성패를 좌우한다. AutoResearch가 val_bpb라는 단일한 수치 지표를 쓰는 것처럼, 에이전트 스킬 평가에서도 모호함을 제거해야 한다.
1~5점 척도의 루브릭 평가는 일관성이 떨어진다. 같은 출력에 대해 평가자(사람이든 LLM이든)가 3점을 줄 수도, 4점을 줄 수도 있다. 이런 노이즈는 자동화된 개선 루프에서 잘못된 판단으로 이어진다.
이진 테스트는 이 문제를 해결한다. 각 테스트는 하나의 질문에 “예/아니오”로 답한다.
- 출력이 유효한 JSON 형식인가?
- 요약이 80단어 이하인가?
- 원본에 없는 사실이 추가되지 않았는가?
- 응답 시작에 공감 표현이 포함되어 있는가?
일반적으로 20~30개의 테스트 케이스에 각 3~6개의 이진 테스트를 구성하면, 한 번의 평가 사이클에서 60~180개의 개별 검증이 수행된다. 이 수준이면 스킬의 품질을 정량적으로 추적할 수 있다.
실전 예시: 고객 지원 요약 스킬 개선
구체적인 예시로 고객 지원 티켓을 요약하는 에이전트 스킬을 개선하는 과정을 살펴보자.
프로젝트 구조
skill-optimizer/
├── prompts/
│ ├── current.md # 현재 활성 스킬 프롬프트
│ └── candidates/ # 개선 후보 프롬프트들
├── evals/
│ ├── test_cases.json # 테스트 입력 데이터
│ └── assertions.py # 이진 평가 함수들
├── results/
│ └── scores.json # 평가 이력
└── AGENT_INSTRUCTIONS.md # 메타 에이전트 지시테스트 케이스 예시
{
"test_cases": [
{
"input": "고객이 결제 실패 후 3일째 응답을 받지 못해 화가 난 상태의 지원 티켓",
"assertions": [
"output_is_valid_json",
"summary_under_80_words",
"contains_customer_sentiment",
"no_hallucinated_facts",
"includes_action_items"
]
}
]
}이진 평가 함수 예시
def output_is_valid_json(output: str) -> bool:
try:
json.loads(output)
return True
except json.JSONDecodeError:
return False
def summary_under_80_words(output: str) -> bool:
data = json.loads(output)
return len(data.get("summary", "").split()) <= 80
def no_hallucinated_facts(output: str, source: str) -> bool:
# LLM-as-Judge: 출력의 모든 사실이 원본에 존재하는지 검증
result = llm_judge(
prompt=f"출력에 포함된 모든 사실이 원본 텍스트에 존재하는가?\n원본: {source}\n출력: {output}",
expected="yes"
)
return result == "yes"개선 사이클 결과 (가상 시나리오)
- 사이클 1~5 (명백한 수정): JSON 형식 오류 해결, 단어 수 초과 문제 수정 → 통과율 45% → 62%
- 사이클 6~12 (구조적 개선): 감정 분석 로직 보강, 액션 아이템 추출 지시 구체화 → 통과율 62% → 78%
- 사이클 13~20 (미세 조정): 엣지 케이스 처리, 표현 다듬기 → 통과율 78% → 84%
이 과정을 밤새 자동으로 돌리면, 아침에 출근했을 때 개선된 스킬 파일과 상세한 평가 이력을 확인할 수 있다.

단계별 적용 가이드
직접 적용하고 싶다면, 다음 5단계를 따라가면 된다.
1단계: 개선할 스킬 선정과 베이스라인 측정
모든 스킬이 자동 개선에 적합한 것은 아니다. 다음 조건을 만족하는 스킬을 선택한다.
- 출력의 품질을 자동으로 측정할 수 있는가?
- 충분한 테스트 케이스를 확보할 수 있는가?
- 반복 실행의 비용이 감당 가능한가?
선정 후, 현재 상태의 스킬로 전체 테스트 스위트를 돌려 베이스라인 통과율을 기록한다.
2단계: 이진 평가 스위트 설계
실패 모드(failure mode)에서 출발한다. 스킬이 실제로 어떻게 깨지는지 관찰하고, 각 실패 유형에 대응하는 이진 테스트를 작성한다.
일반적인 실패 모드 유형은 다음과 같다.
- 형식 위반: JSON 파싱 실패, 마크다운 구조 깨짐
- 환각(Hallucination): 원본에 없는 정보 생성
- 지시 미준수: 단어 수 초과, 필수 섹션 누락
- 과잉 응답: 불필요하게 긴 출력, 관련 없는 내용 포함
20~30개의 테스트 케이스와 케이스당 3~6개의 이진 테스트가 기본적인 출발점이다.
3단계: 메타 프롬프트 작성
에이전트가 스킬을 어떻게 개선할지 지시하는 메타 프롬프트를 작성한다. AutoResearch의 program.md에 해당하는 부분이다.
## 스킬 개선 지시
1. 현재 스킬 파일(current.md)을 읽는다
2. 평가 결과(results/scores.json)에서 실패 패턴을 분석한다
3. 실패를 해결하는 방향으로 스킬 파일에 한 가지 변경을 가한다
4. 변경된 스킬로 전체 테스트 스위트를 실행한다
5. 통과율이 올랐으면 유지, 내려갔으면 되돌린다
6. 한 사이클에 한 가지 변경만 한다 (복합 변경 금지)핵심 원칙: 한 사이클에 한 가지 변경. AutoResearch에서도 이 원칙이 핵심이다. 여러 변경을 한꺼번에 적용하면 어떤 변경이 효과가 있었는지 알 수 없다.
4단계: 자동 반복 실행
루프를 실행한다. Claude Code의 경우, Task 도구로 서브에이전트를 호출하거나 스킬 내에서 자동으로 반복하도록 구성할 수 있다. CI/CD 파이프라인(예: GitHub Actions)에서 스케줄로 실행하는 것도 가능하다.
예상 비용은 모델과 테스트 케이스 수에 따라 다르지만, 30~50 사이클을 기준으로 약 $1.50~$4.50 수준이다.
5단계: 거버넌스와 품질 문턱값 설정
자동 개선이 항상 올바른 방향으로 가지는 않는다. 안전장치가 필요하다.
- 최소 통과율 문턱값: 특정 카테고리의 통과율이 일정 수준 이하로 떨어지면 변경을 자동 거부
- 인간 검토 트리거: 통과율이 목표치(예: 85%)에 도달하면 사람이 최종 검토
- 버전 이력 관리: 모든 스킬 변경을 git으로 추적하고, 각 버전의 평가 점수를 함께 기록
- 회귀 방지: 전체 통과율이 올라도 특정 카테고리가 크게 떨어지면 거부
OpenAI의 Self-Evolving Agents와의 비교
OpenAI도 유사한 패턴을 “Self-Evolving Agents”라는 이름으로 제안했다. 핵심 구조는 거의 동일하다.
공통점
- 현재 에이전트로 출력을 생성하고 평가하는 루프 구조
- 실패 분석 기반의 프롬프트 수정
- 자동화된 반복과 버전 관리
차이점
- OpenAI 방식은 4가지 상호보완적 평가자를 사용한다: 도메인 특화 정확도, 길이 규율, 의미적 유사도, LLM 기반 종합 품질 평가
- “관대한 통과” 기준을 사용한다: 평가자의 75%가 통과하거나 평균 점수가 0.85를 넘으면 개선 시도를 트리거
- 롤백 기능이 내장된 VersionedPrompt 시스템으로 프롬프트 이력을 관리한다
두 접근법의 핵심은 같다. 측정하고, 실패에서 배우고, 반복한다.
Claude Code Skills 2.0의 내장 평가 기능
Claude Code의 최신 스킬 시스템(Skills 2.0)에는 이 패턴을 지원하는 기능이 이미 내장되어 있다.
Skill Creator: 스킬 작성, 테스트 케이스 생성, 평가 실행, 실패 분석, 자동 개선을 최대 5회 반복하는 메타 스킬이다.
EVAL 모드: 스킬을 테스트 프롬프트 세트에 대해 실행하고, 통과/실패를 판정한다.
IMPROVE 모드: 평가 결과의 실패 패턴을 분석하고, 스킬을 자동으로 재작성하여 개선한다.
이 기능들을 조합하면, AutoResearch 패턴을 별도의 인프라 없이 Claude Code 환경 안에서 바로 실행할 수 있다.

주의사항과 한계
이 접근법이 만능은 아니다. 적용 전에 알아야 할 것들이 있다.
평가 설계가 전부다: 평가 스위트의 품질이 개선의 방향을 결정한다. 잘못된 평가 기준은 잘못된 방향으로의 최적화를 유도한다. Goodhart의 법칙이 여기서도 적용된다.
창의적 작업에는 한계가 있다: 코드 생성, 데이터 추출처럼 정답이 명확한 작업에 효과적이다. 글쓰기, 디자인 같은 주관적 작업은 이진 테스트로 포착하기 어려운 품질 차원이 존재한다.
과적합 위험: 테스트 스위트에 과적합되어 테스트에서는 높은 점수를 받지만 실제 사용에서는 딱딱하게 동작할 수 있다. 테스트 케이스의 다양성이 중요하다.
비용 고려: 매 사이클마다 LLM API 호출이 발생한다. 테스트 케이스 수와 반복 횟수에 비례하여 비용이 증가한다.
마무리
AutoResearch 패턴의 핵심 통찰은 단순하다. 수정하고, 측정하고, 유지하거나 되돌린다. 이 원칙은 LLM 학습 코드에서 에이전트 스킬로 자연스럽게 확장된다.
코드를 최적화하는 대신 프롬프트를 최적화하고, 학습 지표 대신 평가 통과율을 추적하면, 밤새 자동으로 에이전트 성능을 개선하는 시스템을 만들 수 있다.
시작하기 위해 거창한 인프라가 필요하지 않다. 개선할 스킬 하나, 테스트 케이스 20개, 이진 평가 함수 몇 개면 충분하다. 나머지는 에이전트가 알아서 한다.
참고 자료
- Karpathy autoresearch GitHub 저장소
- autoresearch: Karpathy's Blueprint for Agents That Improve Themselves
- How to Use Claude Code with AutoResearch to Build Self-Improving AI Skills
- AutoResearch Eval Loop: Binary Tests for Claude Code Skills
- OpenAI Self-Evolving Agents Cookbook
- Claude Code Skills 공식 문서
- Claude Code Subagents 공식 문서
이 글은 Claude Code를 활용하여 작성되었습니다.
'ai 자동화' 카테고리의 다른 글
| AI 에이전트의 6가지 프로토콜 — MCP, A2A, UCP, AP2, A2UI, AG-UI (0) | 2026.03.25 |
|---|---|
| Unsloth Studio로 내 컴퓨터에서 LLM 파인튜닝하기 (0) | 2026.03.25 |
| [공식문서읽기] OpenAI Codex Automations — 코딩 에이전트가 알아서 일하는 시대, 자동화 워크플로우 완벽 가이드 (0) | 2026.03.18 |
| PM Skills Marketplace - AI로 프로덕트 매니저의 업무를 체계화하는 오픈소스 툴킷 (1) | 2026.03.14 |
| 텔레그램으로 Claude Code 실행하기 - OpenClaw Skill 등록편 (4편) (0) | 2026.03.09 |