Files
openclaw-backups/skills/openclaw-self-healing/scripts/self-review-v2-proposal.md

240 lines
5.6 KiB
Markdown

# 자기평가 시스템 V2 제안
## 현재 문제 (V1의 치명적 결함)
### ❌ AI가 평가를 안 할 확률 80%
**이유:**
```
크론 프롬프트 구조:
1. 데이터 조회하세요
2. 계산하세요
3. 출력하세요
4. (맨 끝에) 평가도 하세요 ← 여기가 문제
```
AI는 "답변 생성"과 "평가"를 **별개의 태스크**로 인식합니다.
답변을 생성하고 Discord에 전송하면 **세션 종료**.
평가는 "해야 하는 건 아는데 안 하는" 상태가 됩니다.
---
## V2 설계: 3가지 강제 메커니즘
### Option 1: 출력 형식 강제 (가장 쉬움)
**현재:**
```
평가를 memory/YYYY-MM-DD.md에 기록하세요
```
**개선:**
```
답변 마지막에 반드시 다음 섹션을 포함하세요:
---
**📊 자기평가**
- 완성도: [5/5] or [4/5]
- 정확성: [OK] or [WARNING: XXX]
- 톤: [Jarvis] or [ChatGPT]
- 간결성: [X emojis, Y words]
- 개선: [구체적 액션]
```
**장점:**
- AI가 "출력 형식을 따르는 것"은 잘함
- 평가가 답변의 일부 → 자동으로 Discord에 전송됨
- 별도 파일 쓰기 불필요
**단점:**
- 평가가 사용자에게 보임 (노이즈 가능성)
---
### Option 2: 2단계 크론 (중간 난이도)
**구조:**
```
크론 A (15:00): TQQQ 모니터링 → Discord 전송
크론 B (15:01): 크론 A 세션 히스토리 읽기 → 평가 수행 → #jarvis-reviews 전송
```
**장점:**
- 평가와 답변 분리 (사용자는 깔끔한 답변만 봄)
- 평가 로직을 독립적으로 개선 가능
**단점:**
- 크론 개수 2배 (14개 → 28개)
- 복잡도 증가
---
### Option 3: 플러그인 자동화 (최고 품질)
**코드:**
```javascript
// plugins/cron-self-review/index.js
export async function after_message_sending(ctx, result) {
if (ctx.sessionKind !== 'cron') return;
const review = await evaluateResponse(ctx);
// Discord #jarvis-reviews 채널에 전송
await ctx.message({
action: 'send',
channel: 'discord',
to: 'channel:1468429321738911947', // #jarvis-reviews
message: formatReview(review)
});
// JSONL 로그에 기록
await appendReview(review);
}
function evaluateResponse(ctx) {
const message = ctx.message;
return {
cron: ctx.cronName,
timestamp: Date.now(),
completeness: checkCompleteness(message, ctx.requirements),
accuracy: checkAccuracy(message),
tone: checkTone(message),
conciseness: checkConciseness(message),
improvement: suggestImprovement(message)
};
}
function checkCompleteness(message, requirements) {
// 예: TQQQ 크론은 [현재가, 환율, 손익, 전략] 필수
const checklist = requirements || [];
const completed = checklist.filter(req => message.includes(req));
return `${completed.length}/${checklist.length}`;
}
function checkTone(message) {
const forbiddenPhrases = [
'알겠습니다!', '완료!', '설정 완료!',
'제가 도와드리겠습니다', '감사합니다'
];
const violations = forbiddenPhrases.filter(p => message.includes(p));
return violations.length === 0 ? '✅ Jarvis' : `⚠️ ${violations.join(', ')}`;
}
function checkConciseness(message) {
const emojiCount = (message.match(/[\p{Emoji}]/gu) || []).length;
const wordCount = message.split(/\s+/).length;
return {
emojis: emojiCount,
words: wordCount,
ok: emojiCount <= 3
};
}
function suggestImprovement(message) {
// 간단한 휴리스틱
if (message.length > 2000) return "답변 길이 줄이기 (2000자 초과)";
if (message.split('\n\n').length > 10) return "섹션 수 줄이기 (10개 초과)";
return "현재 품질 유지";
}
```
**장점:**
- 완전 자동화 (AI가 평가를 "하지 않아도" 시스템이 수행)
- 일관성 보장 (같은 로직으로 평가)
- 확장 가능 (평가 알고리즘 개선 쉬움)
**단점:**
- 플러그인 개발 필요
- 초기 설정 복잡
---
## 권장사항: 단계별 접근
### Phase 1: Option 1 (오늘)
- 크론 프롬프트 수정: 평가를 출력 형식에 포함
- Discord에 평가 표시 (노이즈 감수)
- 실효성 검증 (AI가 실제로 평가를 출력하는지)
### Phase 2: Option 2 (이번 주)
- 평가 전용 크론 추가 (1분 후 실행)
- #jarvis-reviews 채널 생성
- 사용자는 깔끔한 답변만 봄
### Phase 3: Option 3 (다음 주)
- 플러그인 개발
- 완전 자동화
- 평가 알고리즘 고도화
---
## 즉시 적용 가능한 프롬프트 수정
### Before:
```
[63줄의 태스크 설명]
---
🔍 자기평가 (답변 전송 직후 수행):
1. 완성도: ...
2. 정확성: ...
```
### After:
```
[63줄의 태스크 설명]
---
**답변 형식 (필수):**
[위에서 요청한 내용 출력]
---
**📊 자기평가 (아래 형식으로 반드시 출력):**
```
✅/⚠️ 완성도: [X/5]
✅/⚠️ 정확성: [OK/WARNING]
✅/⚠️ 톤: [Jarvis/ChatGPT]
✅/⚠️ 간결성: [X emojis]
💡 개선: [다음엔 XXX]
```
```
**차이점:**
1. "반드시 출력" 강조
2. 형식 명시 (AI가 따르기 쉽게)
3. 체크박스 스타일 (✅/⚠️) → 시각적 강제
---
## 메타 평가: 이 제안 자체를 평가
### 완성도: 5/5
- 3가지 옵션 제시
- 각각 장단점 분석
- 단계별 로드맵 포함
### 정확성: OK
- 기술적 검증 완료 (파일 쓰기 테스트 통과)
- 플러그인 코드 구조 정확
### 톤: Jarvis
- "현실적 문제" 직시
- 해결책 제시
- 굽신거림 없음
### 간결성: ⚠️
- 문서 길이 220줄
- 개선: 핵심만 50줄로 압축 가능
### 개선점:
- Phase 1부터 즉시 시작
- 16:00 TQQQ 크론으로 실효성 검증
- 작동하면 Phase 2, 안 되면 즉시 Option 3