Agentic AI Design Patterns

CH09-기억하는 AI는 끝났다 — 이제 '배우는 AI'다 (피드백 루프부터 자기 개선까지)

빌드 피벗(Build Pivot) 2026. 6. 6. 09:10
반응형
AGENTIC AI DESIGN PATTERNS · 09
배우는 AI — 학습과 적응(Learning & Adaptation) 완벽 정리
경험으로 스스로 나아지는 에이전트: 학습 6유형, PPO·DPO·Thompson Sampling, 피드백 루프와 자기 개선(SICA·AlphaEvolve), 그리고 엔터프라이즈 적용까지
🟢 입문~중급 ⏱️ 약 17분 🔧 Python · Gemini API 🏢 엔터프라이즈

TL;DR — 메모리가 "겪은 것을 기억"하게 했다면, 학습과 적응은 그 기억에서 배워 행동을 바꿉니다. 학습(Learning)은 경험·데이터로 행동과 지식을 변화시키는 과정, 적응(Adaptation)은 그 결과로 전략을 바꾸는 것입니다. LLM 에이전트의 학습은 대부분 가중치를 건드리지 않고 경험 저장 → 피드백 → 프롬프트 개선 의 루프로 이뤄집니다. 핵심 알고리즘은 PPO(안전한 강화학습)·DPO(선호도로 직접 정렬)·Thompson Sampling(탐색/활용 균형)이고, 구현은 피드백 학습 · 메모리 기반 학습 · DPO 프롬프트 최적화 3종으로 정리됩니다.

1. 왜 학습인가 — 기억하는 AI에서 배우는 AI로

지난 편에서 에이전트는 드디어 기억을 갖게 됐습니다. 하지만 기억만으로는 부족합니다. 어제 고객을 화나게 한 그 응대를, 오늘도 똑같이 반복한다면 — 그건 기억하는 것이지 배우는 것이 아닙니다. 메모리에 기록된 경험을 꺼내 행동을 바꿔야 비로소 학습입니다.

이 패턴의 비유는 신입사원 → 베테랑 직원입니다. 처음엔 매뉴얼대로만 동작하다가, 시간이 지나며 업무 요령을 터득하고, 결국 상황에 맞게 자율적으로 판단합니다. 핵심은 매 상호작용이 다음 응답을 더 낫게 만든다는 점입니다.

🔁 학습 없는 AI — 매번 같은 실수
🙋 "답이 너무 딱딱해요" (1일차)
🤖 격식체로 응답 (그대로)
🙋 "또 딱딱해요" (30일차)
🤖 여전히 격식체 ❌ 피드백 증발
🌱 배우는 AI — 피드백이 행동을 바꿈
🙋 "답이 너무 딱딱해요"
🤖 응답 + 저장: 부정 피드백→캐주얼 선호
🙋 (다음 질문)
🤖 친근한 톤으로 응답 ✅ ← 적응
그림 1. 학습·적응은 메모리에 쌓인 경험·피드백을 행동 변화로 연결한다.

학습이 붙는 순간 가능해지는 것: 지속적 품질 개선(피드백 누적), 개인화(사용자별 선호 학습), 환경 적응(데이터 변화에 실시간 대응), 자율 개선(스스로 프롬프트·전략 진화). 한마디로 "쓸수록 똑똑해지는 AI Agent"가 됩니다.

2. 개념과 오해 — 학습 = 파인튜닝이 아니다

먼저 두 단어를 분리합니다. 학습(Learning)은 경험과 데이터를 통해 AI의 행동·지식을 변화시키는 과정이고, 적응(Adaptation)은 그 학습 결과를 바탕으로 전략과 이해를 바꾸는 것입니다. 학습이 "재료를 모으는 것"이라면 적응은 "레시피를 바꾸는 것"입니다.

⚠️ 흔한 오해 — "에이전트가 학습한다 = 모델을 파인튜닝한다"

실무 LLM 에이전트의 학습은 대부분 모델 가중치를 건드리지 않습니다. 대신 ① 경험을 경험 저장소(ExperienceStore)에 쌓고, ② 긍정/부정 피드백으로 Few-Shot 예시프롬프트를 갱신하며, ③ 메모리에서 유사 경험을 검색해 컨텍스트를 보강합니다. 가중치를 실제로 바꾸는 PPO·DPO 같은 기법은 그 위에 선택적으로 얹는 한 층일 뿐입니다.

그래서 학습은 한 가지가 아니라 여러 유형의 스펙트럼입니다. 보상으로 배우는 강화학습부터, 적은 예시로 적응하는 퓨샷, 경험을 기억하는 메모리 기반까지 — 다음 섹션에서 6가지를 한눈에 정리합니다.

3. 학습 6유형 — 무엇으로, 어떻게 배우는가

학습은 "무엇을 신호로 삼는가"에 따라 갈립니다. 보상·정답·패턴·예시·실시간 데이터·경험 — 6가지 유형과 대표 활용처입니다.

학습 유형 핵심 원리 활용 분야 비유
강화학습 (RL) 보상/페널티 기반 게임 AI, 로봇, 자율주행 간식으로 강아지 훈련
지도학습 정답 예제 학습 분류, 예측, 패턴 인식 정답지 문제집 풀기
비지도학습 패턴 스스로 발견 클러스터링, 이상 탐지 물건 비슷한 것끼리 분류
Few/Zero-Shot 적은 예시·예시 없이 LLM 에이전트, 빠른 적응 설명서만 보고 조립
온라인 학습 실시간 업데이트 추천 시스템, 스트리밍 실시간 뉴스 피드
메모리 기반 경험 기억·활용 개인화 비서, RAG, 대화 의사가 과거 케이스 기억

이 중 LLM 에이전트에서 특히 자주 쓰이는 셋은 Few/Zero-Shot(별도 학습 없이 즉시 적응), 온라인 학습(피드백 즉시 반영), 메모리 기반(경험 검색)입니다. 뒤의 구현 3종이 정확히 이 영역을 다룹니다.

🎯 신호로 배우기
강화학습 · 지도학습 — 보상/정답이라는 외부 신호로 정책을 다듬는다
⚡ 즉시 적응하기
Few/Zero-Shot · 온라인 — 새 상황에 곧바로 맞춰 행동을 바꾼다
🧠 경험으로 배우기
메모리 기반 · 비지도 — 축적된 경험에서 패턴을 길어 올린다
그림 2. 학습 6유형을 신호·적응·경험의 세 갈래로 묶어 본 지도.

4. 학습-적응 루프 — 5단계로 도는 개선 사이클

유형이 무엇이든, 실무 에이전트의 학습은 하나의 닫힌 루프로 수렴합니다. 질문에 답하고, 피드백을 받고, 경험을 저장하고, 패턴을 뽑아, 다음 응답을 개선합니다. 이 루프가 돌수록 응답 품질이 올라갑니다.

1
응답
Response
질의에 답변 생성
2
피드백
Feedback
명시·암묵 신호 수집
3
저장
Store
경험 저장소에 기록
4
학습
Learn
성공·실패 패턴 분석
5
개선
Improve
프롬프트·전략 갱신
↺ 5단계가 다시 1로 — 개선된 전략으로 다음 응답을 생성하며 루프가 순환한다 (Query → … → Improve → Query)
그림 3. 학습-적응 루프 — 색은 역할(파랑=실행/주황=신호/라임=학습/초록=결과).

구현 3종은 모두 이 루프의 변주입니다. 피드백 학습은 2·3단계(피드백→저장)를, 메모리 기반은 3·1단계(저장→검색→응답)를, DPO 최적화는 4·5단계(패턴→프롬프트 진화)를 정교화합니다.

5. 핵심 알고리즘 — PPO · DPO · Thompson Sampling

가중치를 실제로 조정하거나 변형을 고를 때 쓰는 세 알고리즘입니다. PPO는 안전한 강화학습, DPO는 선호도로 직접 정렬, Thompson Sampling은 어떤 변형을 시도할지 고르는 탐색/활용 균형 도구입니다.

🛞 PPO — 안전하게 조금씩
핵심: 클리핑(Clipping)으로 급격한 변화 방지
비유: 보조바퀴 조금씩 높이기
용도: 범용 강화학습
🍽️ DPO — 선호로 직접
핵심: 보상 모델 없이 선호 데이터로 직접 학습
비유: 손님 선택으로 요리법 개선
용도: LLM 정렬, 프롬프트 최적화

둘은 같은 목표(좋은 응답 강화)를 다른 비용으로 달성합니다. 표로 대비하면 왜 LLM 정렬에 DPO가 인기인지가 분명합니다.

항목 PPO DPO
복잡성 높음 (보상모델 필요) 낮음 (직접 학습)
안정성 불안정할 수 있음 안정적
용도 범용 강화학습 LLM 정렬 특화
리소스 많이 필요 적게 필요
구현 어려움 쉬움

세 번째 도구 Thompson Sampling은 학습 자체가 아니라 "여러 후보 중 무엇을 시도할까"를 푸는 A/B 테스트 전략입니다. 각 변형의 성공·실패 횟수로 Beta(α, β) 분포를 만들고 거기서 샘플링해 가장 높은 값을 고릅니다. 덜 검증된 변형도 가끔 뽑혀(탐색), 좋은 변형은 자주 뽑힙니다(활용).

PYTHON · Thompson Sampling으로 변형 선택 (탐색/활용 균형)
import random # 각 프롬프트 변형마다 Beta 분포에서 점수를 뽑아 비교 scores = [] for variant in variants: alpha = variant.chosen_count + 1 # 성공 + 1 beta = variant.rejected_count + 1 # 실패 + 1 score = random.betavariate(alpha, beta) scores.append((variant, score)) # 가장 높은 샘플 값의 변형 선택 → 결과로 alpha/beta 갱신 best_variant = max(scores, key=lambda x: x[1])[0]

6. 구현 ① 피드백 학습 — 경험 저장소 + DPO 원리

첫 구현은 피드백 학습 에이전트(Gemini API)입니다. 4종 피드백(POSITIVE·NEGATIVE·CORRECTIVE·IMPLICIT)을 받아 ExperienceStore에 긍정/부정 예시를 도메인별로 쌓고, 그걸 다음 프롬프트의 Few-Shot 예시로 주입합니다. 데이터 흐름은 Query → Response → Feedback → Learn → Improve입니다.

PYTHON · 피드백 유형 정의 + 경험 저장
from enum import Enum class FeedbackType(Enum): POSITIVE = "positive" # 좋은 응답 → 긍정 예시로 NEGATIVE = "negative" # 나쁜 응답 → 부정 예시로 CORRECTIVE = "corrective" # 수정본=긍정, 원본=부정 (DPO 쌍) IMPLICIT = "implicit" # 클릭·체류시간 등 암묵 신호 # CORRECTIVE는 (수정본, 원본)을 chosen/rejected 쌍으로 저장 → DPO 학습 데이터 store.positive_examples[domain].append({"query": q, "response": corrected}) store.negative_examples[domain].append({"query": q, "response": original})

질의가 들어오면 ① 사용자 컨텍스트 조회 → ② 유사 과거 성공 사례 검색 → ③ 긍정 예시는 "이렇게 답하라", 부정 패턴은 "이건 피하라"로 프롬프트에 주입합니다. 같은 질문이라도 피드백이 쌓일수록 응답이 좋아집니다.

PYTHON · 학습된 경험으로 프롬프트 강화 후 응답
async def process_query(self, query, user_id, domain="general"): ctx = self.store.get_user_context(user_id) # 선호 스타일·길이 similar = self.store.get_similar_interactions(query, domain) # 성공 사례 prompt = self.optimizer.get_optimized_prompt(domain, query, ctx) # 긍정/부정 예시 주입 response = await asyncio.to_thread(model.generate_content, prompt) self.store.add_interaction(...) # 다음 학습을 위해 기록 return interaction_id, response.text # 사용자가 평가하면 학습 데이터로 전환 agent.record_feedback(interaction_id, FeedbackType.POSITIVE, "명확했어요")

7. 구현 ② 메모리 기반 학습 — 3단계 메모리 + 벡터 검색

둘째 구현은 인간 기억을 본뜬 3단계 메모리 시스템입니다. Episodic(구체적 경험 — what happened), Semantic(일반화된 지식 — what it means), Working(현재 대화 컨텍스트 — what's relevant now). 질문이 오면 임베딩 벡터로 유사 에피소드를 검색해 응답을 보강합니다.

🧩 Working Memory
현재 대화 컨텍스트 · 단기 · 세션 범위
▲ 검색 결과를 끌어올림 ▲
📼 Episodic (일화)
구체적 경험 — context·query·response·outcome·feedback_score를 저장. 벡터 유사도로 검색
📚 Semantic (의미)
일반화된 지식 — 도메인 개념·패턴·신뢰도(confidence). 성공 경험에서 패턴을 추출
그림 4. 3단계 메모리 — Working이 Episodic·Semantic에서 관련 경험·지식을 끌어와 응답을 만든다.

핵심은 검색 점수에 피드백 가중치를 곱한다는 점입니다. 단순 유사도가 아니라 "비슷하면서도 과거에 좋은 평가를 받은" 경험이 우선 검색됩니다.

PYTHON · 코사인 유사도 × 피드백 가중치로 에피소드 검색
query_emb = await embedding_service.get_embedding(f"{context} {query}") for episode in self.episodes: similarity = EmbeddingService.cosine_similarity(query_emb, episode.embedding) # 유사도에 피드백 점수를 반영 → 좋은 평가 경험을 우대 weighted_score = similarity * (0.5 + 0.5 * episode.feedback_score) if weighted_score >= min_score: scored.append((episode, weighted_score)) scored.sort(key=lambda x: x[1], reverse=True) # 상위 top_k 반환

8. 구현 ③ DPO 프롬프트 최적화 — 프롬프트를 진화시키다

셋째 구현은 프롬프트 자체를 유전 알고리즘처럼 진화시킵니다. PromptEvolutionEngine이 7가지 변형(예시 추가·제약 추가·톤 변경·구조화·단순화·페르소나·추론단계)을 만들고, ABTestManager가 Thompson Sampling으로 변형을 선택하며, 사용자 선호(chosen/rejected)로 DPO 원리에 따라 좋은 변형을 강화합니다.

PYTHON · 프롬프트 변형 유형 + 선호도 쌍(DPO 학습 데이터)
MUTATION_TYPES = [ "add_examples", "add_constraints", "change_tone", "add_structure", "simplify", "add_persona", "add_reasoning", ] @dataclass class PreferencePair: # DPO 학습의 기본 단위 query: str chosen_response: str # 선호된 응답 rejected_response: str # 비선호된 응답 chosen_prompt_id: str # 어느 프롬프트 변형이 이겼나 rejected_prompt_id: str

흐름은 A/B Test → Preference → Optimize → Evolve. 변형들을 경쟁시켜 이긴 프롬프트를 다음 세대의 부모로 삼고, win_rate·confidence로 성능을 추적합니다. 버전 관리로 언제든 롤백도 가능합니다.

PYTHON · 변형 성능 추적 (승률·신뢰도)
@dataclass class PromptVariant: template: str chosen_count: int = 0 rejected_count: int = 0 @property def win_rate(self) -> float: # 선호 비율 total = self.chosen_count + self.rejected_count return self.chosen_count / total if total else 0.5 @property def confidence(self) -> float: # 사용량 기반 신뢰도 return min(1.0, self.total_uses / 100)

9. 프레임워크 비교 — 같은 학습, 다른 어휘

구현 3종은 Gemini API로 개념을 직접 보였지만, 실무에서는 프레임워크의 학습 장치를 씁니다. Google ADK·LangChain·LangGraph가 반복·피드백·메모리·평가를 어떻게 부르는지 한 표로 대응시켜 둡니다.

기능 Google ADK LangChain LangGraph
반복 학습 LoopAgent(max_iterations) while loop + condition Conditional Edges with cycles
피드백 수집 Callbacks (before/after) Human-in-the-Loop Human-in-the-Loop Nodes
메모리 관리 Session State ConversationBufferMemory State persistence
품질 평가 escalate 메커니즘 OutputParser + Validation Validator Nodes
자기 성찰 LoopAgent + Evaluator Reflection Chain State Graph + Conditional Edges
그림 5. 학습 기능 대응표 — ADK·LangChain·LangGraph의 어휘 차이.

눈여겨볼 점: 반복 학습은 4편 리플렉션의 LoopAgent를, 메모리 관리는 8편의 Session State·State persistence를 그대로 빌려옵니다. 학습은 앞선 패턴들 위에 세워집니다.

10. 자기 개선 심화 — 코드를 스스로 고치는 에이전트

학습의 끝판왕은 에이전트가 자기 코드·전략을 직접 수정하는 자기 개선(Self-Improvement)입니다. 연구·산업에서 실제 성과를 낸 세 사례입니다.

🔧 SICA
Self-Improving Coding Agent · Univ. of Bristol & iGent AI (ICLR 2025)
아카이브의 최고 버전을 골라 자기 코드를 수정하고 벤치마크로 검증해 다시 저장하는 루프.
SWE-Bench 17% → 53% 향상
🧬 AlphaEvolve
Google DeepMind · LLM + 진화 알고리즘
Gemini로 코드를 대량 생성·평가·진화시켜 새 알고리즘을 발견.
Gemini 커널 23% 속도 향상
FlashAttention 32.5% 최적화
50+ 수학 난제 해결
🌍 OpenEvolve
AlphaEvolve의 오픈소스 구현
Controller·Program DB·Evaluator Pool·LLM Ensemble로 진화 루프를 누구나 재현.
전체 파일 진화 · 다중 언어 · 분산 평가
그림 6. 자기 개선 3종 — 연구(SICA)·산업(AlphaEvolve)·오픈소스(OpenEvolve).
🛡️ 안티패턴 — 무한 자기 수정의 폭주

자기 개선 루프는 검증 없이 돌리면 잘못된 패턴을 강화하거나 무한 루프에 빠집니다. SICA가 Overseer(감독자 AI)로 루프를 감시하고 벤치마크 점수로만 채택하는 이유입니다. 반드시 ① 종료 조건 ② 객관적 성능 척도 ③ 롤백 가능한 아카이브를 갖추세요.

11. 엔터프라이즈 — CRM·ERP·Groupware의 학습 ROI

학습은 "쓸수록 좋아지는" 특성 덕에 시간이 지날수록 ROI가 커집니다. 시스템별 학습 적용과 측정된 효과입니다.

🤝 CRM
고객 응대 학습 · 이력 활용 · 응대 스타일 최적화
고객 만족도 15-25%↑
응대 시간 30%↓
First Call Resolution 20%↑
영업 전환율 12→18%
🏭 ERP
수요 예측 · 발주 최적화 · 이상 거래 탐지
수요 예측 정확도 70→88%
재고 비용 10-20%↓
이상 거래 탐지 60→92%
재고 회전율 6→8회/년
💬 Groupware
스마트 메일 분류 · 회의 일정 최적화 · 문서 추천
회의 일정 조율 83%↓
문서 검색 시간 80%↓
이메일 처리 60%↓
생산성 30-50%↑
그림 7. 엔터프라이즈 학습 적용과 ROI — CRM·ERP·Groupware별 학습 대상과 효과.

ERP 사례의 재무 분석은 명확합니다. 시스템 구축·운영·교육에 첫해 $750K(이후 $250K)를 투자해 재고 절감·결품 방지·효율화·사기 방지로 연 $750K를 회수합니다 — ROI 첫해 100%, 이후 200%+, 손익분기점 12개월입니다.

12. 베스트 프랙티스 — 학습시킬 자리와 피할 자리

학습은 양날의 검입니다. 빠른 적응의 이면에 잘못된 패턴을 학습할 위험예측 불가능한 행동이 있습니다. 쓸 자리와 피할 자리를 먼저 가립니다.

✅ 권장
개인화 비서 (사용자별 선호 학습)
고객 상담 (성공 응대 패턴 학습)
추천 시스템 (실시간 피드백 최적화)
문서·코드 생성 (피드백·자기성찰 개선)
⛔ 비권장
규정 준수 업무 (규정 이탈 위험)
안전 필수 시스템 (예측 불가 행동)
법적 결정·의료 진단 (편향·책임 소재)
간단한 규칙 기반 (학습 오버헤드 과다)

실무 체크리스트: ① 경험 저장소 크기 제한(FIFO로 오래된 데이터 제거) ② 긍정 피드백만 Few-Shot으로 활용·도메인별 분리 ③ 명시적+암묵적 피드백 모두 수집, 없으면 중립(0.5) ④ Thompson Sampling으로 탐색/활용 균형 ⑤ 최소 사용 횟수 이상 데이터 후 최적화 ⑥ 버전 관리·롤백 가능하게 ⑦ 자기 개선은 Overseer + 벤치마크로 폭주 방지.

★ 마치며

"순서대로 쪼개라"가 체이닝, "입력에 따라 길을 나눠라"가 라우팅, "독립 작업은 동시에"가 병렬화, "쓴 다음 읽고 고쳐라"가 리플렉션, "모르면 도구를 써라"가 도구 사용, "언제 어떤 순서로 쓸지 계획하라"가 플래닝, "전문가가 협력하라"가 멀티 에이전트, "겪은 것을 기억하라"가 메모리였다면 — 학습과 적응은 "겪은 것에서 배워라"입니다. 이제 에이전트는 기억하고, 배웁니다. 그런데 혼자만의 지식으로는 한계가 있습니다. 다음 편 MCP(Model Context Protocol)에서는 에이전트가 표준 규약으로 외부 도구·데이터에 연결되는 법을 다룹니다.

시리즈: 01 Prompt Chaining → 02 Routing → 03 Parallelization → 04 Reflection → 05 Tool Use → 06 Planning → 07 Multi-Agent → 08 Memory Management → 09 Learning & Adaptation → (다음) 10 MCP

#학습과적응 #LearningAndAdaptation #AI에이전트 #DPO #ThompsonSampling #SICA #피드백학습 #생성형AI

안내: 본 글은 Agentic AI Design Patterns 학습 자료(교재·패턴정의·엔터프라이즈 적용전략·구현 3종)를 재구성한 교육용 콘텐츠입니다. 코드는 개념 설명용 예시이며, 프레임워크 API는 버전에 따라 달라질 수 있습니다.

반응형