🔥 AutoSkill — 사용자 대화에서 자라는 자가진화 스킬

#ai#agent#skill#lifelong-learning#personalization#llm
2051자
27분

같은 요청을 매 세션마다 다시 적고 있는 이유

AutoSkill 논문(arXiv:2603.01145)을 §4.2까지 읽었을 때 한 문장이 눈에 들어왔다. 각 스킬을 SKILL.md를 중심으로 한 Agent Skill artifact로 구체화한다는 설명이다. Anthropic Agent Skills가 2025년 가을 공개한 같은 SKILL.md 중심 형식을 AutoSkill이 따른다. 처음에는 구현 세부 사항처럼 보였다. 그런데 이 한 줄이 논문의 핵심을 거의 다 말한다.

AutoSkill은 모델 안에 기억을 더 주입하지 않는다. 세션 밖에 별도 지식 저장소만 붙이지도 않는다. 사용자가 반복해서 말한 요구를 사람이 열어 읽을 수 있는 마크다운 파일로 만들고, 그 파일을 다음 요청의 실행 규칙으로 다시 넣는다. 그래서 문제는 “무엇을 기억할 것인가”보다 “기억을 어떻게 행동으로 바꿀 것인가”에 가깝다.

대화 메모리는 과거 문장을 보존한다. “나는 긴 답보다 체크리스트를 선호한다”, “보고서는 회사 문체에 맞춰 달라”, “코드 예시는 TypeScript로 달라” 같은 말은 저장할 수 있다. 하지만 저장한 문장이 다음 실행에서 항상 규칙으로 작동한다고 보장하지 않는다. 반대로 모델 파라미터를 계속 업데이트하는 방식은 행동을 깊게 바꿀 수 있지만, 배포 중인 개인 사용자 단위로 자주 돌리기에는 비용과 위험이 크다.

AutoSkill은 그 사이의 틈을 겨냥한다. 논문 §3.1은 이 방법을 training-free라고 명시한다. 배포 중에 모델 파라미터를 업데이트하지 않는다. 대신 사용자별 SkillBank를 두고, 대화에서 뽑은 반복 요구를 명시적인 스킬로 관리한다.

이 접근은 평생 개인화의 단위를 바꾼다. 개인화는 더 이상 “이 사용자를 기억한다”라는 추상 문장이 아니다. 개인화는 “이 사용자의 반복 행동 규칙을 파일로 만들고, 검색하고, 버전을 올리고, 다음 응답에 주입한다”라는 운영 절차가 된다.

같은 요청을 매 세션마다 다시 적는 이유는, 현재 많은 시스템이 텍스트는 보관하지만 행동 규칙으로 승격하지 않기 때문이다. AutoSkill은 그 승격 단계를 시스템의 기본 기능으로 만든다. 그렇다면 그 행동을 어떤 형식으로 저장하는가?

AutoSkill이 사용자 대화를 SKILL.md 파일로 승격해 버전을 올리는 흐름의 hero 일러스트

그 행동을 어떤 형식으로 저장하는가

AutoSkill은 스킬을 Anthropic Agent Skills 계열의 마크다운 파일 하나로 저장한다. 논문 §3.1은 각 스킬을 7개 필드 (name, desc, prompt, triggers, tags, examples, version)로 정의한다. 이름은 스킬을 식별한다. 설명은 검색과 선택을 돕는다. 프롬프트는 실제 실행 지침이다. 트리거는 어떤 요청에서 이 스킬을 꺼낼지 알려준다. 태그는 분류와 탐색을 돕는다. 예시는 사용자가 남긴 요구를 일반화한 사례다. 버전은 같은 스킬이 얼마나 여러 번 갱신됐는지 보여준다.

§4.2는 이 구조를 SKILL.md를 중심으로 한 Agent Skill artifact로 구현한다고 설명한다. 이 선택이 중요하다. 스킬을 벡터 데이터베이스 안의 불투명한 레코드로만 두면, 검색은 할 수 있지만 사람이 내용을 검사하기 어렵다. 스킬을 프롬프트 문자열로만 두면, 실행은 할 수 있지만 수명 주기를 관리하기 어렵다. AutoSkill과 Anthropic이 채택한 이 파일 형식은 둘 사이를 잇는다. 앞부분에는 이름과 설명 같은 메타데이터를 둘 수 있고, 본문에는 실행 지침과 예시를 둘 수 있다. 사람이 직접 열어 읽고 수정할 수 있으며, 파일 단위로 가져오고 내보낼 수 있다.

Anthropic의 Agent Skills 글도 SKILL.md를 이름, 설명, 마크다운 지침을 담는 중심 파일로 설명한다. AutoSkill은 이 표준을 개인화 저장 단위로 가져온다. 그 덕분에 스킬은 모델의 숨은 상태가 아니라 명시적 산출물이 된다.

사용자가 “법률 문서처럼 쓰지 말고 내부 공지처럼 간결하게 써 달라”고 여러 번 말하면, 시스템은 그 문장을 그대로 장기 메모리로만 보관하지 않는다. 반복성을 판단하고, 필요하면 internal_notice_rewrite 같은 스킬 후보를 만든다. 그 스킬은 “짧은 제목, 첫 문단 요약, 불필요한 법률 문구 제거, 실행 항목 분리” 같은 실행 규칙을 가진다. 다음에 비슷한 요청이 오면 시스템은 스킬을 검색해서 프롬프트에 넣는다. 이때 개인화는 추론 시점의 보조 맥락으로 작동한다. 모델 자체는 그대로지만, 모델이 받는 작업 지침이 사용자 경험에 맞게 달라진다.

파일 형식은 단순하지만 효과는 크다. 단순한 파일은 버전 관리, 리뷰, 공유, 삭제, 병합을 모두 쉽게 만든다. 평생 학습 시스템에서 중요한 것은 지식을 많이 모으는 일이 아니다. 오래된 지식과 새 요구를 충돌 없이 관리하는 일이다. AutoSkill은 그 관리를 version 필드와 유지보수 절차로 분리한다. 그렇다면 5개 prompt 모듈은 어떻게 한 시스템이 되는가?

AutoSkill 논문 Figure 1 — 사용자 대화에서 SKILL.md를 추출하고 SkillBank로 관리하는 시스템 개요
출처: AutoSkill (arXiv:2603.01145) Figure 1

5개 prompt 모듈은 어떻게 한 시스템이 되는가

5개 모듈은 전면 경로와 배경 경로로 나뉘어 한 요청을 처리한다. 논문 §3.1은 AutoSkill이 query rewriting model, dialogue response model, skill extraction model, skill management judge, skill merge model, 그리고 embedding model을 쓴다고 설명한다. 이 중 사용자 응답 시간에 직접 영향을 주는 부분은 전면 경로다.

사용자가 요청을 보내면 query rewriting 모듈이 먼저 문맥 의존성을 줄인다. “그 형식으로 다시 해 줘” 같은 요청은 직전 대화 없이는 검색하기 어렵다. 재작성 모듈은 형식, 문체, 구조, 도메인 제약을 검색 가능한 문장으로 바꾼다.

그다음 retrieval 단계가 SkillBank에서 관련 스킬을 찾는다. §3.3은 dense semantic matching과 BM25 lexical matching을 함께 쓰고, λ·Sem + (1-λ)·BM25로 점수를 합친다고 설명한다. dense 검색은 의미가 비슷한 요구를 잡는다. BM25는 “excel”, “pandas”, “C++”처럼 표면 단어가 중요한 요구를 놓치지 않는다. 시스템은 점수가 임계값 η를 넘는 top-K 스킬만 응답 프롬프트에 넣는다. 이렇게 하면 모든 스킬을 한 번에 주입하지 않고, 현재 요청과 가까운 일부만 쓴다. 응답 생성 모델은 원래 사용자 요청과 선택한 스킬 맥락을 함께 받아 답한다.

배경 경로는 그 응답을 기다리게 하지 않는다. §4.4는 retrieval과 response generation이 현재 요청의 critical path에 남고, skill extraction과 maintenance는 비동기 배경 작업으로 진행한다고 설명한다. 대화가 끝난 뒤 시스템은 사용자 query에서 새 스킬 후보를 뽑는다. 후보는 바로 SkillBank에 들어가지 않는다. 먼저 embedding과 hybrid relevance로 가장 가까운 기존 스킬 이웃 하나를 찾는다. §3.4는 judge가 전체 bank를 대상으로 reasoning하지 않고, 현재 후보와 가장 관련 높은 memory neighbor 하나만 비교한다고 밝힌다. 이 설계는 단순하지만 현실적이다. 스킬이 수백 개로 늘어도 매번 전체를 논리 비교하지 않는다.

judge는 ADD, MERGE, DISCARD 중 하나를 고른다. 새 반복 행동이면 ADD다. 기존 스킬과 같은 계열이면 MERGE다. 일회성 요청이면 DISCARD다. MERGE를 고르면 merge 모듈이 새 제약과 예시를 기존 스킬에 통합하고 Bump()로 버전을 올린다.

그래서 AutoSkill은 “검색해서 잘 답한다”와 “대화에서 다시 배운다”를 같은 루프 안에 둔다. 전면 경로는 현재 응답 품질을 책임지고, 배경 경로는 미래 응답의 재료를 갱신한다. 이 분리가 없으면 개인화 시스템은 느려지거나 무분별하게 쌓인다. AutoSkill은 빠른 응답과 통제된 진화를 서로 다른 경로에 둔다. 그렇다면 추출 evidence는 왜 사용자 query만 쓰고 모델 응답은 안 쓰는가?

AutoSkill의 두 경로 — 전면 critical path는 query rewriter / hybrid retriever / response generator, 배경 비동기 경로는 skill extractor / judge / merger, embedding model이 양쪽을 지원하는 구성

Hybrid retrieval — 사용자 query를 dense semantic match와 BM25 lexical match로 동시에 풀고 λ로 점수를 합쳐 임계값 η 위의 top-K 스킬만 응답 프롬프트에 주입하는 흐름

추출 evidence는 사용자 query만, 왜 모델 응답을 안 쓰는가

사용자 query만 쓰는 이유는 개인화의 1차 신호가 사용자 의도에 있기 때문이다. AutoSkill 논문 §3.1은 이 점을 분명하게 쓴다. skill extraction stage는 사용자 query q_1...q_t만 쓰고, model response r_t를 extraction evidence로 쓰지 않는다.

이 선택은 작아 보이지만 자가진화 시스템에서 매우 중요하다. 모델 응답까지 학습 근거로 삼으면 시스템은 사용자가 실제로 요구한 것과 모델이 임의로 덧붙인 것을 구분하기 어려워진다. 예를 들어 사용자가 “짧게 고쳐 줘”라고 했는데 모델이 “전문적이고 설득력 있는 톤”을 덧붙여 답했다고 하자. 다음 추출 단계가 모델 응답을 근거로 삼으면, 사용자가 원한 것은 짧은 수정이었는데 시스템은 전문적 설득 톤까지 사용자 선호로 오해할 수 있다. 이런 오해가 여러 번 누적되면 스킬은 사용자보다 모델의 습관을 더 많이 반영한다.

논문이 말하는 training-free lifelong learning은 모델을 자기 응답으로 계속 강화하는 방식이 아니다. 경험에서 reusable skill을 뽑되, 그 경험의 핵심 근거를 사용자 쪽 발화로 제한한다. 이 제한은 drift를 줄인다.

사용자 query는 불완전하고 짧을 수 있다. 하지만 반복 의도는 query 쪽에 남는다. “표로 줘”, “한국어로”, “불릿 없이”, “코드는 실행 가능한 최소 예제로”, “엑셀 함수로” 같은 요구가 여러 세션에서 계속 나온다면, 그것이 개인화 스킬의 재료다. 모델 응답은 그 요구를 처리한 결과일 뿐이다. AutoSkill은 결과물보다 입력 요구를 더 신뢰한다.

이 설계는 스킬의 책임 범위도 좁힌다. 스킬은 모델이 과거에 한 답변의 스타일 복제가 아니다. 스킬은 사용자가 반복해서 요구한 행동 규칙의 추상화다. 그래서 추출 후보에는 confidence c가 붙고, judge가 ADD/MERGE/DISCARD를 결정한다. 이 단계에서 시스템은 “한 번 나온 요청”과 “앞으로 재사용할 가치가 있는 규칙”을 나눈다. 일회성 질문은 버린다. 기존 규칙을 조금 보강하는 신호는 병합한다. 전혀 새 반복 요구는 추가한다.

사용자 query만 근거로 삼는 방식은 보수적이다. 보수적이기 때문에 운영 가능한 평생 개인화에 맞다. 평생 학습은 무엇이든 기억하는 일이 아니다. 잘못된 기억을 덜 남기는 일이 더 중요하다. AutoSkill은 이 원칙을 추출 evidence 설계에 반영한다. 그렇다면 WildChat-1M 4개 subset에서 무엇이 측정 가능한 형태로 나왔나?

WildChat-1M 4개 subset에서 무엇이 측정 가능한 형태로 나왔나

측정 가능한 결과는 SkillBank의 크기, 태그, 범주, 버전 차이로 나온다. AutoSkill은 §5.1에서 WildChat 데이터셋 논문(arXiv:2405.01470)의 실제 ChatGPT 사용자 대화를 평가 재료로 쓴다. 논문은 8턴을 넘는 대화만 골라 Chinese GPT-3.5, English GPT-3.5, Chinese GPT-4, English GPT-4의 4개 subset을 만든다.

§5.2 Table 1에서 가장 큰 SkillBank는 English GPT-3.5 subset이다. 10,243개 대화, 267,681개 메시지에서 631개 스킬을 추출했다. 가장 작은 SkillBank는 Chinese GPT-4 subset이다. 1,145개 대화, 36,834개 메시지에서 224개 스킬을 추출했다. GPT-4 대화는 평균 길이가 30.23개에서 32.17개 메시지로 더 길었다고 논문은 보고한다.

이 숫자는 두 가지를 보여준다. 첫째, 실제 사용자 대화에는 반복 가능한 행동 규칙이 충분히 많다. 둘째, 스킬 수는 메시지 수와 단순 비례하지 않는다. 대화가 길다고 항상 더 많은 스킬이 나오는 것은 아니다. 반복성, 도메인 다양성, 사용자 요구의 재사용 가능성이 같이 작동한다.

Table 2와 Figure 2는 어떤 스킬이 많이 생기는지도 보여준다. normalized top tags는 python, javascript, excel, c++, creative writing 순이다. 범주는 Programming & Software Dev.가 가장 크고, Writing & Content Creation, General/Mixed, Data & AI/ML 순이다. 이 결과는 평생 개인화가 추상 취향 저장에만 머물지 않는다는 점을 보여준다. 사용자는 구체적인 작업 도메인에서 반복 요구를 만든다. 코드는 어떤 언어로 받을지, 데이터 처리는 어떤 도구로 할지, 문서 수정은 어떤 문체로 할지 같은 요구가 스킬 후보가 된다.

더 흥미로운 증거는 versioning이다. §5.2의 case study에서 English skill professional_text_rewrite는 v0.1.34까지 올라간다. 같은 시스템 안에서 Chinese skill 顶级心理咨询师는 v0.1.0에 머문다. 논문은 자주 재사용하는 productivity-oriented skills가 반복 병합과 정제를 더 많이 받는 반면, 전문적이거나 덜 자주 트리거되는 스킬은 초기 버전에 머물 수 있다고 설명한다.

이것이 AutoSkill의 핵심 데이터다. 스킬은 단순히 쌓이지 않는다. 스킬마다 다른 속도로 변한다. 사용자가 자주 요구하는 행동은 더 많은 merge를 거치고, 드물게 쓰는 행동은 오래 같은 버전으로 남는다. 평생 개인화의 단위가 파일이라면, version은 그 파일이 실제 사용에서 얼마나 살아 있었는지를 보여주는 흔적이다.

이 숫자들은 end-to-end 응답 품질 벤치마크를 대신하지 않는다. 논문 본문에서는 skill injection 전후의 응답 품질 개선 수치를 큰 비교표로 제시하지는 않는다. contribution은 실제 대화에서 어떤 스킬 구조가 생기고, 어떻게 유지되며, 버전이 어떻게 달라지는지를 보인 데 있다. 그렇다면 이 결과가 자가진화 스킬 연구에 무엇을 더하는가?

WildChat-1M 4개 subset SkillBank 비교 — English GPT-3.5 631 스킬에서 Chinese GPT-4 224 스킬까지, 대화 길이가 길어도 스킬 수가 더 적을 수 있다는 점을 보여주는 4 panel 통계

이 결과가 자가진화 스킬 연구에 무엇을 더하는가

AutoSkill이 더하는 것은 입력 축의 전환이다. Ctx2Skill(arXiv:2604.27660)은 긴 정적 문서에서 스킬을 뽑고, 여러 에이전트의 셀프플레이로 스킬을 개선하는 연구 메커니즘을 보여준다. AutoSkill은 같은 형식의 명시적 스킬을 실제 사용자 대화 기록에서 뽑는다. 하나는 문서 기반 자가진화다. 다른 하나는 사용자 경험 기반 자가진화다.

두 연구를 숫자로 직접 비교하면 안 된다. 평가 목표와 입력 데이터가 다르다. Ctx2Skill은 벤치마크 해결률 관점에서 스킬 생성과 개선을 본다. AutoSkill은 운영 환경의 개인화 관점에서 사용자별 SkillBank, 검색, 버전 관리, 배경 유지보수를 본다.

공통점은 더 중요하다. 둘 다 모델 파라미터를 업데이트하지 않고, 자연어 artifact를 통해 행동을 바꾼다. 이 방향은 LLM 에이전트의 평생 학습을 더 운영 가능한 형태로 만든다. 파라미터 학습은 강력하지만 배포 단위가 무겁다. 장기 메모리는 가볍지만 행동으로 이어지지 않을 수 있다. 명시적 스킬은 그 사이에서 읽을 수 있고 고칠 수 있고 주입할 수 있는 중간 단위를 제공한다.

AutoSkill의 설계는 특히 사용자 개인화에 맞다. 사용자별 SkillBank를 유지하고, 현재 query를 재작성하고, hybrid retrieval로 관련 스킬만 고르고, 응답 생성 뒤에는 배경에서 새 후보를 심사한다. 논문은 이 절차를 기존 LLM 스택 위에서 동작하는 플러그인 계층으로 설명한다. §4.1은 설계 원칙으로 명시적 스킬 표현, 통제된 연속 진화, 낮은 배포 마찰을 든다. 세 원칙 모두 같은 방향을 가리킨다. 개인화는 숨은 상태에 맡기지 않는다. 진화는 무조건 축적하지 않는다. 배포는 기존 시스템을 갈아엎지 않는다.

그래서 AutoSkill의 가장 중요한 메시지는 “스킬을 많이 만들 수 있다”가 아니다. “대화 경험을 스킬로 승격하고, 스킬을 파일로 관리하고, 파일을 검색해서 다음 행동에 쓰는 수명 주기를 만들 수 있다”다. 이 수명 주기가 있으면 사용자는 같은 요청을 매번 다시 적지 않아도 된다. 시스템은 반복된 요구를 스킬 후보로 만들고, 비슷한 기존 스킬과 비교하고, 필요하면 버전을 올린다. 자주 쓰는 스킬은 더 빨리 다듬고, 드문 스킬은 그대로 둔다.

이것이 평생 개인화의 현실적인 형태다. 모델이 사용자를 “안다”는 말보다, 어떤 파일이 어떤 버전으로 남아 있고 어떤 요청에서 다시 쓰였는지가 더 검증 가능하다. AutoSkill은 그 검증 가능한 단위를 제안한다. 다음 단계의 질문은 자연스럽다. 정적 문서에서 스킬을 고도화하는 연구 메커니즘과 사용자 대화에서 스킬을 추출하는 운영 시스템을 함께 두면, SkillBank는 단순한 메모리 저장소가 아니라 계속 시험하고 개선하는 행동 지식 저장소가 된다.

Ctx2Skill (정적 문서 → 다중 에이전트 셀프플레이 → 벤치마크 해결률) 과 AutoSkill (사용자 대화 trace → 5 prompt 모듈 → 평생 개인화) 두 자가진화 스킬 시스템의 입력 축 비교, 같은 SKILL.md 형식을 공유하는 점 강조

참고 자료

YouTube 영상

채널 보기
투영과 예측, 그리고 선형 결합 | 선형대수학
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
트라이(Trie)를 이용한 자동 완성 알고리즘 | Trie 자료구조 이야기
직교성과 벡터 투영 | 선형대수학
내적의 기하학적 의미와 코사인 유사도 원리 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
행렬의 가장 중요한 연산 - 행렬 곱셈 | 선형대수학