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

5.6 KiB

자기평가 시스템 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: 플러그인 자동화 (최고 품질)

코드:

// 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