# F1: 자기 평가 (Self-Testing) ## 개요 메모리에 있는 지식으로 문제를 생성하고, 메모리에서만 답변하여 테스트하는 루프입니다. ## 루프 구조 ``` 최대 20회 반복: 1. 문제 생성 2. 답변 시도 (메모리만 사용) 3. 피드백 생성 (에이전트 자체) 4. 메모리 업데이트 5. 적응 (난이도/유형 조절) 종료 조건: - 정답률 95% 이상 - 또는 20회 완료 ``` ## Step 1: 문제 생성 ### 문제 유형과 비중 | 유형 | 비중 | 설명 | 예시 | |------|------|------|------| | **직접 회상** | 40% | 정의, 개념, 사실 묻기 | "Rust의 Ownership이란?" | | **적용 질문** | 30% | 실제 상황에서의 활용 | "이 상황에서 Ownership을 어떻게 사용?" | | **변형 질문** | 20% | 같은 내용 다른 표현 (암기 방지) | "Ownership의 장단점은?" | | **연결 질문** | 10% | 개념 간 관계 묻기 | "Ownership과 Borrowing의 관계는?" | ### 난이도 분포 | 난이도 | 비중 | 기준 | |--------|------|------| | **쉬움** | 30% | 단순 회상, 정의, 사실 | | **보통** | 40% | 적용, 분석 | | **어려움** | 30% | 종합, 평가, 창의적 사고 | ### 문제 생성 규칙 1. 메모리에서 주제 관련 지식 추출 2. 각 개념/팩트에 대해 문제 생성 3. 유형별 비중 준수 4. 난이도별 비중 준수 5. 이전 오답 유형 고려 (약한 유형 비중 증가) ### 문제 생성 프롬프트 ``` 메모리에 있는 "{topic}" 관련 지식으로 문제를 생성하십시오. 문제 유형: {type} (직접 회상/적용/변형/연결) 난이도: {difficulty} (쉬움/보통/어려움) 규칙: - 메모리에서만 답변할 수 있어야 함 - 명확하고 구체적인 문제 - 부분 정답 가능하도록 설계 - 관련 개념과 연결된 문제 선호 문제: ``` ## Step 2: 답변 시도 ### 규칙 1. **메모리에서만 정보 꺼냄** — 외부 소스 접근 금지 2. **생각하는 과정 표시** — 어떤 지식을 기반으로 답변하는지 3. **확신도 표시** — 0-100% 확신도 ### 답변 형식 ```json { "question_id": "q_001", "user_answer": "사용자의 답변", "confidence": 85, "thinking_process": "메모리에서 X 개념과 Y 팩트를 기반으로 답변" } ``` ## Step 3: 피드백 생성 ### 피드백 생성 규칙 에이전트가 직접 피드백을 생성합니다: 1. **정답 여부 판단** - 핵심 키워드 포함 여부 - 개념적 정확성 - 부분 정답 처리 2. **피드백 내용** - 정답: "맞습니다. {설명}" - 오답: "틀렸습니다. 정답은 {정답}입니다. {왜 그런지 설명}" - 부분 정답: "부분적으로 맞습니다. {맞은 부분}은 정확하지만, {틀린 부분}은..." 3. **관련 개념 링크** - 틀린 문제의 관련 개념 자동 식별 - "이 문제는 {개념A}, {개념B}와 연결되어 있습니다" 4. **추가 학습 제안** - "이 부분을 더 공부하려면 {추천 자료}를 확인하세요" ### 피드백 형식 ```json { "question_id": "q_001", "is_correct": false, "partial_credit": 0.5, "feedback": "틀렸습니다. 정답은 'Rust의 Ownership은 메모리 안전성을 보장하는 시스템으로, 각 값에 대해 하나의 소유자가 존재합니다'입니다.", "explanation": "Ownership은 Rust의 핵심 개념으로...", "related_concepts": ["Borrowing", "Lifetimes", "Move Semantics"], "source_reference": "https://doc.rust-lang.org/book/ch04-01.html", "suggested_review": "Rust Book Chapter 4.1을 다시 읽어보세요" } ``` ## Step 4: 메모리 업데이트 정답 시에는 해당 개념의 신뢰도를 높이고 간격을 늘립니다. 오답 시에는 신뢰도를 낮추고 간격을 초기화하며 약점을 기록합니다. 결과를 메모리에 저장합니다. ## Step 5: 적응 `feedback/adaptation.md` 참조