Minbook
EN
AI 에이전트 루프의 진화 — RLHF에서 랄프루프까지

AI 에이전트 루프의 진화 — RLHF에서 랄프루프까지

MJ · · 6 분 소요

RLHF → ReAct → Reflexion → LangGraph/AutoGen → Context Rot → Ralph Loop. AI 에이전트 루프 아키텍처 6세대의 진화 과정과, 각 세대가 해결한 문제·남긴 한계를 실험 데이터와 함께 분석

AI는 더 이상 질문에 답하는 챗봇이 아닙니다.

2026년 현재, AI 시스템은 목표를 설정하고, 외부 도구를 사용하며, 실패하면 스스로 경로를 수정하는 자율 에이전트(Autonomous Agent) 로 진화했습니다. 이 진화의 핵심에는 에이전트가 환경과 상호작용하며 자신의 행동을 교정하는 루프(Loop) 아키텍처가 있습니다.

그런데 이 루프에는 치명적인 결함이 있었습니다. 바로 컨텍스트 붕괴(Context Rot). 이 문제를 해결한 것이 오늘 이야기할 랄프루프(Ralph Loop) 입니다.

이 시리즈의 첫 번째 글에서는 RLHF에서 시작해 랄프루프에 이르기까지 에이전트 루프 아키텍처가 어떤 문제를 풀어왔고, 어디에서 실패했으며, 왜 랄프루프라는 패러다임 전환이 필요했는지를 추적합니다.


강화학습(RL)과 RLHF — 에이전트 자율성의 토대

자율 AI 에이전트의 작동 원리를 이해하려면 강화학습(Reinforcement Learning, RL)의 메커니즘부터 파악해야 합니다.

상태 공간, 행동 공간, 보상 함수

강화학습의 핵심 요소는 세 가지입니다.

요소정의예시
상태 공간(State space)에이전트가 의사 결정에 활용하는 모든 정보코드베이스 현재 상태, 테스트 결과, 에러 로그
행동 공간(Action space)에이전트가 취할 수 있는 모든 행동의 집합파일 수정, API 호출, 테스트 실행
보상 함수(Reward function)행동의 결과를 수치화한 피드백 신호테스트 통과 +1, 빌드 실패 -1

에이전트의 목표는 보상을 극대화하는 정책(Policy) 함수를 학습하는 것입니다. PPO(Proximal Policy Optimization) 같은 알고리즘이 이 정책을 점진적으로 개선합니다.

RLHF: 복잡한 인간 선호도의 인코딩

보드게임처럼 규칙이 명확한 환경에서는 보상 함수를 수학적으로 정의할 수 있습니다. 하지만 “좋은 텍스트”를 수학 공식으로 정의할 수 있을까요?

RLHF(Reinforcement Learning from Human Feedback) 는 이 문제를 우회합니다. 인간 주석자가 모델의 출력에 순위를 매기고, 이 순위 데이터로 보상 모델(Reward Model) 을 훈련합니다. 이 보상 모델이 수학적 보상 함수를 대체하여, PPO를 통해 에이전트의 정책을 개선합니다.

graph LR
    A["모델 출력 A/B 생성"] --> B["인간이 A vs B 순위 매김"]
    B --> C["보상 모델 훈련 (SFT)"]
    C --> D["보상 모델이 점수 산출"]
    D --> E["PPO로 정책 업데이트"]
    E --> A

2022년 OpenAI의 InstructGPT 출시가 전환점이었습니다. GPT-3와 ChatGPT의 차이 — 같은 기반 모델인데 하나는 횡설수설하고 하나는 유창하게 대화하는 — 이 간극의 상당 부분이 RLHF에서 비롯되었습니다.

하지만 RLHF는 오프라인(Offline) 학습입니다. 모델의 가중치를 훈련 시점에 조정할 뿐, 런타임에서 실시간으로 발생하는 오류를 교정하지 못합니다. 에이전트가 API 호출에 실패하거나, 예상치 못한 에러를 만났을 때, RLHF만으로는 즉각 대응할 수 없습니다.


에이전트 루프의 5단계 실행 사이클

RLHF가 오프라인에서 모델을 정렬한다면, 런타임에서 에이전트의 자율성을 보장하는 것은 에이전트 루프(Agent Loop) 입니다.

챗봇이 “입력 → 출력 → 끝”이라면, 에이전트 루프는 “입력 → 출력 → 관찰 → 조정 → 다시 실행”의 순환 구조입니다. 목표 달성 또는 종료 조건까지 멈추지 않습니다.

graph TD
    P["1. 인지 Perceive"] --> R["2. 추론 Reason"]
    R --> PL["3. 계획 Plan"]
    PL --> A["4. 행동 Act"]
    A --> O["5. 관찰 Observe"]
    O -->|"목표 미달성"| P
    O -->|"목표 달성"| DONE["종료"]
단계역할구체적 행동
인지(Perceive)환경으로부터 입력 수신사용자 메시지, 이전 도구 실행 결과, API 응답, 에러 코드
추론(Reason)LLM이 상황 분석현재 상태 평가, 목표 근접도 판단, 다음 행동 결정
계획(Plan)하위 작업 분해복잡한 목표를 실행 가능한 단위로 분할
행동(Act)외부 환경에 개입API 호출, 코드 수정, 파일 생성, 다른 에이전트 호출
관찰(Observe)결과 검토성공 여부 확인, 새로운 정보 기반 계획 수정

이 공식이 바로 Agent = LLM + Memory + Planning + Tool Use 입니다. OpenAI, Anthropic, Google, Microsoft 모두 명칭은 다르지만 이 반복 아키텍처에 수렴하고 있습니다.

다만 비용이 문제입니다. 에이전트 루프는 표준 채팅 대비 약 4배, 멀티 에이전트 환경에서는 최대 15배 더 많은 토큰을 소비합니다.


ReAct: 사고와 행동의 교차 프레임워크

에이전트 루프의 가장 널리 채택된 인지 패턴은 ReAct(Reasoning + Acting) 입니다.

복잡한 질문에 대해 LLM이 바로 답변을 생성하면 높은 확률로 환각(Hallucination)이 발생합니다. ReAct는 이 문제를 해결하기 위해 에이전트가 자신의 사고 과정을 명시적으로 드러내도록 강제합니다.

Thought-Action-Observation 패턴

Thought: CSV 데이터를 로드해서 3분기 매출 추이를 확인해야 합니다
Action:  load_csv("sales_data.csv")
Observation: 3분기에 매출 15% 하락 발견

Thought: 지역별로 분해해서 원인을 파악해야 합니다
Action:  query("SELECT region, revenue FROM sales WHERE quarter = 'Q3'")
Observation: 유럽 지역만 40% 하락, 나머지는 정상

Thought: 유럽 지역 하락 원인을 외부 데이터로 교차 검증합니다
Action:  web_search("Europe Q3 2025 economic downturn")
...

추론과 행동이 서로를 강화하는 구조입니다. Princeton 대학의 연구에 따르면, 이 패턴은 복잡한 작업에서 AI의 정확도를 4%에서 74% 까지 끌어올리는 극적인 성과를 보였습니다.

핵심 이점은 두 가지입니다. 첫째, 각 단계의 추론 과정이 기록되므로 감사 추적(Audit trail) 이 명확합니다. 둘째, 도구를 사용해 외부 사실을 검증하므로 환각이 크게 줄어듭니다.


Reflexion과 LATS: 에이전트가 자기 실수에서 배우다

ReAct가 “생각하면서 행동하라”라면, Reflexion은 한 걸음 더 나아가 “과거의 실수에서 배워라”입니다.

System 1 vs System 2

심리학에서 빠르고 직관적인 사고를 System 1, 느리지만 분석적인 사고를 System 2라고 합니다. ReAct는 반응적인 System 1에 가깝다면, Reflexion은 자기 평가와 자기 반성을 통한 System 2를 모방합니다.

Reflexion 에이전트는 행동 후 다음과 같은 자기 반성적 질문을 던집니다.

  • “이 행동이 실제로 목표를 달성했는가?”
  • “어떤 지표가 악화되었는가?”
  • “누락된 정보는 무엇이었는가?”

이 반성의 결과는 다음 시도에 반영됩니다.

실험 결과

실험 데이터가 이 접근의 효과를 입증합니다.

벤치마크ReAct 단독ReAct + Reflexion
AlfWorld (순차적 의사결정)저조한 성능134개 과제 중 130개 완료
HotPotQA (추론)기본 수준최고 수준 달성
HumanEval (Python 코딩)기본 수준최고 수준 달성

기존 강화학습이 막대한 훈련 데이터와 비용이 드는 미세 조정을 요구하는 반면, Reflexion은 언어적 피드백(Verbal reinforcement) 만으로 비슷한 효과를 냅니다. 가중치 업데이트 없이 프롬프트 수준에서 학습하는 경량 대안입니다.

더 고도화된 LATS(Language Agent Tree Search) 는 이 반성 메커니즘을 몬테카를로 트리 탐색과 결합합니다. 행동 궤적을 트리 구조로 관리하면서, 가장 유리한 경로를 병렬로 탐색하고 반복 루프에 갇히는 것을 방지합니다.


다중 에이전트 오케스트레이션의 부상

단일 에이전트의 인지 패턴이 고도화되면서, 여러 특화 에이전트를 조율하는 오케스트레이션 프레임워크가 등장했습니다.

프레임워크아키텍처에러 처리강점피벗 용량
LangChain순차적 AgentExecutor오류를 치명적으로 취급빠른 지연 시간, 낮은 토큰65%
LangGraph방향성 그래프 State Machine상태를 이전 노드로 전달, Drafter-Critic 루프목표 지향적 추론높음
AutoGen대화 기반 GroupChat에러 로그를 대화방에 반환창발적 문제 해결90%
CrewAI역할 기반 계층적 관리자가 검토 메커니즘인프라 가시성0% (네트워크 장애 시)

LangGraph에서는 개발자, 테스터, 기획자 에이전트가 공유 상태 객체를 통해 통신하며 오류를 수정합니다. AutoGen은 에이전트 간 자유 대화에 의존하여 테스트 엔지니어와 디버거가 코드가 성공할 때까지 피드백을 주고받습니다.

이 프레임워크들은 강력합니다. 하지만 수 시간 이상 자율적으로 동작해야 하는 실제 개발 환경에서 치명적인 실패를 겪습니다.


컨텍스트 붕괴(Context Rot) — 기존 루프의 치명적 한계

LLM의 컨텍스트 윈도우에는 물리적 한계가 있습니다. 토큰은 지속적으로 추가될 뿐, 결코 스스로 삭제되지 않습니다. 루프가 수십 번 반복되면 세 가지 실패 모드가 발생합니다.

1. 컨텍스트 희석 (Context Dilution)

시스템에 부여된 초기 가이드라인이 수천 토큰의 에러 메시지, 컴파일 로그, 수정 코드에 파묻힙니다. 50개 메시지가 지나면 에이전트는 원래 목적을 망각하고 지엽적인 문제에 집착합니다.

초기: "TypeScript를 Python으로 마이그레이션하라"
50턴 후: 에이전트가 import 문 스타일링에 30분째 매달리는 중

2. 성공 편향 (Success Bias)

LLM은 대화의 성공적 완료를 흉내 내도록 훈련되어 있습니다. 중요한 단계를 건너뛰었는데도 “작업 완료”를 맹목적으로 선언합니다. 실제로 4개 중 2개만 마이그레이션했는데 “모든 파일 변환 완료”를 보고하는 식입니다.

3. 오류 눈덩이 (Error Snowball)

반복 수정 기록으로 컨텍스트가 가득 차면, 모델은 자신이 과거에 만든 나쁜 패턴을 참조하여 계속 복제하기 시작합니다. 40번째 시도에서 만든 깨진 코드가 45번째 시도의 참조 자료가 되는 악순환입니다.

graph TD
    A["초기 컨텍스트: 명확한 지시"] --> B["10턴: 에러 로그 누적"]
    B --> C["30턴: 원래 목적 희석"]
    C --> D["50턴: 자기 참조 오류 복제"]
    D --> E["실패: 에이전트 재시작 필요"]

    style A fill:#2d5a2d,stroke:#4a9e4a
    style B fill:#5a5a2d,stroke:#9e9e4a
    style C fill:#5a3d2d,stroke:#9e6b4a
    style D fill:#5a2d2d,stroke:#9e4a4a
    style E fill:#3d1f1f,stroke:#7a3333

LangGraph나 AutoGen도 이 문제에서 자유롭지 않습니다. 멀티 에이전트 환경에서는 비결정론적 에이전트들이 서로 복잡하게 통신하면서 상태가 더 빠르게 오염됩니다.

압축이나 요약으로 해결할 수 있을까요? 정보 손실(Lossy compression)이 발생하며, 이는 새로운 환각의 원인이 됩니다.


랄프 위검의 등장: “멍청하지만 끈질기게”

2025년, 호주 개발자 Geoffrey Huntley가 근본적으로 다른 접근을 제안합니다.

“LLM의 기억력은 무한정 의존할 대상이 아니라, 엄격히 통제해야 할 대상이다.”

Huntley의 아이디어는 극도로 단순합니다. AI 코딩 에이전트를 무한 Bash 루프 안에서 반복 실행하되, 매 반복마다 컨텍스트를 완전히 폐기합니다. 진행 상태는 LLM의 메모리가 아닌 파일 시스템과 Git 히스토리에 저장합니다.

while true; do
  cat task.md | claude-code
done

이 기법의 이름은 심슨 가족의 **랄프 위검(Ralph Wiggum)**에서 따왔습니다. 멍청한 실수를 반복하지만 절대 포기하지 않고, 끈질기게 시도하여 결국 해내는 캐릭터. Huntley는 이를 Naive Persistence 라고 부릅니다.

“That’s the beauty of Ralph — the technique is deterministically bad in an undeterministic world.”

AI도 개별 반복에서는 실패할 수 있지만, 성공은 파일에 축적되고 실패는 세션 종료와 함께 휘발됩니다. 충분히 반복하면 결국 성공합니다.

타임라인

시점이벤트
2025.02Huntley, 개념 최초 구상
2025.07ghuntley.com/ralph 블로그 포스트 공개
2025.12Anthropic, 공식 Claude Code 플러그인 ralph-wiggum 출시
2026.01Ryan Carson 트윗 → 865,000+ 조회, 바이럴
2026.03한국 최초 랄프톤(Ralphathon) 해커톤 개최

이 간단한 Bash 루프가 어떻게 컨텍스트 붕괴를 해결하는지, 어떤 파일 구조와 아키텍처가 필요한지, 그리고 코딩을 넘어 프롬프트 정제나 시스템 개선에도 적용할 수 있는 방법은 무엇인지 — 다음 편에서 구체적인 구현 가이드를 다룹니다.


다음 편: 랄프루프 실전 구현 가이드 — Bash 한 줄에서 Cross-Model Review까지

공유

관련 글