입사 전 생성되던 문항의 내부 최초 검수 합격률은 10% 미만이었습니다. 입사 후 문항 생성 품질을 높이기 위해 생성 로직, 파이프라인, 프롬프트 엔지니어링을 맡아 진행했고, 동시에 서비스를 위한 백엔드 작업에도 참여했습니다. 문항 출제 전문가와 협업해 암묵지를 로직화했고, 서비스에 필요한 파이프라인을 팀과 함께 작업했습니다.
배치 생성에서 실시간 서비스까지
이 시스템은 실험용 스크립트가 아니라 실제 문항 제품의 생성·검증·적재 흐름이었습니다. 유형에 따라 2만–9만 개 이상의 문항을 배치 생성했고, 같은 생성 모듈을 사용자의 요청에 응답하는 실시간 생성 서비스에도 활용했습니다. 전체 LLM 배치 생성에는 누적 수천만원대의 비용이 투입됐습니다.
서비스 파이프라인에서는 Python·FastAPI 기반 MSA와 Prefect 기반 오케스트레이션, dbt·PostgreSQL 데이터 파이프라인을 팀과 함께 구축했습니다. 팀의 백엔드는 각 모듈을 레이어드 아키텍처로 나누고 유형별 스펙을 의존성 주입으로 전달하는 구조로 설계되어 있었습니다. 저는 이 환경에서 초기 개발부터 백엔드 모듈 구현에 참여했고, 유형별 LLM 생성·검증 로직과 프롬프트 엔지니어링을 진행했습니다.
일부 유형에는 자체 학습된 ML 모델이 사용됐고, 해당 모델을 서빙해 LLM 파이프라인에 연결하는 작업에도 참여했습니다.
생성 로직 구현
주제, 요지, 빈칸, 어법, 어휘, 순서 등 10여 개 유형은 각각 전문가가 출제하는 방식도 달랐고 문항의 품질을 평가하는 기준도 달랐습니다. 저는 전문가와 협업하며 각 유형의 제작 과정을 단계별로 로직화하며 암묵지를 네 가지로 나눴습니다.
- 반드시 지켜야 하는 조건
- 사용하면 안 되는 표현과 구성
- 검수 합격 기준
- 코드로 처리할 수 있는 후처리 규칙
모든 판단을 LLM에 맡기기보다, 유형마다 프롬프트와 Few-shot 예시를 따로 두고 로직적으로 확인할 수 있는 항목은 후처리 로직으로 분리했습니다. Gemini와 OpenAI API가 생성한 문항을 자동 검사한 뒤 전문가 검수로 넘기고, 그 결과를 다음 실험의 규칙과 예시에 다시 반영했습니다.
반복 가능한 검수 흐름
프롬프트를 수정할 때마다 실행 방식이 달라지면 어떤 변경이 효과적이었는지 비교할 수 없습니다. 생성·검증·적재를 Prefect 파이프라인으로 고정해, 같은 입력이면 항상 같은 흐름을 거치도록 만들었습니다. 덕분에 규칙이나 예시 하나를 바꿨을 때 검수 합격률이 어떻게 달라지는지 수치로 확인할 수 있었습니다.
이 파이프라인에서 사람의 검수는 자동화 바깥의 최종 관문이 아니었습니다. 전문가가 "선지가 너무 쉽다"고 판단하면, 그 피드백을 함께 들여다보며 거기에 숨은 암묵지를 다시 캐내 네 가지 규칙 범주로 분류했습니다. 그렇게 로직화된 기준은 프롬프트와 로직으로 반영되어 파이프라인에 다시 투입됐고, 이 루프가 쌓이며 품질이 올라갔습니다.
품질
검증 로직이 돌기 전 최초 생성물에 대한 전문가 검수 합격률은 10% 미만에서 약 70%로 올라갔고, 정답 생성 PoC에서는 프롬프트와 후처리 규칙 최적화로 정확도를 91.21%에서 96.45%까지 끌어올렸습니다. 검증을 통과한 최종 제공 문항은 6개월 동안 품질 컴플레인 0건을 유지했습니다. 이 수치는 모델 하나의 성능이라기보다, 유형별 생성 로직과 evaluation 파이프라인, 전문가의 문항제작 로직을 연결한 결과였습니다.
관련 프로젝트
- 선택지 조합 시스템 개선: 조합 버그로 약 4만 개까지 줄어든 유효 문항을 추가 LLM 생성 없이 약 9만 개까지 복구했습니다.
- LLM 문항 검증 비용 최적화: 평가 일관성을 높이면서 토큰 비용과 처리시간을 줄일 수 있는지 PoC로 확인했습니다.