에이전트 자기개선 하네스 (5/12) — skill-evolve: 스킬을 스스로 만들고 고치기

복잡 작업 후 자동 패턴 분석, 반복 임계값 승격, 무한 루프 방지까지


핵심 요약

  • 에이전트가 복잡한 작업(5+ 도구, 에러 복구)을 수행한 뒤 자동으로 패턴을 분석하여 스킬 후보를 등록한다
  • 충분히 반복된 패턴만 스킬로 승격한다 — 반복이 적으면 우연까지 스킬이 되는 문제가 있었다
  • 시험 적용 → 문제 발견 → 즉시 패치의 루프로 스킬이 자기 개선된다
  • 자기개선은 반드시 "실제 작업 후"에만 트리거 — 그렇지 않으면 무한 루프에 빠진다

배경

에이전트의 스킬은 보통 사람이 만듭니다. "이런 상황에서 이런 절차를 따라라"를 직접 작성합니다.

문제는 규모입니다. 에이전트가 다루는 작업 유형이 늘어날수록, 사람이 모든 스킬을 직접 만들고 유지하는 게 현실적이지 않습니다. 게다가 에이전트가 실제 작업 중에 발견한 "이렇게 하면 되더라" 패턴은 사람이 미리 예측하기 어려운 경우가 많습니다.

그렇다면 에이전트가 스스로 스킬을 만들 수 있으면 어떨까? 복잡한 작업을 수행하면서 반복되는 패턴을 감지하고, 그걸 재사용 가능한 스킬로 정리하는 구조.

오픈클로(OpenClaw)에서 이걸 skill-evolve라는 이름으로 구현했습니다.


본문

1. 트리거 조건 — 아무 작업이나 분석하지 않는다

모든 작업 후에 패턴 분석을 하면 비효율적입니다. 단순한 파일 수정이나 한 줄 변경에서 스킬을 추출할 건 없습니다.

트리거 조건을 두었습니다:

  • 5개 이상의 도구를 사용한 작업. 여러 도구를 조합했다는 건 단순 반복이 아니라 절차가 있다는 뜻입니다.
  • 에러 복구가 포함된 작업. 에러를 만나고 해결한 과정은 그 자체로 가치 있는 지식입니다.
  • 두 조건 중 하나 이상 충족 시 작업 완료 후 자동으로 패턴 분석이 트리거됩니다.

이 필터 하나로 분석 대상이 전체 작업의 약 20%로 줄었습니다. 나머지 80%는 스킬이 필요 없는 단순 작업이었습니다.

2. skill-candidates.json — 후보 등록과 반복 임계값

패턴이 감지되면 바로 스킬이 되는 게 아닙니다. 먼저 skill-candidates.json에 후보로 등록됩니다.

{
  "candidates": [
    {
      "pattern": "SQLite migration with column rename",
      "occurrences": 2,
      "first_seen": "<initial_stage>",
      "last_seen": "<recent_stage>",
      "status": "candidate",
      "tool_sequence": ["read_file", "execute_sql", "write_file", "verify_schema", "run_test"],
      "error_recovery": "column mismatch → ALTER TABLE → re-migrate"
    }
  ]
}

핵심은 반복 임계값입니다. 처음에는 낮은 값(2회)으로 설정했습니다. 결과가 좋지 않았습니다.

낮은 임계값의 문제: 우연의 일치까지 스킬이 됐습니다. 예를 들어, 두 번 연속으로 비슷한 API 에러를 만났는데 원인이 완전히 달랐습니다. 한 번은 타임아웃, 한 번은 인증 만료. 증상이 비슷해서 패턴으로 감지됐지만, 실제로는 다른 문제였습니다. 이렇게 만들어진 스킬은 오히려 잘못된 해결책을 제안했습니다.

임계값을 올린 후: 반복 횟수가 충분히 쌓이면 우연일 확률이 크게 줄어듭니다. 같은 패턴이 구조적으로 반복된다는 신호이기 때문입니다. 임계값을 높인 뒤 잘못된 스킬 생성이 거의 사라졌습니다.

현재 오픈클로는 3회를 기준으로 사용합니다. 2는 너무 낮고, 5는 너무 높아서 실용적인 스킬이 잘 만들어지지 않았습니다. 3은 "충분히 반복됐다고 볼 수 있는 최소 횟수"라는 경험적 판단입니다. 프로젝트의 성격에 따라 4가 맞을 수도 있습니다.

3. 시험 적용과 즉시 패치 — 스킬도 버그가 있다

임계값을 넘어 스킬이 승격되면 바로 프로덕션에 들어가는 게 아닙니다. 시험 적용 단계를 거칩니다.

다음에 해당 패턴의 작업이 들어오면 새 스킬을 적용합니다. 그리고 결과를 검증합니다:

  • 스킬이 제안한 절차대로 했을 때 실제로 성공했는가?
  • 예상치 못한 부작용은 없었는가?
  • 빠진 단계는 없는가?

문제가 발견되면 즉시 패치합니다. 스킬 파일을 수정하고, 수정 이유를 기록합니다. 이게 "자기개선"의 실체입니다. 스킬이 한 번 만들어지면 영원한 게 아니라, 적용할 때마다 검증되고 개선됩니다.

실제 사례: 파일 마이그레이션 스킬이 처음 만들어졌을 때 "백업 생성" 단계가 빠져 있었습니다. 시험 적용에서 마이그레이션 실패 시 원본 복구가 불가능한 상황이 발생했고, 즉시 "Step 0: 원본 백업"이 추가됐습니다.

4. 무한 루프 방지 — 자기개선의 함정

자기개선 구조에는 근본적인 위험이 있습니다. "자기개선을 개선하는" 무한 루프입니다.

만약 패턴 분석 자체가 복잡 작업으로 감지되면? 패턴 분석의 패턴을 분석하고, 그 분석의 패턴을 또 분석하는 루프에 빠질 수 있습니다.

방지 규칙은 단순합니다: 자기개선은 "실제 작업" 후에만 트리거된다.

실제 작업 (파일 수정, 코드 생성, 버그 수정 등)
  → 패턴 분석 ✓ (트리거됨)

패턴 분석 자체
  → 패턴 분석 ✗ (트리거 안 됨)

스킬 패치 자체
  → 패턴 분석 ✗ (트리거 안 됨)

"실제 작업"의 기준은 명확합니다: 사용자의 요청에 의해 시작된 작업이고, 프로젝트 파일에 변경이 발생한 작업. 메타 작업(스킬 관리, 메모리 정리, 패턴 분석)은 트리거 대상에서 제외합니다.


시행착오

스킬 폭발. 임계값이 낮았을 때 스킬 후보가 폭발적으로 증가했습니다. 대부분이 쓸모없었고, 후보 목록을 관리하는 것 자체가 비용이었습니다. 임계값을 올리자 후보 생성 속도가 절반 이하로 줄었고, 품질은 올라갔습니다.

패턴 과잉 일반화. "파일을 읽고 수정하고 저장하는" 패턴은 거의 모든 작업에 해당됩니다. 이런 너무 일반적인 패턴이 스킬로 올라오면 가치가 없습니다. 도구 시퀀스의 최소 길이(5단계)와 에러 복구 포함 조건이 이 문제를 걸러줬습니다.

헤르메스(Hermes) 이관 시 토큰 폭주. 오픈클로에서 헤르메스로 이관을 시도했을 때, 자기개선 루프가 메타 작업을 트리거하면서 토큰 사용량이 폭발했습니다. 결국 오픈클로로 회귀한 뒤 트리거 규칙을 강화했고, 현재는 헤르메스 재시도를 검증 중입니다. 자기개선 구조를 이관할 때는 트리거 격리 규칙을 먼저 이식해야 합니다.


마무리

스킬 자기개선 루프는 에이전트에게 "경험에서 배우는 능력"을 부여하는 구조입니다.

  1. 트리거를 제한한다. 모든 작업이 아니라 복잡한 작업만 분석 대상. 5+ 도구 사용 또는 에러 복구 포함.
  2. 충분한 반복 후 승격. 우연과 구조를 구분하는 최소 기준. 오픈클로 현재 기준은 3회.
  3. 시험 적용 후 패치. 스킬도 코드처럼 버그가 있다. 적용하면서 고친다.
  4. 메타 작업은 트리거하지 않는다. 자기개선의 무한 루프를 원천 차단.

에이전트가 충분히 운영되면, 사람이 만든 스킬보다 에이전트가 스스로 만든 스킬이 더 실용적인 순간이 옵니다. 그건 에이전트가 실제 작업 현장에서 직접 부딪히며 만든 것이기 때문입니다.

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"