반응형
Self-Reflection: AI가 스스로 실수를 잡아내는 시스템
💡 Self-Reflection은 AI가 응답할 때마다 자동으로 규칙 위반을 검사하고, 실패하면 스스로 원인을 분석해서 개선하는 자가 진화 시스템입니다.
왜 이게 필요했을까?
문제 1: "왜 자꾸 검색만 해?"
AI에게 "로그인 기능 구현해줘"라고 하면, 바로 코드를 짜면 될 것 같은데...
사용자: "kidsnote_test에 로그인 구현해줘"
AI 내부: "음... 안전하게 Master로 보내서 RAG 검색이나 하자"
결과: 토큰 15,000개 소비, 응답 8초
Worker로 바로 보냈으면 토큰 4,500개, 응답 3초면 끝났을 일이다.
원인을 파헤쳐 보니:
- 캐시 키에 프롬프트 변경이 반영 안 됨 → 10분간 이전 결과 사용
- Worker 선택 기준이 1줄로 너무 모호 → "안전하게 Master" 선택
- 검증 시스템 없음 → 잘못된 라우팅 감지 불가
문제 2: "규칙 있어도 안 지켜지면 의미 없잖아"
블로그 규칙이 있다:
- 구분선은 하나만 (---)
- 표는 3열 이하
- TL;DR 금지
근데 AI가 이걸 "잊어버린다". Rule Zero 문서에 적어놔도, 매번 읽지 않으면 소용없다.
AI: "블로그 작성 완료했습니다!"
결과: 구분선 2개 → 티스토리 레이아웃 깨짐
사용자: "...다시 해줘"
근본 원인: 검증 시점이 없다. 사용자가 직접 발견해야 한다.
어떻게 해결했나?
핵심 아이디어: AI가 응답할 때마다 자동으로 검증하게 만들자.
[AI 응답 완료]
↓
[Stop Hook 실행] ← 여기서 Self-Reflection 시작
↓
[작업 유형 감지] blog? code? jira?
↓
[규칙 검증] 구분선 개수, 표 열 수, TODO 금지...
↓
[위반 시 경고] "❌ 구분선 2개 사용함!"
두 가지 선택지가 있었다:
- LLM으로 검증 → 토큰 비용 발생, 느림
- 정규식/파일 체크 → 비용 0, 빠름 ✅
토큰 효율이 핵심이니까 2번을 선택했다. Lambda 함수로 규칙을 정의하면 끝:
BLOG_CHECKLIST = [
{
"id": "blog_separator_count",
"description": "구분선은 하나만 사용",
"validator": lambda content: content.count("\\n---\\n") <= 1,
}
]
실제 흐름: AI가 블로그를 쓰면 어떻게 되나?
사용자: "MasterAgent 블로그 써줘"
│
▼
┌─────────────┐
│ BrainAgent │ ← "Worker로 보내야겠다"
└─────────────┘
│
▼
┌─────────────┐
│ AI 응답 │ ← 블로그 작성 완료
└─────────────┘
│
▼
┌─────────────┐
│ Stop Hook │ ← Self-Reflection 시작!
└─────────────┘
│
┌─────┴─────┐
▼ ▼
[작업 감지] [신뢰도 확인]
"blog다" "0.87이면 OK"
│
▼
[블로그 규칙 검증]
- 구분선: 1개 ✅
- 표: 3열 ✅
- TL;DR: 없음 ✅
│
▼
[통과] → 아무 일도 안 일어남 (토큰 0)
만약 위반했다면?
[블로그 규칙 검증]
- 구분선: 2개 ❌
│
▼
[경고 출력]
❌ BLOG_RULE_VIOLATION: 구분선은 하나만 사용 (현재: 2개)
See: common/guidelines/blog/README.md
│
▼
[SYSTEM_INDEX 검증 트리거]
🔍 Checking SYSTEM_INDEX.md consistency...
핵심: 문제 없으면 Skip, 문제 있을 때만 심층 검증. 이게 조건부 검증이다.
한 단계 더: 자가 고도화
검증만으로는 부족했다. 같은 실수를 반복하지 않게 만들고 싶었다.
[1주일 동안 실패 누적]
│
▼
[매주 월요일, SessionEnd Hook]
"지난 7일간 실패 패턴 분석해볼까?"
│
▼
[Gemini로 패턴 추출]
- 패턴 1: 로그 파일 확인 안 하고 버그 분석 (빈도: HIGH)
- 패턴 2: Jira 토큰 확인 안 함 (빈도: MEDIUM)
│
▼
[리포트 생성]
knowledge_base/reports/failure_analysis_20260113.md
│
▼
[MetaLearner 실행]
"brain_agent.py 프롬프트에 이거 추가할까요?"
│
▼
[사용자 승인]
y
│
▼
[다음 세션부터 자동 적용]
결과:
# Before (실패)
사용자: "앱이 크래시 나는데 원인 찾아줘"
AI: "코드를 분석해보면..." (로그 확인 안 함)
# After (성공)
사용자: "앱이 크래시 나는데 원인 찾아줘"
AI: "먼저 로그 파일을 확인합니다.
$ ls -la logs/
$ tail -100 logs/error.log
에러 메시지: NullPointerException at line 42
원인: ..."
실패 → 분석 → 개선 → 다음 성공. 이 사이클이 자동화된 것이다.
또 한 단계: 코드-문서 자동 동기화
라우팅 개선
지표 Before After
| Worker 선택률 | 20% | 80% |
| 평균 토큰 | 15,000 | 4,500 |
| 응답 시간 | 8초 | 3초 |
규칙 준수
지표 Before After
| 블로그 위반율 | 30% | 0% |
| 코드 TODO 잔존 | 15% | 0% |
| 추가 토큰 비용 | - | 0 |
추가 토큰 비용이 0인 이유:
- 정규식/파일 체크만 사용 (LLM 호출 없음)
- 문제 없으면 SYSTEM_INDEX 안 읽음 (조건부 검증)
- 10일 측정 결과, 평균 추가 토큰 0
효과: 숫자로 보는 변화
컴포넌트 역할 트리거
| ChecklistValidator | 블로그/코드 규칙 검증 | 매 응답 |
| RoutingValidator | 신뢰도 0.75 이상 검증 | 매 응답 |
| SystemIndexValidator | Hook 동기화 등 검증 | 위반 시에만 |
| FailureAnalyzer | 실패 패턴 추출 | 매주 월요일 |
| MetaLearner | 프롬프트 자동 개선 | 사용자 승인 |
Self-Reflection의 철학은 단순하다:
"AI도 실수한다. 중요한 건 같은 실수를 반복하지 않는 것."
이제 우리는:
- 블로그 규칙 위반을 사용자가 발견하기 전에 자동으로 잡아낼 수 있다
- 정규식/파일 체크만 사용 (LLM 호출 없음)
- 문제 없으면 SYSTEM_INDEX 안 읽음 (조건부 검증)
더 이상 "규칙 있어도 안 지켜지면 의미 없잖아"라고 할 필요가 없다. AI가 알아서 지킨다.
정리하면
컴포넌트 역할 트리거
| ChecklistValidator | 블로그/코드 규칙 검증 | 매 응답 |
| RoutingValidator | 신뢰도 0.75 이상 검증 | 매 응답 |
| DocSyncChecker | 코드-문서 동기화 경고 | 코드 수정 시 |
| FailureAnalyzer | 실패 패턴 추출 | 매주 월요일 |
| MetaLearner | 프롬프트 자동 개선 | 사용자 승인 |
Self-Reflection의 철학은 단순하다:
"AI도 실수한다. 중요한 건 같은 실수를 반복하지 않는 것."
이제 우리는:
- 블로그 규칙 위반을 사용자가 발견하기 전에 자동으로 잡아낼 수 있다
- 토큰 비용을 70% 절감하면서도 더 정확한 라우팅을 할 수 있다
- AI가 실패하면 스스로 원인을 분석하고 다음엔 같은 실수를 안 하게 만들 수 있다
- 코드 수정하면 관련 문서 업데이트가 자동으로 리마인드된다
더 이상 "규칙 있어도 안 지켜지면 의미 없잖아"라고 할 필요가 없다. AI가 알아서 지킨다.
반응형
'AI > Ai Agent' 카테고리의 다른 글
| MasterAgent: AI가 파이프라인을 실행하는 방법 (0) | 2026.01.08 |
|---|---|
| BrainAgent(라우터): AI가 0.01초 만에 질문을 분석하는 교통경찰 (0) | 2026.01.08 |
| Hook: AI가 알아서 다 해주는 마법의 비밀 (0) | 2026.01.07 |
| Setup 시스템: 새 컴퓨터에서 5분 안에 AI 환경 완성하기 (0) | 2026.01.07 |
| AI Agent, 왜 지금 배워야 할까? (0) | 2026.01.07 |