-
AI 코딩 에이전트의 자기 진화 학습 시스템 — 실수를 기억하고 성장하는 에이전트 만들기IT 2026. 4. 11. 21:00
왜 이런 시스템이 필요했나
AI 코딩 에이전트(Claude Code)를 일상적으로 쓰다 보면 한 가지 답답한 점이 있다. 같은 실수를 반복한다는 것이다.
예를 들어, 개인 사진 관리 시스템을 만들면서 Immich API의 SHA-1 체크섬이 hex가 아니라 base64 인코딩이라는 걸 알아냈다. 그런데 다음 세션에서 같은 API를 다시 쓸 때 에이전트는 또 hex로 보내고, 또 실패하고, 또 디버깅하고… 결국 또 base64라는 결론에 도달한다. 매번 새 세션은 기억상실이다.
반대 상황도 있다. 여행 포토북을 만들 때 Overpass API로 주변 호텔/관광지를 조회하는 성공 패턴을 발견했는데, 다음 여행 앨범을 만들 때는 그 경험이 사라져 있다. 처음부터 다시 시행착오를 거친다.
요약하면 두 가지 문제다.
- 실패 망각: 한 번 해결한 오류를 다음 세션에서 다시 겪는다
- 성공 휘발: 잘 동작한 절차가 세션이 끝나면 사라진다
OpenClaw의 Self-Evolving Skill에서 영감을 받다
이 문제를 고민하던 중, OpenClaw에서 해법을 발견했다. Peter Steinberger가 만든 이 오픈소스 AI 에이전트 프레임워크에는 "Self-Evolving Skill"이라는 개념이 있다. 에이전트가 스스로 자신의 설정, 프롬프트, 메모리, 스킬을 수정하면서 지속적으로 개선되는 구조다. 에러를 감지하면 스스로 수정하고, 사용자 피드백을 반영해 새로운 스킬을 작성하고, 약점을 보완하는 루프가 자동으로 돌아간다.
OpenClaw의 스킬 레지스트리에는 5,400개 이상의 스킬이 등록되어 있고, 그중 "Self-Evolve", "Self-Improving Agent", "Agent-Evolver" 같은 자기 진화 스킬들이 이 개념의 핵심이다.
이 아이디어를 내 환경(Claude Code + DGX Spark 로컬 서버)에 맞게 재구성한 것이 Self-Evolving Skill Learning 시스템이다. OpenClaw의 철학을 빌려오되, Claude Code의 스킬 체계와 cron 기반 자동화에 맞춰 구현했다.
EXTRACT-REPAIR-CONSULT 사이클
핵심 아이디어는 간단하다. 에이전트의 경험을 구조화된 파일로 저장하고, 작업 전에 자동으로 참조하게 하는 것이다.
시스템은 세 가지 모드로 동작한다.
1. EXTRACT — 성공 패턴 포착
작업이 잘 끝났을 때, 그 절차를 패턴 파일로 저장한다. 단순히 "무엇을 했는지"가 아니라, 어떤 조건에서 이 패턴이 유효한지(Trigger), 구체적인 절차(Pattern), 근거가 된 실제 사례(Evidence)를 함께 기록한다.
# POI 자동 조회 루틴 ## Trigger 여행 포토북 생성 시 GPS 좌표 기반 장소 조회가 필요할 때 ## Pattern 1. poi_cache.json에서 캐시 확인 2. 캐시 미스 → 일별 GPS 중심 좌표 계산 3. Overpass API로 호텔/관광지 조회 4. 결과를 캐시에 저장 (API rate limit 대비) ## Evidence 2026-03-28 이집트 여행 앨범 — Overpass API 타임아웃 후 캐싱 도입2. REPAIR — 실패 복구 패치
오류가 발생하고 해결했을 때, 그 진단과 수정 방법을 repair 파일로 저장한다. 다음에 같은 에러가 나면 디버깅 없이 바로 수정할 수 있다.
# SHA-1 체크섬 hex→base64 변환 ## Trigger Immich API의 checkExistingAssets로 중복 검사 시 ## Diagnosis compute_sha1()가 hex digest를 반환하지만, Immich는 base64 인코딩을 기대함. hex로 보내면 모든 파일이 "신규"로 판정되어 중복 업로드 발생. ## Fix hashlib.sha1(data).hexdigest() → base64.b64encode(hashlib.sha1(data).digest()).decode()3. CONSULT — 작업 전 자동 참조
특정 도메인의 작업을 시작하기 전에, 해당 도메인의 repair/pattern 파일을 자동으로 스캔한다. 이미 알려진 함정이 있으면 미리 회피하고, 검증된 패턴이 있으면 바로 적용한다.
이 세 모드가 순환하면서 에이전트의 지식이 점진적으로 쌓인다. 세션이 바뀌어도 유지된다.
자동화: 매일 밤 스스로 학습한다
수동으로 "이거 기억해"라고 말할 수도 있지만, 핵심은 자동화된 일일 리뷰다.
매일 새벽 2시 30분에 cron이 돌면서 다음 증거(evidence)를 수집한다.
- Claude Code 세션 히스토리 (어떤 작업을 했는지)
- Git 커밋 로그 (무엇이 변경되었는지)
- 에러 로그 (어떤 오류가 발생했는지)
- Telegram 게이트웨이 이벤트 (외부 요청과 응답)
수집된 증거를 Claude에게 넘기면, AI가 분석해서 새로운 패턴 후보, 새로운 repair 후보, 기존 지식의 업데이트 사항을 JSON으로 반환한다. 아침 9시에 그 결과가 Telegram으로 도착한다.
📋 Self-Learning 일일 리뷰 (2026-03-31) ✨ 새 패턴 후보 1건: • [chronicle] narrative-style-v3 트리거: 포토북 내러티브 생성 시 🔧 새 Repair 후보 0건 🔄 갱신 대상 2건: • poi-lookup-routine — use_count +1 적용하려면 "학습 리뷰 적용해줘"라고 말해주세요.사용자는 Telegram에서 결과를 확인하고, 적용 여부를 결정한다. 완전 자동이 아니라 사람의 승인이 있는 자동화다.
실제로 축적된 지식
약 2주간 운영하면서 쌓인 지식 목록이다.
Repair (실패 복구) — 6건
이름 도메인 핵심 내용 sha1-base64 사진관리 SHA-1을 hex가 아닌 base64로 인코딩해야 함 ml-trigger-api 사진관리 Immich ML 트리거가 POST가 아닌 PUT 엔드포인트 vlm-model-oom 사진관리 72B VLM 모델 OOM → 32B로 다운그레이드 unnamed-people-field 사진관리 faces 필드 대신 faceCount 사용해야 함 delete-with-dedup 사진관리 중복 파일도 삭제 대상에 포함해야 함 cron-env-vars 일반 cron 환경에서 .bashrc export 변수 로딩 필요 Pattern (성공 패턴) — 2건
이름 도메인 핵심 내용 poi-lookup-routine 포토북 Overpass API + 캐싱으로 장소 조회 narrative-style-evolution 포토북 사진 설명 대신 제목 키워드 기반 내러티브 각 지식에는
use_count와last_used가 기록되어, 자주 쓰이는 지식과 오래된 지식을 구분할 수 있다. 6개월 이상 사용되지 않은 지식은 아카이브 후보가 된다.진화 추적: 삭제 대신 버저닝
흥미로운 설계 원칙 하나가 있다. 지식을 절대 삭제하지 않는다는 것이다.
패턴이 개선되면 Evolution 섹션에 버전을 추가한다. 예를 들어 포토북 내러티브 스타일은 v1(사진 개별 설명)에서 v2(키워드 기반 간결 서술)로 진화했다. v1의 기록이 남아있기 때문에, 왜 현재 방식이 채택되었는지를 추적할 수 있다.
하나의 repair가 더 근본적인 repair로 대체될 때는
supersedes필드로 연결한다. 지식의 계보가 남는 셈이다.업계 동향: Self-Evolving Agent의 부상
이런 접근은 개인 프로젝트만의 이야기가 아니다. 2025-2026년 AI 에이전트 분야에서 자기 진화(Self-Evolving)가 핵심 키워드로 떠오르고 있다.
- Darwin Godel Machine: 코딩 에이전트가 자기 자신의 코드를 수정하며 성능을 개선하는 연구. 코딩, 논문 리뷰, 수학 문제 등 다양한 도메인에서 baseline 대비 성능 향상을 입증했다.
- Agent-R: 정적 데이터셋 학습 대신, "실수에서 회복하는 과정(revision trajectory)"을 학습 데이터로 사용하는 접근. 에러를 치명적 오류가 아닌 학습 기회로 전환하는 철학이다.
- Try-Rewrite-Retry 패턴: 에러 메시지를 대화 히스토리에 주입하면, LLM이 실수를 이해하고 수정된 도구 호출을 생성한다. 구문/의미 에러에 대해 거의 100% 재시도 성공률이 보고되었다.
Andrej Karpathy는 이를 "Code Agent와 AutoResearch의 Self-Improvement Loopy Era"라고 표현했다. 에이전트가 외부 데이터 없이 자기 경험만으로 개선되는 시대가 열리고 있다는 의미다.
이 시스템으로 얻은 것
실제로 운영하면서 체감한 효과를 정리하면 이렇다.
- 반복 디버깅 시간 제거: SHA-1 base64 같은 이슈는 한 번 repair로 저장하면 다시는 발생하지 않는다. 이전에는 세션마다 10-20분씩 같은 디버깅을 했다.
- 온보딩 비용 감소: 새 세션이 시작될 때 CONSULT 모드가 해당 도메인의 "알려진 함정"을 미리 로딩한다. 에이전트가 마치 경험이 있는 것처럼 동작한다.
- 지식의 복리 효과: 패턴과 repair가 쌓일수록, 새 프로젝트의 시행착오가 줄어든다. cron-env-vars repair처럼 도메인을 가로지르는 일반 지식은 모든 프로젝트에 적용된다.
- 진화 가시성: learning-log.md를 보면 시스템이 언제, 무엇을, 왜 배웠는지 추적할 수 있다. 블랙박스가 아니라 투명한 성장 과정이다.
한계와 남은 과제
물론 한계도 있다.
- 규모 확장: 현재 8개의 지식(6 repair + 2 pattern)은 파일 스캔으로 충분하지만, 100개를 넘어가면 벡터 검색이나 태그 기반 인덱싱이 필요할 수 있다.
- 일일 리뷰 품질: AI가 증거를 분석하는 과정에서 JSON 파싱 실패가 간혹 발생한다. 리뷰 프롬프트의 정교화가 필요하다.
- CONSULT 자동화 범위: 아직 특정 도메인(사진관리, 포토북)에만 연결되어 있다. 범용 도메인으로 확장하려면 트리거 매칭 로직이 더 정교해져야 한다.
마무리
AI 코딩 에이전트의 가장 큰 약점은 세션 간 기억상실이다. 아무리 똑똑한 모델이어도 매번 처음부터 시작하면 효율이 떨어진다.
OpenClaw의 Self-Evolving Skill 개념은 이 문제에 대한 우아한 답이었고, 그것을 Claude Code 환경에 맞게 재구성한 결과가 이 시스템이다. 마크다운 파일 몇 개와 cron 한 줄로, 에이전트가 실수를 기억하고 성공을 재활용하게 만드는 실용적인 접근이다.
직접 만들어보고 싶다면, 핵심은 세 가지다. 실패를 구조화하고(REPAIR), 성공을 구조화하고(EXTRACT), 작업 전에 자동으로 읽게 하라(CONSULT). 어떤 에이전트 프레임워크를 쓰든 이 원칙은 동일하게 적용된다.
이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.
'IT' 카테고리의 다른 글
Chain이 아니라 Graph — LangGraph로 AI 에이전트를 만드는 이유 (0) 2026.04.16 아카라이브 알파카 채널과 AI 모델 이름의 계보 (0) 2026.04.14 Gemma 4 로컬 AI 스택 완전 정복 — DGX Spark에서 돌려본 솔직한 후기 (1) 2026.04.13 GPU에서 LLM까지, 추론 스택 완전 해부 (0) 2026.04.13 GitHub 오픈소스 PR 리뷰, 놓치지 않는 자동화 시스템 만들기 (0) 2026.04.12 Qdrant 벡터 DB, 임베디드 모드에서 Docker 서버로 전환한 이유 — 로컬 RAG 시스템 구축 삽질기 (0) 2026.04.10 캘린더 싱크의 중복 지옥, event_id로 탈출하기 — Google Calendar → Obsidian 자동화 삽질기 (1) 2026.04.09 Claude Code가 플랜을 짜는 방법 - Plan Mode 내부 동작 원리 (0) 2026.04.08 axios에 악성코드가 심어졌다 - 북한 해커의 npm 공급망 공격 분석 (2) 2026.04.07 Claude Code Hooks로 AI 에이전트의 다단계 파이프라인을 결정적으로 만들기 (0) 2026.04.06