프로젝트: 도형 문제 → GeoGebra 작도
목적
수학(주로 평면기하) 문제를 사진/텍스트로 입력받아, 텍스트에서 조건을 구조화해 추출하고 GeoGebra 작도로 재구성하는 도구. 교육 도구 아이디어와는 별개의 독립 프로젝트 — “일상 속 작은 불편” 해결용.
핵심 설계 결정
왜 도형 OCR을 정면 돌파하지 않는가
평면 기하 도형 파싱은 학계에서도 미해결 문제에 가깝다 (PGDP5K 벤치마크에서 SOTA F1 66% 수준). 대신 문제 텍스트를 1차 소스로 삼는다 — 교과서/시험 도형은 “그림은 실제와 다를 수 있음”이 전제라 애초에 픽셀 단위로 정밀하지 않고, 필요한 조건 대부분이 텍스트에 이미 중복 서술되어 있다.
점의 세 가지 분류
- 텍스트만으로 완전히 결정됨 → 그대로 작도
- 위치가 안 중요한 자유 변수 (예: “임의의 점”) → 비교 루프에서 에러로 취급하지 않음
- 위치가 중요한데 텍스트에 없음 (예: “AC 위의 점 D”인데 정확한 위치가 답에 영향을 줌) → 이 점에 대해서만 좁게 비전 모델에 질문
이 분류가 underdetermined 필드의 존재 이유. 케이스 3의 실제 빈도를 기출 문제로 세어봐야 스코프가 현실적인지 판단 가능 (아직 안 함 — 1단계와 병행해서 해볼 것).
파이프라인 (4단계)
1~3단계는 geometry-extractor.html 하나에 프로토타입으로 구현되어 있음 (동작). ← 현재 여기, 1단계 실측 검증 중 (아래 체크리스트)
- 텍스트 → 구조화 JSON
- Claude API 직접 호출하는 단일 HTML 아티팩트
- 스키마:
points, shapes, constraints, underdetermined, notes
- constraint type enum: length, angle, right_angle, parallel, perpendicular, equal_length, equal_angle, midpoint, ratio, collinear, on_segment, tangent, distance, area, other
- JSON → GeoGebra 작도
- 규칙 기반 변환 (LLM 불필요): JSON → GeoGebra
Execute() 커맨드 리스트
- 실행은 GeoGebra 공식 Apps API를 페이지에 직접 임베드해서 사용 (별도 MCP 서버 재사용 계획은 폐기 — 브라우저 단일 파일로 충분히 해결됨)
- 처리 가능한 패턴, 알려진 한계는 README.md 참고
- 렌더링 후 원본과 비교
- 작도 결과를 GeoGebra Apps API로 PNG export 후, 원본 문제 이미지와 함께 비전 모델(Claude)에 diff 요청 (같은 HTML 안에서 호출)
- diff 종류: (a) 단순 수치 차이 (b) 배치/구조 차이 — 구분해서 처리, 다음 액션(수동 수정 vs 재추출)을 화면에 안내
- 수정 루프 — 아직 사람이 수동으로 반복 (자동화 전)
- (a)면 JSON 값만 수정 후 2단계 재실행
- (b)면 해당 underdetermined 점에 대해서만 좁은 질문 던져 제약 추가
지금 해야 할 것 (1단계 검증)
하지 않을 것
- 범용 기하 도형 파싱 (일반적인 임의의 도형 이미지 → 완전한 구조 추출)은 시도하지 않는다. 텍스트가 대부분을 결정하고 그림은 보조/검증 역할이라는 전제가 깨지는 경우, 이 프로젝트 스코프 밖으로 간주하고 재검토한다.