자신의 코드를 스스로 다시 작성하는 AI 에이전트를 구축했습니다 (~150줄)
요약
테스트 점수가 향상된 코드 변경 사항만을 채택하여 스스로를 개선하는 소규모 Darwin Gödel Machine 구현 사례를 소개합니다. 이 에이전트는 수학적 증명 대신 테스트 기반의 검증 방식을 사용하여, 초기 1개의 작업만 수행하던 상태에서 8개 모두를 수행할 수 있는 상태로 자가 진화했습니다.
핵심 포인트
- 테스트 기반의 피드백 루프를 통한 코드 자가 수정 메커니즘 구현
- 수학적 증명 대신 실행 가능한 테스트 결과로 개선 여부 판단
- AI 코딩 어시스턴트의 도구 개선을 통한 벤치마크 성능 향상 가능성 제시
- 매우 가볍고 빠른 실행 환경(노트북, 1초 미만) 구축
검증 가능한 방식으로 더 높은 점수를 기록한 변경 사항만을 유지하며 스스로를 편집하는 아주 작은 Darwin Gödel Machine.
요약 (TL;DR): 저는 _자기 자신_을 개선하는 작은 프로그램을 만들었습니다. 이 프로그램은 실패하는 작업들을 살펴보고, 이를 해결하기 위해 자신의 코드를 편집하며, 해당 변경 사항이 테스트에서 실제로 더 높은 점수를 기록할 때만 그 변경을 유지합니다. 이 프로그램은 8개 중 1개의 작업을 통과하던 상태에서 8개 중 8개를 통과하는 상태로 발전했습니다. 그리고 그 수정 사항을 작성한 사람은 프로그램 자신 외에는 아무도 없습니다. 노트북에서 1초 미만으로 실행됩니다. 화려한 하드웨어나 API 키도 필요 없습니다.
오래된 꿈: 스스로 개선되는 소프트웨어
보통 소프트웨어는 우리가 개선할 때만 더 좋아집니다. 코드를 작성하고, 버그를 찾고, 이를 수정하고, 다시 배포합니다. 프로그램은 스스로 개선되지 않습니다.
사람들은 수십 년 동안 "스스로 개선되는 소프트웨어"를 원해 왔습니다. 고전적인 버전("Gödel Machine"이라 불리는)에는 구현을 불가능하게 만드는 한 가지 규칙이 있었습니다. 프로그램이 자신의 코드 한 줄을 변경하기 전에, 그 변경이 도움이 될 것임을 _수학적으로 증명(mathematically prove)_해야 한다는 것이었습니다. 실제 코드에 대해 이를 증명하는 것은 기본적으로 불가능하기 때문에, 이 아이디어는 결코 작동하지 않았습니다.
2025년, 연구자들은 **Darwin Gödel Machine**을 통해 이를 우회하는 방법을 찾아냈습니다. 그들은 "먼저 증명하라"는 규칙을 버리고, 모든 엔지니어가 이미 신뢰하고 있는 방식으로 대체했습니다:
변경 사항을 시도해 보세요. 테스트를 실행하세요. 점수가 올라갔다면 유지하세요. 그렇지 않다면 버리세요.
그게 전부입니다. 이것은 기본적으로 우리 모두가 일하는 방식입니다. 수정을 하고, 테스트 스위트(test suite)를 실행하고, 통과하는 것을 유지하는 것이죠. 반전은 _프로그램_이 직접 수정을 한다는 점입니다. 실제 논문에서, 이를 통해 AI 코딩 어시스턴트가 자신의 도구(tooling)를 개선하여 실제 GitHub 이슈로 구성된 어려운 벤치마크에서 해결률을 **20%**에서 **50%**로 끌어올릴 수 있었습니다.
저는 이것이 실제로 일어나는 것을 보고 싶었기에, 제가 만들 수 있는 가장 작은 버전을 구축했습니다.
10초 버전
| 시작 (Start) | 스스로 개선한 후 (After improving itself) | |
|---|---|---|
| 할 수 있는 일 | uppercase (대문자 변환)만 가능 | 스스로 6가지 기술을 더 학습함 |
| ... |
Start: ███░░░░░░░░░░░░░░░░░░░░░ 1/8 (알고 있는 것: uppercase)
+reverse ██████░░░░░░░░░░░ 2/8
+dedup_csv █████████░░░░░░░░░ 3/8
...
작동 원리 (전체 과정)
오직 세 가지 요소로만 구성됩니다.
1. "에이전트 (agent)"는 단순히 기술들의 주머니입니다. 각 기술은 텍스트를 대문자로 바꾸거나(uppercase), 뒤집거나(reverse), 리스트를 정렬하는(sort) 등의 아주 작은 함수입니다. 처음에는 거의 아무것도 모르는 상태로 시작합니다.
2. 정답이 알려진 테스트. 모든 작업에는 정답이 있으므로, 점수를 확인하는 것은 단순한 일치 여부 확인(output == expected)입니다. 사람이 채점하거나 다른 AI가 판단하지 않습니다. 그저: 정답을 맞혔는가 틀렸는가? 만을 따집니다. (이 "체커(checker)를 작성한 뒤 측정한다"는 아이디어는 오늘날의 추론 모델 (reasoning models) 뒤에 숨겨진 것과 동일한 트릭입니다.)
3. 루프 (The loop). 실패하는 부분을 살펴보고, 이를 해결하기 위해 기술을 하나 추가하고, 테스트를 다시 실행한 뒤, 점수가 올라갔을 때만 변경 사항을 유지합니다. 또한 개선된 모든 버전을 저장하므로, 나중에 막혔을 때 다시 시작하기 위해 이전 버전 중 어느 것이든 가지를 쳐서(branch off) 나아갈 수 있습니다.
new_version = old_version + add_a_skill(things_it_is_failing)
if score(new_version) > score(old_version): # 테스트 점수가 실제로 향상되었는가?
keep(new_version) # 예 -> 저장하고 이를 바탕으로 구축
멋진 점: 작은 수정이 큰 변화를 일으킵니다
에이전트가 추가하는 기술 중 하나인 "입력값 정리 (clean up the input)" (이상한 공백 제거)는 그 자체로는 아무런 일도 하지 않습니다. 하지만 에이전트는 이전에 `
이것이 바로 핵심을 축약한 모습입니다. 에이전트는 단순히 기능을 추가하는 것이 아닙니다. 에이전트는 스스로가 _더 나아지는 능력(getting better)_을 향상시키고 있습니다. 지루하고 사소한 수정 사항이 나중에 이루어질 수정 사항들이 작동할 수 있게 만드는 디딤돌이 됩니다. 실제 연구에서도 동일한 현상이 대규모로 관찰됩니다. AI는 "몇 가지 솔루션을 시도하고 가장 좋은 것을 선택하라"와 같은 도우미(helpers)를 스스로 발명하며, 이는 모든 미래의 수정 작업을 더욱 효과적으로 만듭니다.
이것이 앞으로 나아갈 방향이라고 생각하는 이유
지난 10년 동안 AI를 개선하는 방법은 모델을 더 크게 만드는 것이었습니다. 새로운 아이디어는 실행되는 동안 스스로를 개선하게(improve itself while it runs) 만드는 것입니다:
- 이 포스트 — 자신의 코드를 다시 작성하는 에이전트.
- "Language Models Need Sleep" (2026) — 오프라인 "수면(sleep)" 시간 동안 자신의 메모리를 정리하는 에이전트.
- 크기가 커지는 대신 더 깊게 생각하는(think harder) 소형 모델.
공통된 맥락은 다음과 같습니다. 개선의 중심이 _우리가 모델을 재학습시키는 것_에서 _프로그램이 스스로를 개선하는 것_으로 이동하고 있으며, 각 변경 사항이 유효한지를 알려주는 간단한 테스트가 그 역할을 합니다. 스스로를 편집하는 소프트웨어는 고정된 프로그램이라기보다 성장하는 무언가처럼 느껴지기 시작합니다.
직접 해보기 (1분 미만 소요)
git clone https://github.com/Shridhar-2205/living-software
cd living-software/01-self-rewriting-agent
python demo_cli.py # 점수가 1/8 → 8/8로 올라가는 것을 확인하세요
...
안전성에 대한 솔직한 언급을 하자면, 실제 자기 재작성(self-rewriting) 에이전트는 자신이 작성한 코드를 실행하므로 위험할 수 있습니다. 제 버전에서는 "편집(edits)"이 안전한 기술(skills)의 고정된 목록에서만 이루어지므로 위험한 코드가 실행되지 않습니다. 즉, _루프(loop)_는 연구와 일치하지만, _위험(risk)_은 제로입니다. (실제 연구용 에이전트는 바로 이 이유 때문에 샌드박스(sandbox) 내부에서 실행됩니다.)
요점 (The takeaway)
과거의 꿈은 코드를 변경하기 전에 수학적 증명이 필요했습니다. 새로운 버전은 단지 **테스트(test)**만 있으면 됩니다. 만약 "이것이 더 나아졌다"라고 말해줄 수 있는 체크(check)를 작성할 수 있다면, 프로그램이 스스로를 개선하도록 내버려 둘 수 있으며, 여러분이 작성하지 않은 영리한 해결책들을 찾아내는 과정을 지켜볼 수 있습니다.
_Cisco의 Outshift 소속 시니어 소프트웨어 엔지니어인 Shridhar Shah가 작성했습니다. 저는 AI 에이전트(AI agents), 검색, 그리고 그것들이 어떻게 "생각하는지"에 대해 연구합니다. 이 글은 소프트웨어가 마치 살아있는 것처럼 행동하기 시작하는 것에 관한 6부작 시리즈인 "살아있는 소프트웨어를 향하여 (Toward Living Software)"의 첫 번째 파트입니다. GitHub · LinkedIn
출처: Zhang, Hu, Lu, Lange, Clune, "Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents," arXiv:2505.22954 (2025) — SWE-bench 점수가 20.0%에서 50.0%로 향상되었음을 보고함.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기