Add self-study-agent skill with feedback loop

- SKILL.md: Main skill definition with 20-iteration feedback loop
- config.yaml: Pipeline parameters (loop, sources, questions, adaptation)
- pipeline/: 5-step learning pipeline (topic selection → source discovery → extraction → synthesis → report)
- feedback/: 4 feedback mechanisms (self-testing, spaced repetition, interleaving, adaptation)
- Learning science principles: active recall, spaced repetition, desirable difficulty, interleaving, delayed feedback
This commit is contained in:
2026-06-12 18:39:51 +09:00
parent cbd87f4d70
commit 6e21501331
12 changed files with 1119 additions and 0 deletions
@@ -0,0 +1,140 @@
# F2: 간격 반복 (Spaced Repetition)
## FSRS 알고리즘
### 기본 원리
간격 반복은 정보를 점점 더 긴 간격으로 반복하여 장기 기억을 강화하는 기법입니다.
### FSRS 파라미터
```
w = [0.4, 0.6, 2.4, 5.8, 4.93, 0.94, 0.86, 0.01, 1.49, 0.14, 0.94, 2.18, 0.05, 0.34, 1.26, 0.29, 2.61]
```
### 간격 계산
**새 카드:**
- 최초 학습 후: 1일
- 첫 번째 복습 후: 3-7일 (난이도 기반)
- 두 번째 복습 후: 7-30일
- 이후: 지수적 증가 (최대 365일)
**Rating별 간격:**
| Rating | 의미 | 간격 조정 |
|--------|------|-----------|
| `again` | 잊어버림 | 간격 초기화 (1일) |
| `hard` | 노력해서 회상 | 간격 × 1.2 |
| `good` | 정확히 회상 | 간격 × FSRS 공식 |
| `easy` | 쉽게 회상 | 간격 × 1.3 × FSRS 공식 |
### 안정성(Stability) 계산
```
new_stability = stability * exp(
(w6 - w7 * delta) * (w8 - w9 * (rating-1)) * w10 +
(1 - w11) * exp(w12 - w13 * (rating-1))
)
```
단, again일 때:
```
new_stability = w14 * max(stability * w15, 1) * min(new_stability, w16 * stability)
```
### 간격(Interval) 계산
```
interval = stability * target_retention
interval = max(min_interval, min(interval, max_interval))
```
## 카드 관리
### 카드 생성
학습 세션에서 추출된 각 개념/팩트에 대해 자동 생성:
```json
{
"id": "card_001",
"concept_id": "concept_001",
"front": "Rust의 Ownership이란?",
"back": "메모리 안전성을 보장하는 시스템으로, 각 값에 대해 하나의 소유자가 존재합니다",
"difficulty": 0.6,
"interval_days": 0,
"due_date": "timestamp",
"reps": 0,
"lapses": 0
}
```
### 카드 업데이트
복습 후 FSRS 알고리즘에 따라 업데이트:
```json
{
"id": "card_001",
"interval_days": 7,
"due_date": "7일 후 timestamp",
"reps": 3,
"lapses": 0,
"stability": 2.5,
"retrievability": 0.85
}
```
## 복습 세션
### 복습할 카드 선택
1. 오늘 예정된 카드 우선
2. 연체된 카드 다음
3. 새로운 카드는 설정된 수만큼 (기본 20개/일)
### 복습 흐름
```
복습할 카드 목록
각 카드에 대해:
├── 문제 표시
├── 답변 시도
├── 정답 확인
└── Rating 선택 (again/hard/good/easy)
└── 카드 간격 업데이트
```
## 메모리 저장 형식
```json
{
"cards": [
{
"id": "card_001",
"front": "...",
"back": "...",
"interval_days": 7,
"due_date": "2024-01-15",
"reps": 3,
"lapses": 0,
"stability": 2.5
}
],
"stats": {
"total_cards": 100,
"due_today": 15,
"due_this_week": 45,
"overdue": 5,
"retention_rate": 0.88
}
}
```