LLM 자동 채점 파이프라인
Gemini, OpenAI, Claude 3사 12종 모델을 추상화한 논서술형 답변 자동 채점 시스템
문제
DQ는 기존 자기보고식 검사의 한계를 극복하기 위해 만들어졌습니다. 기존 진로 역량 검사는 대부분 자기보고식 설문으로, 학생이 스스로 객관적인 평가를 하지 못하는 한계가 있었습니다. DQ는 학생이 직접 서술한 답안을 LLM으로 채점하는 논서술형 검사로 이 문제를 해결하고자 했습니다.
그러나 같은 답안이라도 모델마다 점수가 달랐습니다. Gemini와 OpenAI, Claude가 동일한 답안에 대해 서로 다른 점수를 부여했고, 어떤 모델과 프롬프트 조합을 신뢰할지 판단할 근거가 전혀 없었습니다.
또한 LLM 채점은 호출마다 비용이 발생합니다. 1회 채점 단위(시나리오/챕터)에 따라 호출 수와 응답 대기 시간이 크게 달라지기 때문에, 비용과 정확도 사이의 균형을 잡는 설계가 필요했습니다.
해결
먼저 채점 모델 검증 체계를 구축했습니다. provider x 모델 x 사고강도 조합별 병렬 채점 배치를 구현하고, 채점 일관성과 표준편차를 정량 비교했습니다. 모범답안 리스트로 모의 채점을 수행해 유의미한 점수 변별력을 사전에 검증하는 절차도 마련했습니다.
Gemini, OpenAI, Claude 3사 12종 모델을 단일 인터페이스로 추상화했습니다. 프롬프트와 모델, 파라미터를 DB로 관리해 어드민 화면에서 배포 없이 교체할 수 있도록 설계했습니다. '용도당 활성 1건' 불변식으로 모델 관리의 일관성을 유지했고, 채점 결과에 provider와 모델을 기록(stamping)하여 감사 추적이 가능하도록 했습니다.
채점 단위를 챕터별/시나리오별 전략 패턴으로 분리해 상시 전환 가능하게 설계했습니다. 프롬프트를 동적으로 조립할 수 있게 구현하여, 불필요한 섹션은 통째로 생략해 토큰을 절약했습니다.
성과
운영 투입 전에 루브릭(채점 지표) 결함을 발견하는 절차를 확보했습니다. 채점 단위와 프롬프트 길이를 설정으로 조절할 수 있게 되어 채점 비용을 구조적으로 통제할 수 있게 되었습니다.
무배포 모델 교체 체계를 통해 운영 중에도 프롬프트와 모델을 즉시 변경할 수 있는 유연성을 확보했습니다.
회고
여러 컴포넌트를 조합한 복잡한 질의의 경우 LLM 응답 정확도가 저하되는 문제가 있었습니다. MCP 서버에서 SDK 메타데이터를 사전 인덱싱해 응답 범위를 한정하는 방식으로 개선을 모색했습니다.
프롬프트도 코드처럼 변경이 회귀를 일으킨다는 것을 배웠습니다. 검증과 가드 없이 수정하면 안 되는 운영 자산으로 다뤄야 한다는 점을 체득했습니다. 외부 API 비용은 호출지 설계 단계에서 통제하는 것이 중요합니다.
Other Topics
트랜잭션 분리 설계
LLM 호출 트랜잭션 분리로 DB 커넥션 고갈 장애 해결
동시성 제어 및 폴백 설계
채점 전용 스레드풀 격리 및 LLM 3단 폴백 재시도 구조
LLM 안전성 설계
환각, 형식 이탈, 프롬프트 인젝션 방어 체계 구축
AI 1인 개발 체계
Claude 스킬 기반 역할별 에이전트 하네스로 1인 풀스택 개발 체계 구축
AWS 인프라 및 CI/CD
ALB, private EC2, RDS, ElastiCache Redis 3노드 구성 및 월 비용 37% 절감
논서술형 풀이 활동 로그
문항별 진입/이탈/답변 변경 이력을 기록하여 학생의 풀이 과정을 추적하는 시스템
보안 설계
JWT 이중 인증, Rate Limiting, 요청 로깅 마스킹, 비밀번호 강제 변경 등 서비스 보안 체계 구축