Chaemi 자동 채점 AI 시스템
OCR 엔진이 손글씨 답안지를 디지털화하고 LLM이 채점 루브릭 기반으로 서술형·단답형·객관식을 통합 자동 평가. 오답 패턴 벡터 분석으로 학생별 취약 유형을 진단하고 맞춤 문제를 추천. 학원 프랜차이즈 다중 지점 통합 관리와 강사별 채점 교차 검증 워크플로 내장.
Architecture Overview
Next.js 프론트엔드 + Python FastAPI 채점 서비스. 답안지 업로드 → OCR → LLM 채점 → pgvector 오답 분석 → 결과 저장 파이프라인. Supabase RLS로 학원 지점 간 데이터 완전 격리.
Google Vision OCR + 수식 후처리 · Claude 구조화 루브릭 채점 · pgvector 오답 분석 · Supabase RLS 멀티테넌트
Technical Problems
한국어 손글씨 + 수식 혼재 OCR 정확도
학생 답안지는 한글 손글씨에 수학 수식·표·그래프가 혼재한다. 일반 OCR 엔진은 한국어 손글씨 인식률이 낮고 수식 기호를 텍스트로 잘못 인식해 채점 데이터 품질이 떨어진다.
서술형 LLM 채점 일관성 확보
자유형 프롬프트로 LLM에 채점을 위임하면 같은 답안이라도 루브릭 해석 차이로 점수 편차가 발생한다. 강사별 채점 기준 편차도 별도로 관리해야 했다.
프랜차이즈 멀티테넌트 데이터 격리
프랜차이즈 본사와 각 지점이 같은 플랫폼을 사용하되 지점 간 학생 데이터·시험지·채점 결과가 완전히 격리돼야 한다. 앱 레이어 필터는 버그로 인한 데이터 노출 위험이 있었다.
Engineering Approach
Google Vision API + 수식 기호 재매핑 후처리
Google Vision API 기본 OCR 후 수식 기호 재매핑 사전(≤→≤, ×→* 등)과 KoNLPy 형태소 분석 교정 레이어 적용. 수식 영역은 bounding box로 분리해 독립 처리 후 재조합. OCR 정확도 94.7% 달성.
Claude AI + JSON 루브릭 스키마 + 강사 교차 검증
루브릭을 `{criterion, full_score, partial_conditions[]}` JSON 스키마로 구조화해 Claude에 전달. 모델이 criterion별 점수·근거를 JSON으로 반환. 강사 승인/수정 케이스를 누적해 루브릭 품질 지속 개선.
Supabase RLS school_id 정책 + franchise_admin 역할
모든 테이블에 school_id 컬럼 + `auth.jwt() ->> school_id = school_id` RLS 정책. 본사 계정은 `role = franchise_admin` JWT 클레임으로 전 지점 읽기 권한. DB 레벨 격리로 앱 레이어 필터 버그 영향 제거.
Measurable Outcomes
94.7%
OCR 정확도
한국어 손글씨 + 수식 혼재 답안
−80%
채점 시간
1부당 45초 → 9초
−75%
채점 편차
표준편차 1.2점 → 0.3점
100%
데이터 격리
Supabase RLS, 지점 간 완전 분리
Tech Stack

Project Specs
Year
2025
Duration
3개월
Capability
AI Systems
Status
OngoingTechnologies