AI 학부모 리포트 프롬프트 + 샘플 출력 5건

사용처

PRD v0.1 §3 /api/llm/comment 엔드포인트의 시스템·유저 프롬프트. PRD v0.2 §2.1 MonthlyReport.ai_comment 필드 생성 로직.

자가 검토 (작성자 점검)

  • 환각 방지 — 정량 데이터를 프롬프트에 직접 주입, 추측 금지 명시
  • 톤 가이드 — 학부모에게 친절·전문가적, 단정 X
  • 보안 — 학생 본명 외 정보 X, 학원 비방 X
  • 길이 — 150~300자 범위 (알림톡 1,000자 제약)
  • 검수 강제 — MonthlyReport.reviewed_by_owner true 전 발송 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) + 유저 프롬프트(400600) ≈ 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) 에서 검수 후 발송.