학습과 적응은 에이전트가 사전에 정해진 한계를 넘어 발전하게 하는 힘입니다. 경험을 쌓고 환경과 상호작용하면서 스스로 성능을 개선해, 새로운 상황에 효과적으로 대응하고 지속적인 수동 개입 없이도 성능을 최적화합니다.
에이전트는 새로운 경험과 데이터를 바탕으로 사고방식, 행동, 또는 지식을 바꾸면서 학습하고 적응합니다. 이를 통해 단순히 지시를 따르는 수준에서 벗어나 시간이 지날수록 더 똑똑해집니다.
학습 방식의 스펙트럼
| 방식 | 내용 | 적합한 에이전트 |
|---|---|---|
| 강화 학습 | 행동에 대해 긍정적 결과에는 보상을, 부정적 결과에는 페널티를 받으며 최적의 행동을 익힌다 | 로봇 제어, 게임 플레이 |
| 지도 학습 | 레이블이 달린 예시로 입력과 원하는 출력을 연결하는 법을 배운다 | 이메일 분류, 추세 예측 |
| 비지도 학습 | 레이블 없는 데이터에서 숨은 연결과 패턴을 찾아 환경의 내부 구조에 대한 지도를 형성한다 | 특정 지침 없이 데이터를 탐색 |
| 퓨샷/제로샷 학습 | LLM 기반 에이전트가 최소한의 예시나 명확한 지시만으로 새 작업에 빠르게 적응한다 | 낯선 명령이나 상황에 신속 대응 |
| 온라인 학습 | 새로운 데이터가 들어올 때마다 지식을 지속적으로 갱신한다 | 연속적으로 유입되는 데이터 스트림 처리 |
| 기억 기반 학습 | 과거 경험을 떠올려 유사한 상황에서 현재 행동을 조정한다 | 기억을 불러올 수 있는 에이전트(8장) |
에이전트는 학습 결과에 따라 전략, 이해 방식, 또는 목표를 바꾸며 적응합니다. 예측하기 어렵거나, 변화하거나, 처음 접하는 환경에서 작동해야 하는 에이전트에게 특히 중요합니다.
PPO와 DPO
이 장은 강화 학습 알고리즘 두 가지를 비교합니다. LLM을 사람의 선호에 맞게 정렬(align)하는 방식이 어떻게 단순해졌는지에 대한 이야기입니다.
PPO — 안전 브레이크가 달린 학습
근위 정책 최적화(Proximal Policy Optimization, PPO) 는 로봇 관절 제어나 게임 캐릭터 조종처럼 연속적인 동작 범위를 갖는 환경에서 에이전트를 훈련하는 알고리즘입니다. 목표는 에이전트의 의사결정 전략, 즉 정책(policy) 을 안정적이고 신뢰할 수 있는 방식으로 개선하는 것입니다.
핵심 아이디어는 정책을 작고 신중하게 업데이트하는 것입니다. 성능이 무너질 만큼의 급격한 변경은 피합니다.
- 데이터 수집: 현재 정책으로 환경과 상호작용하며 경험(상태, 행동, 보상)을 모은다.
- “대리” 목적 함수 평가: 앞으로의 정책 업데이트가 기대 보상을 어떻게 바꿀지 계산한다. 단순히 보상을 최대화하는 대신 “클리핑(clipped)” 목적 함수를 쓴다.
- “클리핑” 메커니즘: PPO 안정성의 핵심이다. 현재 정책 주변에 신뢰 영역(trust region) 이라는 안전 구간을 설정하고, 현재 전략과 지나치게 달라지는 업데이트를 막는다. 안전 브레이크 역할이다.
요컨대 PPO는 성능 개선과 이미 검증된 전략에 머무르는 일 사이의 균형을 맞춰 훈련 중 치명적 실패를 방지합니다.
옮긴이 주가 맥락을 보탭니다. PPO는 본래 로봇 제어나 게임 AI를 위한 범용 강화학습 알고리즘으로 2017년 오픈AI가 발표했지만, 최근에는 RLHF의 표준 알고리즘으로 널리 쓰입니다.
DPO — 보상 모델을 건너뛰기
직접 선호 최적화(Direct Preference Optimization, DPO) 는 LLM을 인간의 선호에 맞춰 정렬하기 위해 고안된 비교적 최근 방법으로, PPO보다 더 단순하고 직접적인 대안입니다.
| PPO 접근법 (2단계) | DPO 접근법 (1단계) | |
|---|---|---|
| 과정 | ① 사람이 “응답 A가 응답 B보다 낫다”고 비교한 피드백으로 보상 모델을 훈련 → ② PPO로 LLM이 보상 모델에게서 높은 점수를 받도록 파인튜닝 | 보상 모델을 완전히 건너뛰고, 선호 데이터를 직접 사용해 LLM의 정책을 업데이트 |
| 보상 모델 | 훈련 과정에서 “심판” 역할 | 없음 |
| 위험 | 2단계 과정이 복잡하고 불안정할 수 있다. LLM이 허점을 찾아내 보상 모델을 “해킹”하여, 질 낮은 응답으로도 높은 점수를 받는 법을 학습할 수 있다 | 별도 보상 모델의 복잡성과 잠재적 불안정성을 피한다 |
DPO는 선호 데이터가 최적 정책과 곧바로 이어지도록 하는 수학적 관계를 활용합니다. 본질적으로 모델에게 이렇게 가르치는 셈입니다.
“선호되는 응답과 유사한 응답의 생성 확률은 높이고, 비선호 응답과 유사한 응답의 생성 확률은 낮춰라.”
실제 적용 및 활용 사례
적응형 에이전트는 경험 데이터를 바탕으로 반복적으로 업데이트해 변화가 큰 환경에서도 향상된 성능을 냅니다.
- 개인화된 비서: 개별 사용자 행동을 장기적으로 분석해 상호작용 방식을 개선합니다.
- 트레이딩 봇: 실시간 시장 데이터로 모델 파라미터를 동적으로 조정해 수익을 극대화하면서 위험 요인을 줄입니다.
- 애플리케이션 에이전트: 관찰된 사용자 행동에 따라 인터페이스와 기능을 수정해 참여도를 높입니다.
- 로봇과 자율 주행: 센서 데이터와 과거 행동 분석을 통합해 주행 능력과 대응 역량을 강화합니다.
- 사기 탐지: 새롭게 식별된 사기 패턴으로 예측 모델을 개선해 금전적 손실을 최소화합니다.
- 추천 에이전트: 사용자 선호 학습으로 콘텐츠 선별 정밀도를 높입니다.
- 게임 AI: 전략 알고리즘을 동적으로 조정해 플레이어 몰입도를 높입니다.
- 지식 베이스 학습: RAG로 문제 설명과 검증된 해결책을 담은 동적 지식 베이스를 유지합니다. 성공한 전략과 마주친 문제를 저장해 두면, 의사결정 시 이 데이터를 참조해 이전에 성공한 패턴을 적용하거나 알려진 함정을 피할 수 있습니다.
사례 연구: 자기 개선 코딩 에이전트(SICA)
SICA(Self-Improving Coding Agent) 는 막심 로뱅스, 로런스 에이치슨, 마틴 슈머가 개발한 시스템으로, 에이전트가 자신의 소스 코드를 직접 수정할 수 있음을 보여 줍니다. 한 에이전트가 다른 에이전트를 훈련하는 전통적 접근법과 달리, SICA는 수정하는 주체이자 수정되는 대상입니다.
자기 개선 순환
아카이브 검토 → 최고 성능 버전 선택 → 개선 지점 탐색 → 코드베이스 수정
↑ ↓
└────────────── 벤치마크 결과를 아카이브에 기록 ←──────────┘
SICA는 과거 버전과 각 버전의 벤치마크 성능이 담긴 아카이브를 검토해, 성공률·소요 시간·연산 비용을 가중 공식으로 계산한 성능 점수가 가장 높은 버전을 고릅니다. 선택된 버전이 다음 자기 수정 단계를 수행하고, 수정된 에이전트는 벤치마크를 거쳐 결과가 다시 아카이브에 기록됩니다. 이 덕분에 SICA는 전통적인 훈련 패러다임 없이도 역량을 키웁니다.
스스로 만들어 낸 도구들
SICA가 자기 개선으로 만들어 낸 도구들의 계보가 흥미롭습니다.
| 영역 | 진화 과정 |
|---|---|
| 코드 편집 | 단순한 파일 덮어쓰기 → 맥락을 인식하는 “지능형 편집기” → diff 기반 정밀 수정과 패턴 기반 편집을 통합한 “변경점 기반 지능형 편집기” → 부하를 줄이는 “빠른 덮어쓰기 도구” |
| 코드 탐색 | AST(추상 구문 트리) 파싱을 활용한 “AST 심벌 탐색기” → 빠른 검색과 AST 검증을 결합한 “하이브리드 심벌 탐색기” → 관련 코드 구간에만 집중하는 AST 파싱 최적화 |
그림 9.2의 성능 곡선을 보면 스마트 편집 도구, 코드 컨텍스트 요약, 파일 편집 검증, AST 심벌 탐색기, 하이브리드 심벌 탐색기가 도입되는 지점마다 효용이 계단식으로 올라갑니다.
아키텍처의 설계 선택
- 모듈식 하위 에이전트: 코딩·문제 해결·추론 에이전트를 메인 에이전트가 도구 호출처럼 불러 사용합니다. 복잡한 작업을 분해할 뿐 아니라, 장기 개선 반복에서 LLM의 컨텍스트 길이를 효율적으로 관리하는 장치입니다.
- 비동기 감시자(overseer): 메인 에이전트와 동시에 실행되는 또 다른 LLM입니다. 콜그래프와 메시지·도구 행동 로그를 담은 상세 보고서를 받아 루프나 정체(loops or stagnation) 같은 문제를 찾아내고, 필요하면 알림을 보내거나 실행을 취소해 개입합니다.
- 컨텍스트 윈도 구성: 시스템 프롬프트(목표, 도구·하위 에이전트 문서, 시스템 지시), 코어 프롬프트(문제 설명, 열린 파일 내용, 디렉터리 맵), 어시스턴트 메시지(단계별 추론, 호출 기록과 결과, 감시자와의 통신)로 단기 기억을 구조화합니다. 이 구조화가 시스템 작동의 핵심입니다.
- 보안: 에이전트가 셸 명령을 실행할 수 있으므로 전용 Docker 컨테이너 안에서 실행해 호스트 머신과 격리합니다.
- 관측 가능성: 이벤트 버스와 콜그래프를 시각화하는 대화형 웹페이지로 에이전트의 동작을 들여다볼 수 있습니다.
초기 구현에서 가장 어려웠던 난제는 LLM 에이전트가 메타 개선 반복마다 참신하면서도 실현 가능한 수정안을 스스로 제안하도록 프롬프트를 설계하는 일이었습니다. LLM 에이전트에서 개방적 학습과 진정한 창의성을 이끌어 내는 문제는 지금도 중요한 연구 주제로 남아 있습니다.
전체 코드는 self_improving_coding_agent 저장소에 공개되어 있습니다.
AlphaEvolve와 OpenEvolve
AlphaEvolve는 구글이 개발한 AI 에이전트로, 알고리즘을 발견하고 최적화하도록 설계되었습니다. 제미나이 모델(Flash, Pro) + 자동 평가 시스템 + 진화 알고리즘 프레임워크를 결합합니다.
- Flash: 광범위한 초기 알고리즘 후보를 생성
- Pro: 심층적인 분석과 개선을 담당
- 제안된 알고리즘은 미리 정한 기준으로 자동 평가·채점되고, 그 결과를 피드백 삼아 반복적으로 개선
성과가 구체적입니다.
| 영역 | 성과 |
|---|---|
| 데이터센터 | 구글 인프라에 배포되어 자원 관리 방식을 개선, 전 세계 컴퓨팅 자원 사용량의 0.7% 절감 |
| 하드웨어 | 차세대 TPU의 Verilog 코드 최적화 제안 |
| AI 성능 | 제미나이 아키텍처 핵심 커널에서 23% 속도 향상, FlashAttention의 저수준 GPU 명령어에서 최대 32.5% 최적화 |
| 기초 수학 | 4×4 복소수 행렬 곱셈을 48회의 스칼라 곱셈으로 계산하는 방법을 발견해 기존 해법을 능가 |
| 미해결 문제 | 50개 이상의 open problem 중 75%에서 기존 최첨단 해법을 재발견, 20%에서는 개선. 키싱 수 문제 등에서도 진전 |
OpenEvolve는 LLM으로 코드를 반복 최적화하는 진화형 코딩 에이전트입니다. 단일 함수에 한정되지 않고 전체 코드 파일을 진화시킬 수 있고, 여러 프로그래밍 언어를 지원하며, 오픈AI 호환 API로 어떤 LLM과도 연동됩니다. 다목표 최적화와 분산 평가 기능도 갖추고 있습니다.
구조는 컨트롤러가 네 구성 요소를 오케스트레이션하는 진화 루프입니다.
프롬프트 샘플러 ──프롬프트──→ 컨트롤러 ──요청──→ LLM 앙상블
(컨텍스트가 풍부한 오케스트레이션 (여러 LLM 출력을 조합해
프롬프트를 생성) │ 코드 수정안을 생성)
│
프로그램 데이터베이스 ←─업데이트─┴──프로그램──→ 평가자 풀
(프로그램과 지표를 저장) (테스트하고 점수를 부여)
사용법은 간결합니다.
from openevolve import OpenEvolve
evolve = OpenEvolve(
initial_program_path="path/to/initial_program.py",
evaluation_file="path/to/evaluator.py",
config_path="path/to/config.yaml"
)
best_program = await evolve.run(iterations=1000)
print(f"Best program metrics:")
for name, value in best_program.metrics.items():
print(f" {name}: {value:.4f}")
언제 쓰는가
변화가 심하거나 불확실하거나 지속적으로 진화하는 환경에서 작동해야 하는 에이전트를 구축할 때 씁니다. 특히 개인화, 지속적인 성능 개선, 새로운 상황에 자율적으로 대응하는 능력이 필요한 애플리케이션에 꼭 필요합니다.
반대로 이 능력이 없으면 에이전트는 경직되어, 초기 설계 때 예상하지 못한 상황에서 성능이 떨어지고 복잡한 실제 환경에서 진정한 자율성을 달성하기 어렵습니다.
핵심 정리
- 학습과 적응이란 에이전트가 경험을 활용해 수행 능력을 높이고 새로운 상황에 대처하는 것이다. “적응” 은 학습의 결과로 행동이나 지식에 나타나는 가시적 변화다.
- SICA는 과거 성능을 기반으로 자신의 코드를 수정해 스스로 개선한다. 이 과정에서 Smart Editor와 AST Symbol Locator 같은 도구가 만들어졌다.
- 특화된 하위 에이전트와 감시자를 두면 자기 개선 시스템이 큰 작업을 관리하고 올바른 방향을 유지하는 데 도움이 된다.
- LLM의 컨텍스트 윈도를 어떻게 구성하느냐(시스템 프롬프트, 코어 프롬프트, 어시스턴트 메시지)가 에이전트의 작동 효율에 매우 중요하다.
- 학습하는 에이전트를 만든다는 건 보통 머신러닝 도구를 연동하고 데이터 흐름을 관리해야 한다는 의미다.
- AlphaEvolve는 LLM과 진화 프레임워크로 알고리즘을 자율적으로 발견·최적화해 기초 연구와 실용 컴퓨팅 양쪽에 기여하고 있다.
마치며
멀티 에이전트 시스템에서 여러 에이전트를 조율하며 함께 개선하려면 학습 원리가 특히 중요합니다. 이를 위해서는 튜닝 데이터가 전체 상호작용의 흐름을 정확히 반영하여, 참여하는 각 에이전트의 개별 입력과 출력을 빠짐없이 담아야 합니다.
여기까지가 에이전틱 AI의 기본 구성 요소 — 아키텍처, 활용 분야, 계획 수립, 멀티 에이전트 협업, 기억 관리, 학습과 적응 — 입니다. AlphaEvolve 같은 성과는 AI 에이전트가 알고리즘을 자율적으로 발견하고 최적화하는 일이 실현 가능하다는 점을 보여 줍니다.
참고 문헌
- AlphaEvolve 블로그
- OpenEvolve 깃허브
- Proximal Policy Optimization Algorithms, 슐먼 외
- A Self-Improving Coding Agent, 로뱅스·에이치슨·슈머, 2025
- Deep Learning, 굿펠로·벤지오·쿠르빌, MIT Press, 2016
- Machine Learning, 미첼, McGraw-Hill, 1997
- Reinforcement Learning: An Introduction, 서튼·바토, MIT Press, 2018