10 분 소요

hits

AI 시스템이 스스로 지능을 개선하는 재귀적 자기 개선(RSI) 개념은 수십 년 전부터 논의되었다. 초기에는 AI가 스스로를 더 나은 기계로 설계하는 것을 상상했으나, 현대 AI에서는 모델 자체의 가중치를 직접 개선하거나, 더 넓게는 훈련 파이프라인배포 시스템을 향상하여 후속 모델의 성능을 높이는 방식으로 발전한다. 이 과정에서 하니스(harness)는 AI 배포의 핵심 요소로 부상한다.

하니스란 기반 모델을 둘러싸고 실행을 조율하는 시스템이다. 모델이 생각하고 계획하는 방식, 도구를 호출하고 행동하는 방식, 컨텍스트를 인식하고 관리하는 방식, 결과물을 저장하고 평가하는 방식을 결정한다. 본 글은 이러한 하니스 공학이 AI의 자기 개선에 어떻게 기여하는지 살펴본다.

AI 자기 개선을 위한 하니스 공학

하니스 설계 원칙

초기 에이전트 프레임워크가 LLM + 메모리 + 도구 + 계획 + 행동으로 구성되었다면, 하니스 공학은 여기에 워크플로 설계, 평가, 권한 제어, 영구 상태 관리 등을 추가한다. 이는 프롬프트 템플릿 수준을 넘어 런타임 및 소프트웨어 시스템 설계에 가깝다. 하니스는 복잡한 로직을 캡슐화하면서도 인터페이스를 단순하게 유지해야 한다.

하니스 설계의 세 가지 핵심 패턴은 다음과 같다.

패턴 설명
워크플로 자동화 모델이 작동하고, 테스트하며, 반복할 수 있는 워크플로를 정의한다. 계획, 실행, 관찰/테스트, 개선, 재실행의 목표 지향적 루프를 따르며, 모델이 자신의 실행 궤적과 실패 사례를 분석하여 개선한다.
파일 시스템을 영구 기억장치로 활용 장기 실행 에이전트 시스템에서 풍부한 상태와 결과물을 단순하게 제어하는 방식이다. 하니스는 모든 워크플로와 로그를 컨텍스트에 보관하지 않고 파일에 영구적인 상태를 저장한다. 모델이 bash 명령어를 통해 파일 시스템을 읽고, 쓰고, 편집하는 능력이 핵심이다.
하위 에이전트 및 백엔드 작업 하니스는 여러 하위 에이전트를 병렬로 실행하고 백엔드 작업을 모니터링할 수 있다. 이는 주 에이전트가 여러 가설을 탐색하거나, 실험을 병렬로 수행하거나, 주 컨텍스트를 오염시키지 않고 하위 작업을 위임할 때 유용하다. 병렬 실행의 결과물은 파일로 저장되어 검사 및 복구가 가능하다.

코딩 에이전트 하니스 사례

주류 코딩 에이전트(예: Claude Code, Codex)의 핵심 인터페이스는 안정화되었다. 이들은 다음과 같은 루프를 사용한다.

계획 → 행동 → 관찰/테스트 → 성찰 → 계획 업데이트

코딩 에이전트는 다양한 도구에 접근하여 인간 개발자가 IDE를 사용하는 것처럼 저장소에서 문제를 개발하고 디버깅한다. 코딩 에이전트가 활용하는 주요 도구 유형은 다음 표와 같다.

그룹 도구 정의
파일 시스템 파일 탐색 (glob, grep, ls), 파일 읽기 (read, read_many), 파일 수정 (write, edit, multi_edit, apply_patch)
셸 실행 명령어 실행 (bash, PowerShell)
입출력(IO) lsp, Git 도구 (git_status, git_diff, git_commit)
외부 컨텍스트 MCP 도구, 스킬, 웹 검색 (web_search, web_fetch, 브라우저 도구)
결과물 문서/이미지 읽기, HTML/이미지 생성
백엔드 프로세스 CronCreate, CronDelete, CronList
에이전트 위임 spawn_agent, resume_agent, wait_agent, list_agents, close_agent, interrupt_agent

하니스와 핵심 지능의 관계

장기적으로 재귀적 자기 개선이 하니스 공학에 얼마나 의존할지는 불확실하다. 그러나 단기적인 경로에서는 모델이 직접 자신의 가중치를 수정하는 방식보다, 하니스 엔지니어링이 메타-방법론(답변 자체를 개선하는 것이 아니라 더 나은 답변을 얻는 방식을 개선하는 기계장치를 개선) 방향으로 진화할 가능성이 크다.

성숙한 하니스는 모델 자기 개선 루프를 위한 자동 연구를 가능하게 하며, 더 똑똑한 모델은 하니스의 과도한 설계를 방지하고 시스템의 지속 가능성을 유지한다. 궁극적으로 많은 하니스 개선 사항이 핵심 모델 동작으로 내재화될 수 있다. 그러나 외부 컨텍스트 및 도구와의 인터페이스는 여전히 필요하다. 이는 프롬프트 엔지니어링이 모델 지능 향상으로 인해 중요성이 낮아졌지만, 목표, 제약, 컨텍스트, 평가를 지정하는 필요성은 사라지지 않은 것과 유사하다.

하니스 최적화 방안

하니스 시스템에서 최적화 대상은 명령어 프롬프트에서 시작하여 구조화된 컨텍스트, 워크플로, 하니스 코드, 그리고 최종적으로 최적화 도구 코드로 발전한다. 모델이 더욱 지능적이고 강력해지면서, 더 복잡한 목표와 일반적인 방법론으로 나아간다.

컨텍스트 엔지니어링

에이전트 작업의 실행 기간이 길어질수록 모든 도구 응답과 모델 생성물을 컨텍스트에 단순히 추가하는 방식은 빠르게 통제 불능 상태에 이른다. 컨텍스트 엔지니어링은 LLM을 위한 구조화되고 간결한 컨텍스트를 구축하고 영구 상태를 관리하는 계층이다.

컨텍스트 엔지니어링의 발전 과정은 다음과 같다.

접근 방식 주요 개념 및 작동 방식
ACE (Agentic Context Engineering) 컨텍스트를 길어지는 프롬프트 대신 진화하는 플레이북으로 취급한다.
1. 생성기: 불릿 포인트를 참조하여 작업 궤적을 생성한다.
2. 성찰자: 성공 및 실패 궤적에서 통찰력을 추출한다.
3. 큐레이터: 증분적, 항목화된 항목으로 구조화된 컨텍스트를 업데이트한다.
큐레이터는 전체 프롬프트 대신 (식별자, 설명) 형태의 구조화된 불릿 컬렉션을 출력하며, 이는 확정적 로직으로 컨텍스트 로그북에 병합된다.
MCE (Meta Context Engineering) 컨텍스트 관리 메커니즘(어떻게 관리할지)과 컨텍스트 콘텐츠(무엇이 컨텍스트에 포함될지)를 분리한다. 메타-최적화 수준에서는 스킬 진화를 실행하고, 기본 수준에서는 컨텍스트 최적화를 실행한다.
스킬은 정적 구성 요소(프롬프트, 지식 베이스)와 동적 연산자(검색, 선택, 필터링)를 정의한다. 내외부 루프 최적화를 통해 주어진 스킬에 대한 최적 컨텍스트를 찾고, 최적 컨텍스트를 제공하는 최적 스킬을 탐색한다.
메타 수준 에이전트가 이전 스킬들을 교차하여 새로운 스킬을 생성하고, 기본 수준 컨텍스트 엔지니어는 해당 스킬에 따라 컨텍스트 함수를 학습한다.
Meta-Harness 하니스 최적화를 위한 하니스이다. 저장, 검색, 모델에 제시할 정보를 결정하고 최적화하는 코드 자체를 최적화 대상으로 삼는다. 새로운 하니스를 제안하는 주체는 코딩 에이전트이며, 파일 시스템을 통해 전체 실행 기록에 접근한다. 코딩 에이전트가 grep이나 cat 명령어를 사용하여 기록을 읽는다. 새로운 하니스를 반복적으로 생성하고, 검증된 하니스만 유지한다. 이는 인간 엔지니어가 사용하는 설계 공간을 강력한 코딩 에이전트도 활용할 수 있음을 보여준다.

워크플로 설계

하니스 공학에서의 워크플로 설계는 도메인 전문가가 수동으로 만들기도 한다. 예를 들어, AI 과학자 시스템은 연구 아이디어를 제안하고, 코드를 작성하고, 실험을 실행하고, 결과를 분석하고, 논문을 작성하고, 동료 심사를 수행하는 파이프라인을 구축한다. ScientistOne은 모든 주장이 증거 소스에 추적 가능하도록 검증 가능성을 핵심 제약 조건으로 삼는다. Autodata 에이전트는 훈련 및 평가 데이터를 생성하는 데이터 과학자로 작동한다.

워크플로 설계 공간이 방대하다는 점에서 이는 수동 작업 대신 알고리즘을 통한 탐색 문제로 접근할 수 있다.

  • ADAS (Automated Design of Agentic Systems): 에이전트 설계를 최적화 문제로 공식화하여, 메타-에이전트가 에이전트 워크플로의 새로운 설계를 제안한다. 단순한 에이전트(CoT, self-refine)로 시작하여, 메타-에이전트가 기존 솔루션을 바탕으로 새로운 워크플로를 코드로 구현한다. 초안은 두 단계의 자체 개선(self-refine)을 거쳐 참신성을 확인하고, 평가 후 성공적인 후보는 아카이브에 추가한다.
  • AFlow: 에이전트 워크플로를 그래프로 표현한다. 노드는 LLM 호출 액션을, 엣지는 코드의 논리 연산을 구현한다. 몬테카를로 트리 탐색(MCTS)을 사용하여 워크플로를 최적화한다. LLM은 기존 워크플로의 평가 성능을 조건으로 수정된 워크플로를 생성하고, 이를 실행 및 평가하여 개선 사항이 있는 경우 트리에 다시 추가한다. AFlow는 수동 설계 및 ADAS보다 뛰어난 성능을 보인다.

자기 개선 하니스

컨텍스트 엔지니어링이나 워크플로 설계는 하니스의 한 부분에 불과하다. 컨텍스트 관리 로직, 워크플로, 권한 및 다른 많은 하니스 구성 요소를 함께 최적화해야 한다. 하니스는 프롬프트, 도구 호출, 하위 에이전트, 제어 흐름, 메모리 및 워크플로 로직이 함께 작동하는 방식을 프로그래밍하는 코드이다. LLM이 에이전트를 실행하는 코드를 최적화할 수 있다면, 수동으로 작성된 프롬프트보다 훨씬 더 큰 설계 공간에 접근한다.

STOP (Self-Taught Optimizer)

STOP은 재귀적 스캐폴딩 개선의 초기 사례다. 목표는 솔루션 s를 직접 개선하는 것이 아니라, s를 개선하는 개선자(improver) 함수 I 자체를 개선하는 것이다.

단계 설명
메타-유틸리티 정의 개선자 함수 I가 다운스트림 작업 컬렉션에서 얻는 평균 유틸리티를 메타-유틸리티 û(I)로 정의한다.
자기 개선 업데이트 메타-유틸리티로 측정된 I의 성능을 기반으로 새로운 버전의 I_t를 얻는다. 즉, I_t = I_t-1(û, I_t-1; M)이다. 개선자는 스스로를 평가하고, 개선하여 새로운 개선자를 생성한다.
STOP은 유전 알고리즘, 분해 및 부분 개선, 다중-암드 프롬프트 밴딧, 시뮬레이티드 어닐링 등 다양한 전략을 발견한다.

주의할 점은 STOP이 GPT-4와 같은 강력한 모델에서는 평균 다운스트림 성능을 개선했지만, GPT-3.5나 Mixtral 같은 약한 모델에서는 오히려 성능이 저하되었다는 것이다. 재귀적 구조만으로는 충분하지 않으며, 기본 모델이 메커니즘을 개선할 만큼 충분한 능력을 지녀야 한다.

Self-Harness

Self-Harness는 LLM 에이전트가 제안-평가-수락 루프를 통해 자신의 하니스를 개선한다.

단계 설명
약점 탐색 실패 사례를 검증 기반 실패 패턴으로 클러스터링한다. 현재 하니스 h_t를 사용하여 작업을 평가하고, 실행 추적을 수집하여 분석한다. 오류 로그에 나타나는 표면적인 오류(예: 시간 초과)는 같아 보여도 근본 원인이 다를 수 있으므로, 관련 에이전트 행동의 인과적 상태 및 추적을 통해 노출된 추상적 에이전트 메커니즘을 포함하는 풍부한 정보의 실패 기록이 필요하다.
하니스 제안 탐색된 실패 패턴을 기반으로 제한된 하니스 수정안을 제안한다. h_t 하에서 동일 모델이 제안자로 작동한다. 모델에는 현재 하니스의 편집 가능한 영역, 평가 시스템에서 얻은 실패 패턴, 보존해야 할 성공 행동 기록, 이전에 시도된 수정 요약 등의 제한된 제안 컨텍스트가 제공된다. 하니스 수정안은 반복적인 오류 패턴을 우선시하고, 광범위한 변경보다는 좁은 변경으로 해결 가능해야 한다. 또한 수정 후보는 독특하고 다양해야 한다.
제안 검증 및 병합 후보 수정안은 약점이 해결되었는지 테스트하는 D_in 및 알 수 없는 문제가 도입되었는지 확인하는 D_out 데이터셋에 대한 회귀 테스트를 통해 평가한다. 두 데이터셋 모두에서 회귀가 없는 경우에만 후보가 수락된다. 수락된 후보는 병합되어 h_t+1을 생성하며, 거부된 후보는 현재 하니스를 변경하지 않고 기록된다.
Self-Harness는 다양한 기본 모델의 약점을 겨냥한 모델별 하니스 지침을 학습하고, 외부 통과율을 개선한다. 그러나 프로그램이 운영체제 시스템을 편집하도록 허용하는 것은 추상화 경계를 침해할 수 있으며, 보상 해킹과 같은 문제도 남아있다. 편집 가능한 영역은 적절히 설계되어야 하고, 권한 제어 및 보안 계층은 루프 외부에 존재해야 한다.

진화 탐색

진화 탐색은 자연 선택에서 영감을 받은 최적화 방법이다. 솔루션 집단을 변이시키고 “적합도”가 높은 것만 유지하여 진화시킨다. 탐색 공간이 광범위하거나 불규칙할 때, 또는 직접 경사 최적화는 어렵지만 솔루션 평가가 쉬울 때 유용하다. 하니스 탐색은 이 방식에 적합하다.

과거에는 프롬프트 엔지니어링에 진화 탐색이 사용되었다. Promptbreeder는 풍부한 변이 작업을 통해 작업별 프롬프트를 최적화하며, 프롬프트 변이 명령어 자체도 진화를 통해 개선한다. GEPA는 성찰 기반 프롬프팅과 진화 탐색을 결합하여 시행착오 궤적에 대한 자연어 성찰을 통해 프롬프트 업데이트를 제안한다.

최근에는 코딩 에이전트 시스템에도 적용된다.

  • AlphaEvolve: 코딩 에이전트 진화 탐색 시스템이다. 후보 프로그램 풀을 저장하고, 고정된 LLM에 프롬프트를 주어 개선을 위한 차이를 생성한다. 시스템은 자식 프로그램을 반복적으로 평가하고 성공적인 프로그램을 유지하면서 시간이 지남에 따라 더 나은 솔루션을 발견한다. 프롬프트에는 부모 프로그램, 결과, 지침, 메타 정보가 포함된다. 코딩 에이전트는 전체 저장소에 접근하지만, 개선할 코드 영역은 명시적으로 표시한다.
  • DGM (Darwin Gödel Machine): LLM 기반 코딩 에이전트를 통해 편집 가능한 하니스 코드 저장소의 진화를 명시적으로 목표로 한다. 이 에이전트는 자신의 하니스를 수정할 수 있다. 각 반복에서 성능에 비례하고 자식 수에 반비례하는 확률로 부모 에이전트를 선택하여 수정하고 새로운 에이전트를 생성한다. 선택된 부모 에이전트는 자신의 벤치마크 평가 로그를 검토한 후, 자신의 하니스 코드베이스를 개선하여 새로운 버전의 코딩 에이전트를 생성한다. 새로운 코딩 에이전트는 평가를 거쳐 충분히 높은 성능을 보이는 에이전트만 풀에 다시 추가된다. DGM은 고정된 모델 하에서 하니스 진화를 수행하며, 간단한 초기 하니스 구성으로도 수작업 에이전트와 비견되거나 더 나은 성능을 보인다.

이러한 방법들은 후보 솔루션이 자동으로 평가 가능하고 적합도 정량화가 쉬운 작업(예: 행렬 곱셈, GPU 커널 최적화)에서 잘 작동한다. 그러나 평가가 느리거나 모호하거나 대부분 휴리스틱 기반인 도메인에서는 어려움을 겪는다.

모델 가중치와의 공동 최적화

완전한 자기 개선을 위해서는 모델이 자신의 가중치를 동시에 업데이트하는 것이 허용된다. 가중치 업데이트는 모델 훈련 파이프라인의 개선 또는 테스트 시점에서의 지속적 학습을 통해 구현할 수 있다.

SIA는 하니스 개선과 모델 매개변수 업데이트를 동일한 최적화 루프에 결합하려는 초기 시도다.

  • 메타-에이전트: 초기 하니스를 제안한다.
  • 작업별 에이전트: 작업을 실행한다.
  • 피드백-에이전트: 최근 궤적을 기반으로 하니스를 업데이트할지, 모델 가중치를 업데이트할지 결정한다.

SIA는 하니스 개선과 모델 파라미터 업데이트를 결합하지만, 사용된 모델 간의 능력 차이 등 실험 설정의 난해함으로 인해 아직은 잠정적인 증거를 제시한다. 훈련 안정성 및 굿하트 효과(Goodhart effect)와 같은 많은 도전 과제가 남아있다.

남아있는 과제

AI 과학자 연구는 전문가가 설계한 하니스가 연구 논문 작성 형태의 자동 연구 루프 상당 부분을 조율할 수 있음을 보여준다. 그러나 논문 생산이 과학적 발견과 동일하지는 않다. 시스템은 그럴듯한 원고를 작성하면서도 조작된 인용, 구현 편향 또는 약한 실험 결과를 포함할 수 있다.

LLM이 최소한의 스캐폴딩과 기본 도구만으로 연구 아이디어에서 논문까지 발전할 수 있는지 테스트하는 연구에서, 다음과 같은 여섯 가지 반복적인 실패 모드가 관찰되었다.

  1. 훈련 데이터 기본값 편향: 오래된 라이브러리, 오래된 명령, 표준 형식 또는 실제 저장소나 데이터셋에 근거하지 않은 가정을 사용한다.
  2. 실행 압력 하의 구현 편향: 구현이 기술적으로 복잡해질 때, 모델은 제안된 방법 대신 일반적인 더 간단한 솔루션으로 이동한다.
  3. 메모리 및 컨텍스트 저하: 장기 프로젝트는 로그를 영구적인 결과물로 작성하지 않으면 중요한 세부 사항을 잃는다.
  4. 지나친 낙관주의: 모델은 노이즈가 많거나 실패한 실험에도 불구하고 성공을 선언한다.
  5. 불충분한 도메인 지능: 모델은 구현 복잡성 예측, 실험 결과의 타당성 판단, 중요한 기준선 파악과 같은 암묵적인 전문 지식이 부족하다.
  6. 약한 과학적 판단: 실험은 실행 가능하지만 올바른 질문에 답하지 못한다.

완전한 재귀적 자기 개선을 향한 상당한 진전이 있었지만, 몇 가지 병목 현상이 남아있다.

  • 약하고 모호한 평가자: 많은 연구 주장과 실제 작업에는 빠르고 정확한 검증자가 없다. 현재의 자기 개선 루프는 평가 지표가 측정 가능하고 객관적인 작업(강화 학습과 유사)에서 가장 잘 작동한다. 연구의 판단, 참신성, 장기적인 과학적 가치는 측정하기 훨씬 어렵다.
  • 컨텍스트 및 메모리 수명 주기: AI 에이전트가 더욱 자율적이고 독립적이 됨에 따라 메모리는 증가한다. 유용한 하니스는 장기 컨텍스트 생성의 기존 한계를 보완하면서 장기 작업의 성공을 극대화하기 위해 컨텍스트와 메모리를 관리해야 한다. 컨텍스트 엔지니어링은 소프트웨어 시스템 계층에 머무르지 않고 지능의 핵심 부분이 될 것이다.
  • 부정적 결과: 연구자들은 성공적인 결과를 출판하도록 동기 부여되므로 문헌은 성공에 편향된다. 방대한 데이터(주로 인간이 생성)로 훈련된 LLM은 가설을 포기할 시점, 부정적 결과를 보고할 시점, 또는 데이터의 성공 대 실패 사례 불균형으로 인해 실패를 인정할 시점을 결정하는 데 어려움을 겪을 수 있다.
  • 다양성 붕괴: 진화적 루프와 강화 학습 루프는 알려진 고보상 패턴을 악용하는 경향이 있다. 집단이 동일한 솔루션의 변형으로 붕괴하는 것을 막는 메커니즘이 필요하다. 이는 현재 평가자 하에서는 최선의 경로가 처음에는 더 나빠 보일 수 있는 개방형 연구에 특히 중요하다.
  • 보상 해킹: 자기 개선 루프는 주어진 신호를 최적화한다. 단위 테스트에서 보상이 오면 에이전트는 테스트에 과적합할 수 있고, 심사 모델에서 오면 해당 심사 모델에 특화된 보상 해킹 트릭을 배울 수 있다. 평가자와 권한 제어는 하니스를 진화시키는 루프 외부에 존재해야 하며, 중요한 결정 지점에서는 보류 테스트, 추적 감사 및 인간 검토가 필요하다.
  • 장기적인 성공: 최적화의 외적 루프는 훈련 샌드박스에서 시뮬레이션할 수 있는 개별 실행 외부의 보상에 따라 작동한다. 코딩 에이전트를 예로 들면, 단기적인 최적화 목표가 많다. 당면한 작업을 완료하는 데는 능숙하지만, 수백 또는 수천 명의 엔지니어가 공동으로 유지하는 저장소의 장기적인 건전성을 어떻게 보호해야 할지는 덜 명확하다.
  • 인간의 역할: 인간은 루프에서 제거되는 것이 아니라, 스택의 상위로 이동해야 한다. 즉, 적절한 시기와 적절한 추상화 수준에서 감독을 제공해야 한다. 위에서 언급된 많은 과제는 인간의 피드백과 조정을 필요로 한다.

진화생물학·공진화의 시선으로 보면

AI 시스템의 자기 개선 과정은 진화생물학의 공진화(Coevolution) 현상과 유사한 구조를 지닌다. 하니스와 기반 모델이 서로의 성능을 개선하도록 영향을 주고받는 모습은, 자연계에서 두 종이 상호작용하며 각각의 진화적 경로를 형성하는 관계와 비슷하다. 하니스가 모델의 능력을 최적화하는 “환경” 역할을 하고, 모델은 이 환경에 적응하며 동시에 환경(하니스) 자체를 변화시키는 “진화적 압력”을 가한다. 이 복잡한 상호작용은 결국 더 강력하고 적응력 있는 시스템으로 이끈다.

출처

공유