AI 학부모 리포트 프롬프트 + 샘플 출력 5건
사용처
PRD v0.1 §3
/api/llm/comment엔드포인트의 시스템·유저 프롬프트. PRD v0.2 §2.1MonthlyReport.ai_comment필드 생성 로직.
자가 검토 (작성자 점검)
- 환각 방지 — 정량 데이터를 프롬프트에 직접 주입, 추측 금지 명시
- 톤 가이드 — 학부모에게 친절·전문가적, 단정 X
- 보안 — 학생 본명 외 정보 X, 학원 비방 X
- 길이 — 150~300자 범위 (알림톡 1,000자 제약)
- 검수 강제 —
MonthlyReport.reviewed_by_ownertrue 전 발송 X
1. 시스템 프롬프트 (Sonnet 4.6)
당신은 초·중등 공부방 원장이 학부모에게 매월 보내는 학업 리포트의
자연어 코멘트를 작성하는 전문가입니다.
## 작성 원칙
1. **사실 기반**: 입력으로 받은 정량 데이터(정답률·단원별 성취도·출결)만 인용.
추측·과장·환각 금지.
2. **친절한 톤**: 학부모에게 보내는 알림이므로 정중하고 따뜻한 어조.
다만 칭찬 일변도가 아닌 **균형 잡힌 평가**.
3. **간결함**: 150~300자. 카카오 알림톡에 들어가야 함.
4. **구조**: 강점 1개 + 보완점 1개 + 다음 달 계획 시사 1개.
5. **학생 호칭**: 입력의 `student_name` 그대로 사용 (호명 1회).
6. **금지 사항**:
- 다른 학생과 비교 ("다른 학생보다 잘했다" 등)
- 학원·교사 비방 또는 자랑
- 학습 외 영역 추측 (가정사·성격 등)
- "정답률이 100%일 것이다" 같은 단정 미래
- 의료·정신건강 진단
## 출력 형식
JSON:
{
"comment": "코멘트 본문 (150~300자, 한국어)",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}
본 코멘트는 원장이 검수 후 학부모에게 발송됩니다.
원장 검수 단계에서 수정·삭제 가능합니다.
2. 유저 프롬프트 템플릿
다음 정량 데이터를 바탕으로 학부모 알림 코멘트를 작성하세요.
학생: {student_name}
학년: {grade}
대상 월: {month}
### 정량 지표
평균 정답률: {avg_score}%
출결률: {attendance_rate}%
학습지 출제: {worksheet_count}건
### 단원별 정답률
{unit_scores_table}
### 전월 대비 변화
평균 정답률: {score_diff_text}
출결률: {attendance_diff_text}
### 추가 컨텍스트 (원장 입력, 선택)
{owner_notes}
---
위 데이터만 사용해 150~300자 코멘트를 작성하세요.
3. 샘플 입력·출력 5건
샘플 1 — 균형 (강점·보완·계획)
입력:
student_name: 김초희
grade: E5
month: 2026-04
avg_score: 78
attendance_rate: 100
worksheet_count: 8
unit_scores:
E5-1-2 약수와 배수: 65
E5-1-4 약분과 통분: 70
E5-1-5 분수의 덧셈과 뺄셈: 60
E5-1-6 다각형의 둘레와 넓이: 92
score_diff_text: 전월 73% → 78% (+5%p)
attendance_diff_text: 전월 동일 (100%)
owner_notes: 분수 단원 약함, 도형은 강점예상 출력:
{
"comment": "초희 학부모님, 안녕하세요. 4월에는 평균 정답률 78%로 전월 대비 5%p 향상되었고, 출결도 100%로 꾸준한 모습 보였습니다. 도형 단원에서는 92%로 강점이 두드러지지만, 분수 단원에서는 60~70%로 보완이 필요합니다. 5월에는 분수 통분·덧셈 학습지를 추가로 출제하여 보완할 예정입니다.",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}(글자 수: 약 215자)
샘플 2 — 우수 학생 (자만 방지)
입력:
student_name: 박민준
grade: E3
month: 2026-04
avg_score: 92
attendance_rate: 100
worksheet_count: 10
unit_scores:
E3-1-3 나눗셈: 95
E3-1-4 곱셈: 90
E3-1-6 분수와 소수: 88
score_diff_text: 전월 90% → 92% (+2%p)
attendance_diff_text: 전월 동일
owner_notes: 우수, 심화 문제 도전 권장예상 출력:
{
"comment": "민준 학부모님, 안녕하세요. 4월 평균 정답률 92%로 매우 우수한 성적이며, 출결도 100%로 꾸준한 학습 습관 유지 중입니다. 곱셈·나눗셈 단원에서 안정적으로 90% 이상의 성취를 보였습니다. 5월에는 단원 응용 문제(HIGH 난이도) 비중을 늘려 사고력 학습을 강화할 예정입니다.",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}(글자 수: 약 196자)
샘플 3 — 부진 학생 (의욕 보호)
입력:
student_name: 이서연
grade: E4
month: 2026-04
avg_score: 52
attendance_rate: 75
worksheet_count: 5
unit_scores:
E4-1-1 큰 수: 55
E4-1-2 각도: 50
E4-1-3 곱셈과 나눗셈: 45
score_diff_text: 전월 60% → 52% (-8%p)
attendance_diff_text: 전월 90% → 75% (-15%p)
owner_notes: 결석 증가, 학습 페이스 회복 필요예상 출력:
{
"comment": "서연 학부모님, 4월 학습 데이터를 공유드립니다. 평균 정답률 52%, 출결률 75%로 전월 대비 다소 낮아진 모습입니다. 곱셈과 나눗셈 단원이 45%로 보완이 필요해 보입니다. 5월에는 출결 회복과 함께 기초 단원 LOW 난이도 학습지로 자신감을 회복할 수 있도록 도와드리겠습니다.",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}(글자 수: 약 200자)
평가 — 부진 학생은 칭찬을 만들어내지 말고, 사실을 정확히 전달 + 회복 계획을 제시. 환각 위험 큰 영역.
샘플 4 — 신입 학생 (1개월차)
입력:
student_name: 정유나
grade: E1
month: 2026-04
avg_score: 65
attendance_rate: 100
worksheet_count: 4
unit_scores:
E1-1-1 9까지의 수: 80
E1-1-3 덧셈과 뺄셈: 50
score_diff_text: 신규 등록 (비교 데이터 없음)
attendance_diff_text: 신규 등록
owner_notes: 4월 신규 등록, 적응 기간예상 출력:
{
"comment": "유나 학부모님, 4월 신규 등록을 환영합니다. 첫 달 평균 정답률 65%, 출결 100%로 꾸준히 출석하며 적응하는 모습이었습니다. 9까지의 수 단원에서 80%로 빠른 이해를 보였고, 덧셈과 뺄셈 단원은 5월에 추가 학습 시간을 가질 예정입니다. 1학년 첫 학습 단계라 차분히 진행하겠습니다.",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}(글자 수: 약 192자)
샘플 5 — 시험 대비 (중등 학생)
입력:
student_name: 김도현
grade: M1
month: 2026-04
avg_score: 81
attendance_rate: 95
worksheet_count: 12
unit_scores:
M1-1-1 소인수분해: 85
M1-1-2 정수와 유리수: 78
M1-1-3 문자의 사용과 식: 80
M1-1-4 일차방정식: 82
score_diff_text: 전월 75% → 81% (+6%p)
attendance_diff_text: 전월 100% → 95% (-5%p)
owner_notes: 5월 중간고사 대비, 시험범위 점검 필요예상 출력:
{
"comment": "도현 학부모님, 4월 학업 보고드립니다. 평균 정답률 81%로 전월 대비 6%p 향상되었고, 출결도 95%로 양호합니다. 소인수분해(85%)와 일차방정식(82%) 단원에서 안정적인 성취를 보였습니다. 5월 중간고사 대비를 위해 단원별 오답 모음 학습지를 추가로 운영하여 시험 범위 전반을 점검하겠습니다.",
"tone_check": "사실 기반 ✓ / 균형 평가 ✓ / 학생 호명 1회 ✓",
"reviewed_required": true
}(글자 수: 약 215자)
4. 검증 룰 (생성 후 자동)
LLM 출력을 받은 후 코드 레벨 검증:
def validate_comment(comment: str, student_name: str, owner_notes: str) -> tuple[bool, list[str]]:
"""LLM 생성 코멘트 검증."""
issues = []
# 1. 길이
if not (150 <= len(comment) <= 300):
issues.append(f"길이 위반: {len(comment)} (권장 150~300)")
# 2. 학생 호명
if comment.count(student_name) == 0:
issues.append("학생명 미포함")
elif comment.count(student_name) > 2:
issues.append("학생명 과다 노출")
# 3. 금지 표현 (단정·비교 등)
forbidden = ["반드시 좋아질", "분명히 100%", "다른 학생", "타 학원"]
for word in forbidden:
if word in comment:
issues.append(f"금지 표현: {word}")
# 4. 의료·정신 진단
medical = ["우울", "ADHD", "장애"]
for word in medical:
if word in comment:
issues.append(f"의료/정신 진단 표현: {word}")
return len(issues) == 0, issues검증 실패 시 → 재생성 (최대 3회) → 모두 실패 → 원장 수동 작성 모드로 fallback.
5. 비용 추정 (학생 1명·월)
- 입력: 시스템 프롬프트(700) + 유저 프롬프트(400
600) ≈ 1,1001,300 토큰 → 평균 1,200 - 출력: JSON 코멘트 ≈ 250~400 토큰 → 평균 320
Sonnet 4.6 가격:
- 입력: 1,200 × 0.0036
- 출력: 320 × 0.0048
- 총: $0.0084 ≈ 12원/학생·월
단위 경제 §2.1 추정(9.5원)과 ±25% 범위 일치.
캐싱 적용 시 (Anthropic prompt caching)
시스템 프롬프트가 모든 학생 동일 → 캐시 hit:
- 입력 700 토큰 캐시 → $0.00021 (90% 할인)
- 입력 500 토큰 신규 → $0.0015
- 출력 320 토큰 → $0.0048
- 총: ~$0.0065 ≈ 9원/학생·월 (-25%)
6. 운영 체크리스트
- Sonnet 4.6 API 키 확보 + rate limit 설정
- 시스템 프롬프트 캐싱 활성화 (anthropic SDK
cache_control) - 검증 함수 (§4) 백엔드 적용
- 원장 검수 UI (§4 PRD v1.0-design-spec)
- 환각·오류 발견 시 보고 채널 (학부모 신고 → 원장 → 발주처)
- 분기별 프롬프트 개선 (5건 이상 학부모 클레임 시)
7. 미경 본인 검수 권장
베타 1개월 운영 후 미경이 100건 샘플링하여 다음 점검:
| 점검 항목 | 통과 기준 |
|---|---|
| 사실 기반 (정량 데이터 일치) | 95% 이상 |
| 환각 발생률 | < 5% |
| 학부모 클레임 (“틀린 정보”) | 월 0~2건 |
| 학생 호명 정확 | 100% |
| 의료·진단 표현 | 0건 |
미달 시 시스템 프롬프트 v2 작성 (§1 갱신).
8. PRD 영향
본 문서로 PRD v0.2 §3 API 보강:
POST /api/llm/comment
body: { student_id, month, owner_notes? }
↓
internal:
1. 정량 데이터 fetch (DB)
2. 시스템 프롬프트 + 유저 프롬프트 + 데이터 주입
3. Claude Sonnet 호출 (cache_control: ephemeral)
4. JSON 응답 파싱 + 검증 (§4)
5. 검증 실패 시 재시도 (max 3)
6. MonthlyReport.ai_comment 저장 (reviewed_by_owner = false)
return: MonthlyReport
원장 화면 (PRD v1.0 §6 화면 4) 에서 검수 후 발송.