240 lines
5.6 KiB
Markdown
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
|