AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
---
|
||||
|
||||
**V5.0.1 자기평가 (Discord 출력 금지!)**
|
||||
|
||||
작업 완료 후 다음을 실행하세요:
|
||||
|
||||
1. 작업 품질을 1-10점으로 자체 평가
|
||||
2. 사용한 토큰 추정 (입력/출력)
|
||||
3. 문제점, 원인, 다음 액션 파악
|
||||
4. 다음 명령 실행:
|
||||
|
||||
```bash
|
||||
bash ~/openclaw/scripts/self-review-logger.sh \
|
||||
"CRON_NAME" \
|
||||
"점수(1-10)" \
|
||||
"입력토큰추정" \
|
||||
"출력토큰추정" \
|
||||
"ok 또는 error" \
|
||||
"문제점(없으면 '없음')" \
|
||||
"원인(없으면 'N/A')" \
|
||||
"다음액션(없으면 '없음')"
|
||||
```
|
||||
|
||||
**중요:**
|
||||
- 실제 값으로 치환할 것 (플레이스홀더 금지)
|
||||
- 파일은 `memory/self-review/YYYY-MM-DD/CRON_NAME_HHMMSS.yaml`에 저장
|
||||
- 사용자에게는 출력하지 말 것
|
||||
@@ -0,0 +1,220 @@
|
||||
# 품질 체크 V4.0
|
||||
|
||||
> 점수 시스템 폐지. 객관 지표 + 목표 대비 측정 + 의사결정 투명성.
|
||||
|
||||
## 출력 형식
|
||||
|
||||
```
|
||||
╭─────── 🔍 ───────╮
|
||||
│ **품질 체크 V4.0**
|
||||
├───────────────────
|
||||
│ **객관 지표**
|
||||
│ 도구: X회 호출 / Y회 실패 (실패율: Z%)
|
||||
│ 응답: X초 (목표: <15초) [✓/✗]
|
||||
│ 재시도: X회 (목표: 0회) [✓/✗]
|
||||
│ 정확도: N개 중 M개 유효 (M/N%)
|
||||
│ 토큰: X tokens (예산 대비: Y%)
|
||||
│
|
||||
│ **의사결정 추론** (CoT)
|
||||
│ • 도구 선택: [왜 이 도구를 사용했는가]
|
||||
│ • 접근 방법: [왜 이 방법을 택했는가]
|
||||
│ • 트레이드오프: [어떤 선택지를 고려했는가]
|
||||
│
|
||||
│ **이번 실패/미흡** (필수 1개+)
|
||||
│ • [구체적 사항]
|
||||
│
|
||||
│ **즉시 개선**
|
||||
│ • [다음부터 적용할 것]
|
||||
╰─────── 🔍 ───────╯
|
||||
```
|
||||
|
||||
## 규칙
|
||||
|
||||
### 1. 점수 금지
|
||||
- ❌ "9/10", "10점", "총점" 등 점수 표현 금지
|
||||
- ❌ "잘했다", "완벽", "문제없음" 등 자화자찬 금지
|
||||
|
||||
### 2. 목표 대비 측정
|
||||
|
||||
**필수 메트릭**:
|
||||
- 도구 호출 횟수 / 실패 횟수 / **실패율 계산**
|
||||
- 응답 생성 시간 / **목표 시간 대비**
|
||||
- 재시도 횟수 / **목표(0회) 대비**
|
||||
- 정확도 (API 응답/데이터 유효성)
|
||||
- 토큰 사용량 / **예산 대비 비율**
|
||||
|
||||
**목표 기준**:
|
||||
- 응답 시간: <15초 (복잡한 작업 <30초)
|
||||
- 재시도: 0회 (API 에러는 예외)
|
||||
- 도구 실패율: <5%
|
||||
- 정확도: >95%
|
||||
- 토큰: 예산의 <80%
|
||||
|
||||
**표시 방법**:
|
||||
- 목표 달성: [✓]
|
||||
- 목표 미달성: [✗]
|
||||
|
||||
### 3. 의사결정 추론 (CoT) 필수
|
||||
|
||||
**왜 기록하는가?**
|
||||
- 의사결정 과정의 투명성 확보
|
||||
- 같은 상황에서 더 나은 선택 가능
|
||||
- 트레이드오프 이해를 통한 개선
|
||||
|
||||
**기록 항목**:
|
||||
1. **도구 선택**: 왜 A 도구를 사용했는가? (B, C는 왜 안 썼는가?)
|
||||
2. **접근 방법**: 왜 이 방법을 택했는가? (다른 방법은?)
|
||||
3. **트레이드오프**: 어떤 선택지를 고려했는가? (속도 vs 정확도, 간결 vs 완전성 등)
|
||||
|
||||
**예시**:
|
||||
```
|
||||
│ **의사결정 추론**
|
||||
│ • 도구 선택: Grep 대신 Task/Explore 사용 → 광범위 검색 필요
|
||||
│ • 접근 방법: 병렬 검색 대신 순차 → Rate Limit 회피
|
||||
│ • 트레이드오프: 속도 희생, 정확도 우선 (사용자가 결과 품질 중시)
|
||||
```
|
||||
|
||||
### 4. 실패/미흡 필수
|
||||
|
||||
**최소 1개 이상** 작성 필수. "없음" 금지.
|
||||
|
||||
찾는 방법:
|
||||
- 더 간결할 수 있었나?
|
||||
- 불필요한 도구 호출 있었나?
|
||||
- 사용자가 재질문해야 했나?
|
||||
- 포맷이 최적이었나?
|
||||
- 정보 누락은?
|
||||
- **목표 미달성 항목은?**
|
||||
- **CoT에서 더 나은 선택이 있었나?**
|
||||
|
||||
아무리 잘해도 **개선 여지는 항상 있다.**
|
||||
|
||||
### 5. 즉시 개선
|
||||
|
||||
다음 응답부터 바로 적용할 구체적 액션.
|
||||
추상적 다짐 금지 ("더 노력하겠다" ❌)
|
||||
|
||||
**좋은 예**:
|
||||
- ✓ "다음엔 Grep 전에 파일 개수 확인 (ls | wc -l)"
|
||||
- ✓ "병렬 검색 시 2-3개씩 묶어서 실행"
|
||||
- ✓ "응답 시간 15초 초과 시 중간 진행 상황 출력"
|
||||
|
||||
**나쁜 예**:
|
||||
- ✗ "더 빠르게 하겠다"
|
||||
- ✗ "주의하겠다"
|
||||
- ✗ "노력하겠다"
|
||||
|
||||
## 저장
|
||||
|
||||
```bash
|
||||
cat >> ~/openclaw/memory/self-review-$(date '+%Y-%m-%d').md << 'EOF'
|
||||
## HH:MM 크론명
|
||||
[품질 체크 박스]
|
||||
EOF
|
||||
```
|
||||
|
||||
## 메트릭 자동 수집 (선택)
|
||||
|
||||
일부 메트릭은 자동 수집 가능:
|
||||
|
||||
```javascript
|
||||
// 예시: cron에서 자동 측정
|
||||
const startTime = Date.now();
|
||||
const toolCalls = [];
|
||||
const errors = [];
|
||||
|
||||
try {
|
||||
// 작업 실행
|
||||
const result = await executeCron();
|
||||
|
||||
// 자동 메트릭
|
||||
const metrics = {
|
||||
duration: (Date.now() - startTime) / 1000,
|
||||
toolCalls: toolCalls.length,
|
||||
failures: errors.length,
|
||||
failureRate: (errors.length / toolCalls.length * 100).toFixed(1)
|
||||
};
|
||||
|
||||
// self-review에 자동 포함
|
||||
} catch (e) {
|
||||
errors.push(e);
|
||||
}
|
||||
```
|
||||
|
||||
## 주간 외부 검증
|
||||
|
||||
매주 일요일 23:30 Opus가 검토:
|
||||
- 실패/미흡이 실제로 개선됐는지
|
||||
- 같은 실수 반복 여부
|
||||
- 개선 패턴 분석
|
||||
- **목표 달성률 트렌드**
|
||||
- **CoT 품질 평가**
|
||||
|
||||
## 월간 KPI 리포트
|
||||
|
||||
매월 첫째 주 월요일 자동 생성:
|
||||
|
||||
```markdown
|
||||
# 2026-02 자가개선 KPI
|
||||
|
||||
## 목표 달성률
|
||||
- 응답 시간 목표: 85% 달성 (17/20 cron)
|
||||
- 재시도 0회: 90% 달성 (18/20 cron)
|
||||
- 도구 실패율 <5%: 95% 달성 (19/20 cron)
|
||||
|
||||
## 트렌드
|
||||
- 평균 응답 시간: 12s → 10s (⬇️ 17%)
|
||||
- 도구 실패율: 6% → 3% (⬇️ 50%)
|
||||
- 같은 실수 반복: 3회 → 0회 (✅)
|
||||
|
||||
## 개선 필요 영역
|
||||
- [자동 식별된 약점]
|
||||
```
|
||||
|
||||
## V3.3 대비 변경사항
|
||||
|
||||
**추가됨**:
|
||||
- 목표 대비 측정 ([✓/✗] 표시)
|
||||
- 실패율 계산
|
||||
- 정확도 측정
|
||||
- 토큰 사용량 추적
|
||||
- **의사결정 추론 (CoT) 섹션**
|
||||
- 월간 KPI 리포트
|
||||
|
||||
**유지됨**:
|
||||
- 점수 시스템 폐지
|
||||
- 실패/미흡 필수 (최소 1개)
|
||||
- 즉시 개선 (구체적 액션)
|
||||
- 주간 외부 검증
|
||||
|
||||
**목적**:
|
||||
- V3.3: 자화자찬 방지, 객관성 확보
|
||||
- V4.0: + 정량적 개선 추적 + 의사결정 투명성
|
||||
|
||||
## 마이그레이션 가이드
|
||||
|
||||
### 기존 cron 업데이트
|
||||
|
||||
1. `~/openclaw/scripts/add-self-review.js` 수정
|
||||
2. Template path: `v3.3.md` → `v4.0.md`
|
||||
3. 각 cron에 목표 설정 추가
|
||||
|
||||
### 점진적 전환
|
||||
|
||||
**Week 1**: 5개 cron을 V4.0으로 시범 적용
|
||||
**Week 2**: 결과 검토 후 전체 확대
|
||||
**Week 3**: V3.3 완전 폐기
|
||||
|
||||
### A/B Testing
|
||||
|
||||
실험군과 대조군으로 나눠서 비교:
|
||||
- 실험군 (10개 cron): V4.0 적용
|
||||
- 대조군 (10개 cron): V3.3 유지
|
||||
- 4주 후 비교: 어느 쪽이 더 많은 개선?
|
||||
|
||||
## 참고
|
||||
|
||||
- Galileo AI - Self-Evaluation Framework
|
||||
- Microsoft Agent Lightning
|
||||
- OpenAI Self-Evolving Agents
|
||||
- Workday Performance-Driven Agent KPIs
|
||||
@@ -0,0 +1,82 @@
|
||||
# Self-Review V5.0.1 Template
|
||||
# ========================================
|
||||
# V5.0 → V5.0.1 변경사항:
|
||||
# - "자동 메트릭" 거짓 약속 제거
|
||||
# - 파일명 타임스탬프 추가 (덮어쓰기 방지)
|
||||
# - 크론별 목표 매핑 지원
|
||||
# - 편향 기본값 true로 변경 (보수적)
|
||||
# ========================================
|
||||
|
||||
# === 메트릭 (호출자 제공) ===
|
||||
# ⚠️ 이 값들은 "자동 수집"이 아닙니다!
|
||||
# OpenClaw 크론은 토큰 카운트에 접근할 수 없습니다.
|
||||
# 크론 메시지에서 exec로 스크립트를 호출해야 합니다.
|
||||
metrics:
|
||||
cron_name: "" # 크론 이름
|
||||
timestamp: "" # ISO 8601 형식
|
||||
score: null # 1-10 점수 (LLM 자기평가)
|
||||
tokens_in: null # 입력 토큰 (추정치 허용)
|
||||
tokens_out: null # 출력 토큰 (추정치 허용)
|
||||
exit_status: "ok" # ok | error
|
||||
|
||||
# === LLM 자기성찰 (편향 인정) ===
|
||||
# 이 섹션은 LLM이 작성 (간결하게!)
|
||||
self_reflection:
|
||||
# 무엇이 잘못됐나? (필수 1개+)
|
||||
# "없음"은 관대함의 증거로 간주됨
|
||||
what_went_wrong: ""
|
||||
|
||||
# 왜 그랬나? (근본 원인)
|
||||
why: ""
|
||||
|
||||
# 다음 액션 (구체적, 측정 가능)
|
||||
next_action: ""
|
||||
|
||||
# 이 액션의 마감일 (YYYY-MM-DD)
|
||||
deadline: ""
|
||||
|
||||
# === 편향 점검 (V5.0 핵심) ===
|
||||
bias_check:
|
||||
# 내가 너무 관대하게 평가하고 있나?
|
||||
# ⚠️ 기본값 true = 보수적 접근
|
||||
am_i_being_too_easy: true
|
||||
|
||||
# 그렇게 판단한 근거 (필수!)
|
||||
# "자동 생성" 같은 플레이스홀더 금지
|
||||
evidence: ""
|
||||
|
||||
# 정우님이 지적한 적 있는 문제인가?
|
||||
user_flagged_before: false
|
||||
|
||||
# === 목표 대비 ===
|
||||
# 크론별 목표는 targets-by-cron.yaml에서 로드
|
||||
targets:
|
||||
score:
|
||||
goal: 7.0 # 최소 합격 점수
|
||||
actual: null
|
||||
met: null # score >= 7.0
|
||||
|
||||
tokens:
|
||||
budget: null # 크론별 목표에서 로드
|
||||
actual: null
|
||||
usage_pct: null # actual / budget * 100
|
||||
|
||||
# === 메타데이터 ===
|
||||
meta:
|
||||
version: "5.0.1"
|
||||
reviewed_by: null # Layer 3 외부 검증 시 채워짐
|
||||
review_date: null
|
||||
|
||||
# ========================================
|
||||
# 사용법
|
||||
# ========================================
|
||||
# 1. 크론 종료 시 스크립트 호출:
|
||||
# bash ~/openclaw/scripts/self-review-logger.sh \
|
||||
# "크론명" "점수" "tokens_in" "tokens_out" "status" \
|
||||
# "what_went_wrong" "why" "next_action"
|
||||
#
|
||||
# 2. 저장 위치: memory/self-review/YYYY-MM-DD/CRON_NAME_HHMMSS.yaml
|
||||
# (타임스탬프로 덮어쓰기 방지)
|
||||
#
|
||||
# 3. 주간 외부 검증: weekly-review-collector.sh 실행
|
||||
# ========================================
|
||||
@@ -0,0 +1,170 @@
|
||||
# 크론별 목표 매핑 (V5.0)
|
||||
# =========================================
|
||||
# 각 크론의 특성에 맞는 목표 설정
|
||||
# 일률적 목표는 무의미한 거짓 판정을 생성함
|
||||
# =========================================
|
||||
|
||||
# === 복잡한 크론 (긴 응답 허용) ===
|
||||
모닝_브리핑:
|
||||
duration_sec: 60
|
||||
tokens: 1200
|
||||
description: "출근 경로 + 날씨 + 일정 + 시스템"
|
||||
|
||||
퇴근_브리핑:
|
||||
duration_sec: 60
|
||||
tokens: 1200
|
||||
description: "귀가 경로 + 날씨 + 시장 + 일정"
|
||||
|
||||
트렌드_헌터:
|
||||
duration_sec: 120
|
||||
tokens: 2000
|
||||
description: "5개 소스 수집 + 분석"
|
||||
|
||||
자비스_정보_탐험:
|
||||
duration_sec: 180
|
||||
tokens: 3000
|
||||
description: "6개 플랫폼 + 벤치마킹"
|
||||
|
||||
일일_주식_브리핑:
|
||||
duration_sec: 45
|
||||
tokens: 800
|
||||
description: "시장 환경 + 포트폴리오"
|
||||
|
||||
주간_요약_리포트:
|
||||
duration_sec: 90
|
||||
tokens: 1500
|
||||
description: "버블 체크 + 주간 이벤트"
|
||||
|
||||
주간_자기평가_감사_V5_0:
|
||||
duration_sec: 120
|
||||
tokens: 2000
|
||||
description: "Layer 3 외부 검증 (Opus)"
|
||||
|
||||
일일_자가개선_야간_점검:
|
||||
duration_sec: 60
|
||||
tokens: 1000
|
||||
description: "memory 정리 + 시스템 체크"
|
||||
|
||||
Nightly_Build:
|
||||
duration_sec: 90
|
||||
tokens: 1000
|
||||
description: "자동화 + 문서 정리"
|
||||
|
||||
# === 중간 크론 ===
|
||||
TQQQ_5분_모니터링:
|
||||
duration_sec: 10
|
||||
tokens: 300
|
||||
description: "캐시 기반 빠른 조회"
|
||||
|
||||
크론_감시_리포트:
|
||||
duration_sec: 45
|
||||
tokens: 600
|
||||
description: "크론 상태 + 분석"
|
||||
|
||||
GitHub_감시:
|
||||
duration_sec: 20
|
||||
tokens: 400
|
||||
description: "변경사항 체크"
|
||||
|
||||
외부_API_사용량_모니터링:
|
||||
duration_sec: 20
|
||||
tokens: 400
|
||||
description: "API 사용량 리포트"
|
||||
|
||||
실적_발표_캘린더:
|
||||
duration_sec: 30
|
||||
tokens: 500
|
||||
description: "주간 실적 일정"
|
||||
|
||||
주간_비용_추적:
|
||||
duration_sec: 30
|
||||
tokens: 500
|
||||
description: "Claude API 비용"
|
||||
|
||||
# === 단순 크론 (짧은 응답) ===
|
||||
일일_백업:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "스크립트 실행 + NO_REPLY"
|
||||
|
||||
로그_정리:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "스크립트 실행 + NO_REPLY"
|
||||
|
||||
디스크_용량_경고:
|
||||
duration_sec: 10
|
||||
tokens: 200
|
||||
description: "용량 체크 + 조건부 알림"
|
||||
|
||||
일일_닥터_점검:
|
||||
duration_sec: 15
|
||||
tokens: 300
|
||||
description: "doctor --fix 실행"
|
||||
|
||||
일일_업데이트_확인:
|
||||
duration_sec: 15
|
||||
tokens: 200
|
||||
description: "npm outdated 체크"
|
||||
|
||||
Kakao_Token_자동_갱신:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "토큰 갱신 + NO_REPLY"
|
||||
|
||||
Kakao_에러_로그_정리:
|
||||
duration_sec: 5
|
||||
tokens: 50
|
||||
description: "find + delete"
|
||||
|
||||
Kakao_Refresh_Token_만료_알림:
|
||||
duration_sec: 10
|
||||
tokens: 200
|
||||
description: "만료일 체크"
|
||||
|
||||
Emergency_Recovery_실패_감지:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "로그 스캔"
|
||||
|
||||
# === 알림 크론 (최소 응답) ===
|
||||
조식_알림:
|
||||
duration_sec: 5
|
||||
tokens: 50
|
||||
description: "한 줄 알림"
|
||||
|
||||
취침_알림:
|
||||
duration_sec: 5
|
||||
tokens: 50
|
||||
description: "한 줄 알림"
|
||||
|
||||
부부_약_먹기_알림:
|
||||
duration_sec: 5
|
||||
tokens: 50
|
||||
description: "한 줄 알림"
|
||||
|
||||
관훈_미확정_저녁:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "state 체크 + 질문"
|
||||
|
||||
관훈_예약_알림:
|
||||
duration_sec: 10
|
||||
tokens: 100
|
||||
description: "예약 체크"
|
||||
|
||||
관훈_근무일_확인:
|
||||
duration_sec: 15
|
||||
tokens: 150
|
||||
description: "주간 확인 질문"
|
||||
|
||||
월급날_정기투자_알림:
|
||||
duration_sec: 10
|
||||
tokens: 150
|
||||
description: "투자 리마인더"
|
||||
|
||||
# === 기본값 (매핑 없는 크론용) ===
|
||||
_default:
|
||||
duration_sec: 15
|
||||
tokens: 500
|
||||
description: "기본값"
|
||||
Reference in New Issue
Block a user