491 lines
14 KiB
Markdown
491 lines
14 KiB
Markdown
# 자기평가 시스템 V3 - 이중삼중 검증 프레임워크
|
|
|
|
## 문제 진단 (V2의 한계)
|
|
|
|
### 현재 V2 시스템
|
|
```markdown
|
|
✅/⚠️ 완성도: [X/Y]
|
|
✅/⚠️ 정확성: [OK/WARNING]
|
|
✅/⚠️ 톤: [Jarvis/ChatGPT]
|
|
✅/⚠️ 간결성: [X emojis]
|
|
💡 개선: [구체적 액션]
|
|
```
|
|
|
|
### V2의 근본적 문제
|
|
|
|
**1. 자기평가의 편향 (Self-Evaluation Bias)**
|
|
- AI가 자신의 출력을 평가하는 것은 근본적으로 편향됨
|
|
- "내가 잘했다"고 생각하면 실제로 문제가 있어도 OK 판정
|
|
- 주관적 기준(톤, 간결성)은 일관성 없이 평가됨
|
|
|
|
**2. 검증 메커니즘 부재**
|
|
- 평가 결과를 검증하는 외부 시스템 없음
|
|
- 잘못된 평가를 감지할 방법 없음
|
|
- 평가 자체가 틀렸는지 알 수 없음
|
|
|
|
**3. 객관적 지표 부족**
|
|
- "완성도 X/Y"가 무엇인지 모호
|
|
- "정확성 OK"의 기준 불명확
|
|
- 측정 가능한 메트릭 없음
|
|
|
|
**4. 학습 루프 부재**
|
|
- 평가 결과가 다음 실행에 반영 안 됨
|
|
- 같은 실수 반복 가능
|
|
- 개선 방향 제시만 하고 실제 개선은 안 됨
|
|
|
|
---
|
|
|
|
## 업계 베스트 프랙티스 (2025 최신)
|
|
|
|
### 1. 이중 검증 시스템 (Dual Validation)
|
|
|
|
**출처:** Medium (Dec 2025), "AI agent evaluate another AI agent"
|
|
|
|
**방식:**
|
|
```
|
|
1차: Self-Evaluation (자기평가)
|
|
↓
|
|
2차: External Validation (외부 검증 - 다른 AI 또는 규칙 기반)
|
|
↓
|
|
3차: Audit (감사 - 인간 또는 더 강력한 모델)
|
|
```
|
|
|
|
**예시:**
|
|
- Haiku 모델이 크론 실행 → 자기평가
|
|
- Sonnet 모델이 평가 결과 재검증
|
|
- 불일치 시 정우님께 보고
|
|
|
|
### 2. 객관적 메트릭 측정
|
|
|
|
**출처:** WEF 2025 AI Agents Framework, Galileo AI
|
|
|
|
**측정 항목:**
|
|
- **Task Success Rate:** 요청된 작업을 완수했는가?
|
|
- **Completion Time:** 예상 시간 내 완료했는가?
|
|
- **Error Frequency:** 도구 호출 실패, API 에러 발생 횟수
|
|
- **Token Efficiency:** 불필요한 토큰 낭비 없는가?
|
|
- **Baseline Error Rate:** 과거 평균 대비 현재 성능
|
|
|
|
**구체적 지표 예시:**
|
|
```json
|
|
{
|
|
"taskSuccess": true,
|
|
"completionTimeMs": 3427,
|
|
"expectedTimeMs": 5000,
|
|
"toolCallErrors": 0,
|
|
"tokenUsage": 2847,
|
|
"baselineTokenAvg": 3200,
|
|
"errorRate": 0.0,
|
|
"baselineErrorRate": 0.02
|
|
}
|
|
```
|
|
|
|
### 3. 다기준 평가 (Multi-Criteria)
|
|
|
|
**출처:** EMNLP 2025 ReviewEval, Medium AI Agent Evaluation
|
|
|
|
**4대 축:**
|
|
1. **Accuracy (정확성):** 사실 확인, 데이터 검증
|
|
2. **Completeness (완성도):** 요구사항 모두 충족했는가
|
|
3. **Relevance (관련성):** 맥락에 맞는 응답인가
|
|
4. **Quality (품질):** 톤, 스타일, 포맷팅
|
|
|
|
**각 축을 1-5 점수로 정량화:**
|
|
```
|
|
Accuracy: 5/5 (모든 데이터 검증됨)
|
|
Completeness: 4/5 (2/3 요구사항만 충족)
|
|
Relevance: 5/5 (맥락 완벽)
|
|
Quality: 3/5 (톤이 ChatGPT 같음)
|
|
```
|
|
|
|
### 4. Reflection 메커니즘
|
|
|
|
**출처:** Anthropic Research (Bloom), OpenAI Cookbook
|
|
|
|
**CoT (Chain of Thought) Reflection:**
|
|
```
|
|
1. 실행 (Do)
|
|
2. 자기평가 (Self-Evaluate)
|
|
3. 반성 (Reflect): "왜 이렇게 했나? 더 나은 방법은?"
|
|
4. 계획 (Plan Next): "다음엔 이렇게 개선"
|
|
```
|
|
|
|
**예시:**
|
|
```markdown
|
|
## Reflection
|
|
**What I did:** TQQQ 시세 체크 후 -4.5% 보고
|
|
**What went well:** 정확한 데이터, 빠른 응답
|
|
**What went wrong:** 환율 영향 설명 누락
|
|
**Why:** 스크립트가 환율 데이터 미포함
|
|
**Next time:** get-exchange-rate.py 통합 확인
|
|
```
|
|
|
|
### 5. Red Teaming & Continuous Monitoring
|
|
|
|
**출처:** Microsoft Azure Agent Factory, PwC Multi-Agent Validation
|
|
|
|
**사전 검증 (Pre-deployment):**
|
|
- Adversarial inputs 테스트
|
|
- Edge case 시뮬레이션
|
|
- Worst-case scenario 검증
|
|
|
|
**실시간 모니터링 (Post-deployment):**
|
|
- Drift detection (성능 저하 감지)
|
|
- Anomaly detection (비정상 행동 감지)
|
|
- Compliance monitoring (정책 위반 감지)
|
|
|
|
---
|
|
|
|
## V3 설계안: 3단계 검증 프레임워크
|
|
|
|
### Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Stage 1: Execution + Self-Evaluation (Haiku) │
|
|
│ - 크론 실행 │
|
|
│ - 즉시 자기평가 (V2 형식 유지) │
|
|
│ - 객관적 메트릭 수집 │
|
|
└──────────────┬──────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Stage 2: External Validation (Rule-Based) │
|
|
│ - 메트릭 검증 (threshold 체크) │
|
|
│ - 포맷 검증 (이모지/구분선/헤더 카운트) │
|
|
│ - 일관성 검증 (과거 평가와 비교) │
|
|
└──────────────┬──────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────┐
|
|
│ Stage 3: Periodic Audit (Weekly, Sonnet) │
|
|
│ - 주간 평가 리뷰 (100개 평가 재검증) │
|
|
│ - 패턴 분석 (반복 실수, 개선 트렌드) │
|
|
│ - 보고서 생성 (정우님께 전달) │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Stage 1: Execution + Self-Evaluation
|
|
|
|
**크론 실행 직후 (Haiku 모델):**
|
|
|
|
```markdown
|
|
## 자기평가 (V2 유지)
|
|
|
|
✅ 완성도: 3/3 (TQQQ 시세, 환율, 변동률 모두 포함)
|
|
✅ 정확성: OK (Yahoo Finance 15분 지연 데이터)
|
|
⚠️ 톤: ChatGPT-like ("변동 감지했습니다" - 로봇 톤)
|
|
✅ 간결성: 2 emojis, 적절
|
|
💡 개선: "감지했습니다" → "보고합니다" 또는 "-4.5% 낙하 중"
|
|
|
|
## 객관적 메트릭
|
|
|
|
- Task Success: ✅ (모든 도구 호출 성공)
|
|
- Completion Time: 3.2s (baseline 4.1s 대비 빠름)
|
|
- Tool Errors: 0
|
|
- Token Usage: 847 (baseline 920)
|
|
- Format Violations: 1 (forbidden phrase detected)
|
|
```
|
|
|
|
### Stage 2: External Validation (Rule-Based)
|
|
|
|
**크론 완료 1분 후 (자동 스크립트):**
|
|
|
|
```javascript
|
|
// scripts/validate-self-review.js
|
|
const evaluation = parseSelfReview(cronOutput);
|
|
|
|
// 1. 메트릭 검증
|
|
if (evaluation.toolErrors > 2) {
|
|
flag("HIGH_ERROR_RATE");
|
|
}
|
|
if (evaluation.completionTime > evaluation.baseline * 1.5) {
|
|
flag("PERFORMANCE_DEGRADATION");
|
|
}
|
|
|
|
// 2. 포맷 검증
|
|
const formatViolations = detectFormatViolations(cronOutput);
|
|
if (formatViolations.length !== evaluation.formatViolations) {
|
|
flag("INACCURATE_SELF_EVALUATION", {
|
|
selfReported: evaluation.formatViolations,
|
|
actual: formatViolations.length
|
|
});
|
|
}
|
|
|
|
// 3. 일관성 검증
|
|
const recentEvals = loadRecentEvaluations(7); // 최근 7일
|
|
if (evaluation.tone === "Jarvis" && recentEvals.filter(e => e.tone === "ChatGPT").length > 5) {
|
|
flag("INCONSISTENT_TONE_EVALUATION", "Self-reported Jarvis but recent history shows ChatGPT pattern");
|
|
}
|
|
|
|
// 4. 결과 기록
|
|
logValidationResult({
|
|
cronId: cronId,
|
|
timestamp: Date.now(),
|
|
selfEvaluation: evaluation,
|
|
validationFlags: flags,
|
|
verdict: flags.length === 0 ? "PASS" : "FAIL"
|
|
});
|
|
```
|
|
|
|
**검증 결과 예시:**
|
|
|
|
```json
|
|
{
|
|
"cronId": "a98f06f7-...",
|
|
"timestamp": 1738652420000,
|
|
"selfEvaluation": {
|
|
"completeness": "3/3",
|
|
"accuracy": "OK",
|
|
"tone": "ChatGPT-like",
|
|
"conciseness": "2 emojis"
|
|
},
|
|
"validationFlags": [
|
|
{
|
|
"type": "INACCURATE_SELF_EVALUATION",
|
|
"severity": "MEDIUM",
|
|
"detail": "Self-reported 1 format violation, actual count is 3",
|
|
"evidence": ["알겠습니다", "변동 감지했습니다", "---구분선 3개"]
|
|
},
|
|
{
|
|
"type": "TONE_DRIFT",
|
|
"severity": "LOW",
|
|
"detail": "Self-reported ChatGPT-like but improvement suggestion is vague"
|
|
}
|
|
],
|
|
"verdict": "FAIL"
|
|
}
|
|
```
|
|
|
|
### Stage 3: Periodic Audit (Weekly)
|
|
|
|
**주간 크론 (일요일 밤, Sonnet 모델):**
|
|
|
|
```markdown
|
|
## 주간 자기평가 감사 보고서 (2026-02-01 ~ 2026-02-07)
|
|
|
|
### 전체 통계
|
|
|
|
- 총 크론 실행: 672회
|
|
- 자기평가 수행: 672회 (100%)
|
|
- External Validation 통과: 584회 (86.9%)
|
|
- External Validation 실패: 88회 (13.1%)
|
|
|
|
### 실패 원인 분석
|
|
|
|
**1. 부정확한 자기평가 (52회, 59%)**
|
|
- Self-reported "OK" but actual errors detected
|
|
- Self-reported "Jarvis" but forbidden phrases used
|
|
- 예시: "완료!" (forbidden) → self-eval said "✅ 톤: Jarvis"
|
|
|
|
**2. 포맷 위반 미감지 (28회, 32%)**
|
|
- Self-eval: "2 emojis" but actual: 5 emojis
|
|
- Self-eval: "1 separator" but actual: 4 separators
|
|
|
|
**3. 개선 제안 불이행 (8회, 9%)**
|
|
- Week 1: "다음엔 환율 포함" → Week 2: 여전히 누락
|
|
- Week 3: "ChatGPT 톤 수정" → Week 4: 동일 패턴 반복
|
|
|
|
### 권장 조치
|
|
|
|
**즉시 조치 (Critical):**
|
|
1. Self-evaluation 기준 명확화
|
|
- "OK"의 정의: 0 tool errors, 0 data inaccuracies
|
|
- "Jarvis"의 정의: 0 forbidden phrases, witty opening
|
|
2. Evaluation 전 체크리스트 강제 실행
|
|
- Response Guard 규칙 재확인
|
|
- 금지 표현 스캔 (알겠습니다, 완료, 처리)
|
|
- 포맷 카운트 (이모지, 구분선, 헤더)
|
|
|
|
**중기 조치 (Important):**
|
|
1. Reflection 추가
|
|
- "왜 이렇게 평가했나?" 질문 추가
|
|
- 평가 근거 명시 (예: "OK - yf 스크립트 exit 0")
|
|
2. Feedback loop 구현
|
|
- Validation 실패 시 다음 크론에 경고 주입
|
|
- "지난번 당신은 X를 놓쳤습니다. 이번엔 체크하세요."
|
|
|
|
**장기 조치 (Nice to Have):**
|
|
1. LLM-as-Judge (Opus 모델로 일부 재평가)
|
|
2. Human-in-the-Loop (월 1회 정우님 리뷰)
|
|
```
|
|
|
|
---
|
|
|
|
## 구현 우선순위
|
|
|
|
### Phase 1: 즉시 적용 (오늘)
|
|
|
|
**1. Stage 2 구현 (External Validation 스크립트)**
|
|
|
|
- [ ] `scripts/validate-self-review.js` 생성
|
|
- 메트릭 검증
|
|
- 포맷 검증
|
|
- 일관성 검증
|
|
- [ ] 모든 self-evaluation 크론에 `+1min` 검증 크론 추가
|
|
- [ ] 검증 결과 저장 (`memory/validation-YYYY-MM-DD.jsonl`)
|
|
|
|
**2. 자기평가 체크리스트 강화**
|
|
|
|
현재 V2 형식에 추가:
|
|
```markdown
|
|
## 자기평가 체크리스트 (Pre-Flight)
|
|
|
|
Before evaluation, I checked:
|
|
- [ ] Forbidden phrases scan (알겠습니다, 완료, 처리 등)
|
|
- [ ] Emoji count (actual: X, limit: 3)
|
|
- [ ] Separator count (actual: Y, limit: 2)
|
|
- [ ] Header spacing (blank lines before/after)
|
|
- [ ] Tool errors (count: Z)
|
|
|
|
## 자기평가
|
|
|
|
✅ 완성도: X/Y [근거: ...]
|
|
✅ 정확성: OK [근거: ...]
|
|
...
|
|
```
|
|
|
|
### Phase 2: 1주일 내 적용
|
|
|
|
**3. Reflection 메커니즘 추가**
|
|
|
|
```markdown
|
|
## Reflection (What I Learned)
|
|
|
|
**What went well:**
|
|
- 빠른 응답 (3.2s)
|
|
- 정확한 데이터
|
|
|
|
**What went wrong:**
|
|
- 로봇 톤 사용 ("감지했습니다")
|
|
- 환율 설명 누락
|
|
|
|
**Root cause:**
|
|
- Response Guard 재확인 안 함
|
|
- 스크립트 출력 그대로 전달
|
|
|
|
**Next time:**
|
|
- 응답 전 30초 페르소나 체크
|
|
- 환율 데이터 필수 포함 확인
|
|
```
|
|
|
|
**4. Stage 3 구현 (주간 감사 크론)**
|
|
|
|
- [ ] 일요일 밤 크론 생성 (Sonnet 모델)
|
|
- [ ] 최근 7일 validation 결과 분석
|
|
- [ ] 패턴 발견 및 보고서 생성
|
|
- [ ] 정우님께 Discord 전송
|
|
|
|
### Phase 3: 1개월 내 적용 (선택)
|
|
|
|
**5. LLM-as-Judge (Opus 재평가)**
|
|
|
|
- 주간 감사 시 Validation FAIL 건 중 10개 샘플링
|
|
- Opus 모델로 재평가 (Haiku 자기평가 vs Opus 평가 비교)
|
|
- 정확도 측정
|
|
|
|
**6. Dashboard (시각화)**
|
|
|
|
- `memory/validation-*.jsonl` → 그래프
|
|
- Pass rate 트렌드
|
|
- 주요 실패 원인 분포
|
|
- 개선 효과 측정
|
|
|
|
---
|
|
|
|
## 예상 효과
|
|
|
|
### 정량적 개선
|
|
|
|
**현재 (V2):**
|
|
- 자기평가 수행률: ~50% (AI가 가끔 까먹음)
|
|
- 평가 정확도: 알 수 없음
|
|
- 개선 반영률: 0%
|
|
|
|
**V3 적용 후:**
|
|
- 자기평가 수행률: 100% (체크리스트 강제)
|
|
- 평가 정확도: 90%+ (External Validation으로 검증)
|
|
- 개선 반영률: 70%+ (Feedback loop)
|
|
|
|
### 정성적 개선
|
|
|
|
1. **신뢰성 향상**
|
|
- "내가 잘했다"는 자기 주장 → "외부 검증 통과"라는 객관적 증거
|
|
- 정우님이 크론 결과를 믿을 수 있음
|
|
|
|
2. **학습 효과**
|
|
- 같은 실수 반복 방지
|
|
- Reflection으로 근본 원인 파악
|
|
- 주간 감사로 장기 트렌드 파악
|
|
|
|
3. **자율성 증가**
|
|
- 자가 진단 → 자가 치료
|
|
- 정우님 개입 없이 스스로 개선
|
|
|
|
---
|
|
|
|
## 리스크 & 대응
|
|
|
|
### Risk 1: 토큰 폭증
|
|
|
|
**문제:** Stage 2 검증 크론 추가 → 크론 2배
|
|
|
|
**대응:**
|
|
- Stage 2는 규칙 기반 (스크립트, LLM 불필요)
|
|
- 토큰 사용 0
|
|
- Stage 3는 주 1회만
|
|
|
|
### Risk 2: False Positive
|
|
|
|
**문제:** External Validation이 잘못된 평가를 FAIL 처리
|
|
|
|
**대응:**
|
|
- Validation 규칙을 점진적으로 튜닝
|
|
- 첫 1주일은 log만 (알림 안 함)
|
|
- 정확도 80% 이상 확인 후 알림 활성화
|
|
|
|
### Risk 3: 복잡성 증가
|
|
|
|
**문제:** 시스템이 너무 복잡해짐
|
|
|
|
**대응:**
|
|
- Phase 1만 먼저 적용 (1-2일 소요)
|
|
- 효과 확인 후 Phase 2 결정
|
|
- Phase 3는 선택사항
|
|
|
|
---
|
|
|
|
## 다음 단계
|
|
|
|
### 즉시 실행 (정우님 승인 후)
|
|
|
|
1. ✅ 웹 검색 완료 (최신 방법론 조사)
|
|
2. ✅ V3 설계 완료 (이 문서)
|
|
3. ⏳ `scripts/validate-self-review.js` 구현
|
|
4. ⏳ 14개 크론에 validation 크론 추가
|
|
5. ⏳ 체크리스트 강화된 V2.5 형식 배포
|
|
6. ⏳ 1주일 모니터링
|
|
|
|
### 정우님 결정 필요
|
|
|
|
- **Phase 1 진행 여부:** 즉시 시작? 아니면 더 검토?
|
|
- **Phase 2/3 필요성:** 주간 감사까지 갈 것인가?
|
|
- **검증 실패 시 알림:** Discord 알림? 아니면 로그만?
|
|
|
|
---
|
|
|
|
## 참고 자료
|
|
|
|
1. **Galileo AI (2025):** Self-Evaluation in AI Agents With Chain of Thought
|
|
2. **WEF 2025:** AI Agents in Action Framework
|
|
3. **Medium (Dec 2025):** Self-Improving AI Agent That Learns From Feedback
|
|
4. **Microsoft Azure (Sep 2025):** Top 5 Agent Observability Best Practices
|
|
5. **PwC:** Validating Multi-Agent AI Systems
|
|
6. **n8n Blog:** 15 Best Practices for Deploying AI Agents in Production
|
|
7. **Anthropic Research:** Bloom - Self-Evaluation Framework
|
|
8. **OpenAI Cookbook:** Self-Evolving Agents - Autonomous Retraining
|
|
|
|
---
|
|
|
|
**작성:** 2026-02-04 17:57 KST
|
|
**버전:** V3 Draft 1
|
|
**상태:** 정우님 리뷰 대기
|