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,31 @@
# Step 1: 주제 선택
## 전략
| 전략 | 선택 방법 |
|------|-----------|
| **목표 기반** | 사용자가 설정한 목표 중 미완료된 첫 번째 주제 |
| **호기심 기반** | 메모리에서 연결이 적은 개념을 찾아 탐색 |
| **트렌드 기반** | GitHub 트렌딩, arXiv 최신, 기술 뉴스에서 주제 탐색 |
| **복습 기반** | 복습 예정 카드가 많은 주제 우선 선택 |
| **균형** | 모든 전략을 가중치로 종합하여 최고 점수 주제 선택 |
## 선택 규칙
1. 메모리에 이미 많은 지식이 있는 주제는 우선순위 낮춤
2. 이전 세션에서 오답률이 높았던 주제는 우선순위 높임
3. 새로 탐색한 주제와 기존 주제를 연결할 수 있는 주제 선호
## 출력
```
{
"id": "unique_topic_id",
"title": "주제 제목",
"domain": "프로그래밍| Machine Learning| 과학| 일반",
"keywords": ["키워드1", "키워드2"],
"depth": "shallow|medium|deep",
"prerequisites": ["선행 주제 id"],
"goals": ["학습 목표1"]
}
```
@@ -0,0 +1,50 @@
# Step 2: 소스 발견
## 소스 채널
| 채널 | 사용 시점 | 도구 |
|------|-----------|------|
| **웹 검색** | 모든 주제 | `websearch` |
| **학술** | 연구 주제 (ML, 과학) | `websearch` (arXiv, Semantic Scholar) |
| **GitHub** | 기술 주제 (프로그래밍, DevOps) | `websearch` (GitHub) |
| **공식 문서** | 도구/프레임워크 | `webfetch` (공식 사이트) |
| **로컬 파일** | 로컬 코드베이스 탐색 시 | 파일 시스템 검색 |
## 소스 선택 규칙
1. 채널별 상위 5-10개 결과 수집
2. 각 소스의 신뢰도 평가:
- 공식/권위 있는 소스인지
- 최근 2년 이내 자료인지
- 인용수/커뮤니티 검증이 있는지
- 다른 소스에서 교차 참조되는지
3. URL 기준 중복 제거
4. 신뢰도 점수로 정렬
5. 상위 N개 소스 반환 (기본: 5개)
## 신뢰도 점수 계산
```
credibility = (
domain_authority * 0.3 +
recency_score * 0.2 +
citation_score * 0.15 +
peer_reviewed * 0.15 +
official_source * 0.1 +
cross_referenced * 0.1
)
```
## 출력
```
[
{
"id": "source_id",
"url": "https://...",
"title": "소스 제목",
"type": "web_page|documentation|academic_paper|github_repo|blog_post",
"credibility": 0.85
}
]
```
@@ -0,0 +1,79 @@
# Step 3: 지식 추출
## 추출 프로세스
각 소스에 대해:
1. **가져오기**`webfetch` 도구로 콘텐츠 수집
2. **파싱** — HTML → 텍스트, 보일러플레이트 제거
3. **청킹** — 논리적 섹션별 분할 (제목, 단락, 코드 블록)
4. **추출** — LLM으로 구조화된 지식 추출
## 추출 프롬프트
```
다음 콘텐츠에서 "{topic.title}"에 대한 구조화된 지식을 추출하십시오.
JSON 형식으로 반환:
{
"concepts": [
{
"title": "개념 이름",
"definition": "명확한 정의",
"examples": ["예시1", "예시2"],
"related": ["관련 개념1", "관련 개념2"]
}
],
"facts": [
{
"statement": "팩트 진술",
"evidence": "출처에서의 인용",
"confidence": 0.9
}
],
"procedures": [
{
"name": "절차 이름",
"description": " 설명",
"steps": ["단계1", "단계2", "단계3"]
}
],
"code_patterns": [
{
"language": "python",
"pattern_name": "패턴 이름",
"code": "코드",
"explanation": "설명"
}
]
}
콘텐츠:
{source.content}
```
## 교차 검증
1. 여러 소스에서 추출된 팩트를 비교
2. 일치하지 않는 내용 표시
3. 2개 이상 소스에서 확인된 팩트만 신뢰도 높음으로 처리
## 신뢰도 점수
- 단일 소스 확인: confidence = 0.5
- 2개 소스 확인: confidence = 0.7
- 3개 이상 소스 확인: confidence = 0.9
- 소스 간 불일치: confidence = 0.3
## 출력
```
{
"concepts": [...],
"facts": [...],
"procedures": [...],
"code_patterns": [...],
"source_id": "source_id",
"extraction_confidence": 0.7
}
```
@@ -0,0 +1,48 @@
# Step 4: 지식 종합
## 종합 프로세스
여러 소스에서 추출된 지식을 통합:
1. **중복 제거** — 제목/진술 기준 동일 개념/팩트 통합
2. **병합** — 높은 신뢰도 유지, 소스 결합
3. **연결** — 개념 간 관계 찾기 (전제, 예시, 대비, 구현 등)
4. **요약** — 핵심 학습 내용 요약 생성
5. **학습 목표** — 학습자가 할 수 있어야 할 것 목록
6. **복습 질문** — 각 개념을 테스트할 수 있는 질문
## 개념 연결 유형
| 관계 | 설명 | 예시 |
|------|------|------|
| `prerequisite` | A를 알아야 B를 이해 | "변수" → "함수" |
| `example` | A는 B의 예시 | " 리스트 컴프리헨션" → "파이썬" |
| `contrast` | A와 B는 대비 | "동기" vs "비동기" |
| `implements` | A는 B를 구현 | "Tokio" → "비동기 런타임" |
| `uses` | A가 B를 사용 | "FastAPI" → "Pydantic" |
## 학습 목표 생성
각 개념에 대해 Bloom's Taxonomy 기반 학습 목표 생성:
- **기억**: ~를 설명할 수 있다
- **이해**: ~와 ~의 차이를 설명할 수 있다
- **적용**: ~를 사용하여 ~를 구현할 수 있다
- **분석**: ~의 장단점을 분석할 수 있다
- **평가**: ~와 ~를 비교하여 선택할 수 있다
- **창작**: ~를 조합하여 ~를 만들 수 있다
## 출력
```
{
"summary": "종합 요약",
"key_concepts": [...],
"key_facts": [...],
"key_procedures": [...],
"connections": [
{"from": "concept_id", "to": "concept_id", "relation": "prerequisite"}
],
"learning_objectives": [...],
"review_questions": [...]
}
```
@@ -0,0 +1,60 @@
# Step 5: 세션 리포트
## 리포트 형식
```markdown
## 학습 세션: {topic.title}
### 소스 정보
| # | 소스 | 유형 | 신뢰도 |
|---|------|------|--------|
| 1 | {title} | {type} | {score} |
### 추출된 지식
- **개념**: {count}개
- **팩트**: {count}개
- **절차**: {count}개
- **코드 패턴**: {count}개
### 핵심 개념
1. **{concept.title}**: {concept.definition}
2. ...
### 개념 연결
- {개념A} → (전제) → {개념B}
- {개념C} → (예시) → {개념D}
- ...
### 학습 목표
- [ ] {학습 목표1}
- [ ] {학습 목표2}
- ...
### 복습 질문 (미리보기)
1. {question1}
2. {question3}
3. ...
### 다음 단계
- 자기 평가 루프 시작
- 예상 문제 수: {count}개
- 예상 소요 시간: {minutes}분
```
## 메모리 저장 형식
리포트 생성 후, 다음 형식으로 메모리에 저장:
```json
{
"session_id": "session_id",
"topic": "topic_title",
"concepts": [...],
"facts": [...],
"procedures": [...],
"code_patterns": [...],
"connections": [...],
"source_refs": [...],
"timestamp": "ISO timestamp"
}
```