Quizly는 사용자 학습 데이터를 기반으로 LLM으로 문제를 자동 생성합니다. 문제 생성 QA 과정에서 몇 가지 문제를 발견했고, 이를 어떻게 분석하고 해결했는지 공유합니다.
기존 시스템은 FIND_CORRECT, FIND_MATCH, ESSAY 등 6가지 문제 유형을 생성하기 위해 5,096자 규모의 단일 프롬프트를 사용했습니다. 여기에 사용자 데이터(약 1000자~10,000자)가 더해져 AI가 한 번에 처리해야 할 정보량이 지나치게 많았습니다.
유형(FIND_CORRECT, FIND_MATCH, ESSAY 등)을 생성하기 위해 5,096자짜리 단일 프롬프트를 사용했습니다. 여기에 사용자 데이터(1,000자~10,000자)까지 붙으니 AI가 한 번에 소화해야 할 양이 너무 많았습니다.
일관성 저하
→ AI가 여러 유형의 규칙을 혼동하여, '옳은 것'을 찾는 문제에 '틀린 것'의 특징이 섞이는 등 품질이 저하되었습니다.
문항 수 미달
→ 20~25문항을 요청해도 AI가 5~17개만 반환하는 등 출제 개수가 유동적이었습니다.
JSON 파싱 실패
→ ****프롬프트 지시만으로는 완벽한 JSON 규격을 유지하지 못해 백엔드에서 파싱 에러가 빈번했습니다.
응답 지연
→ ****정확도를 높이기 위해 모델의 '추론(Thinking)' 옵션을 켜면 응답 시간이 5분에서 10분까지 늘어났습니다.
항상 정확히 20개의 문제 or 추후 기획에 따라 원하는 문제의 수를 생성해야 한다.
(Structured Outputs)
항상 동일한 JSON 형식으로 반환되어야한다.
(Structured Outputs)
각 문제 유형은 프롬프트에 명시된 모든 조건을 완벽하게 만족해야 한다.
(Structured Outputs + Prompt Routing & Post-processing, Chunking)
동일하거나 비슷한 문제가 나오지 않아야 한다.
(Chunking)
사용자가 입력한 데이터의 전체 범위에서 편중 없이 골고루 문제를 출제해야 한다.
(Chunking)
기획상 API 반환 시간이 최대 5분 이내로 작동해야 하며 빠를수록 좋다.
(Async(병렬처리) 해결)
5회 연속 테스트(사용자 입력 7000자 + FIND_MATCH, ESSAY) 중 3~5회차의 평균 응답시간을 기준으로 확인해보겠습니다. 전체 소요 시간의 86.8%를 제거(87.62초 →11.55초)하였으며 응답 속도가 약 7.6배 더 빨라졌습니다.
1m 27.62s11.55s마지막으로 AI API 1회 요청시 비용의 변화를 확인해보겠습니다. HCX-007의 비용은 입력 토큰(1.25원 / 1,000토큰), 출력 토큰 (5원 / 1,000토큰)입니다. 최종 비용 분석 결과 최적화 진행 이후 12%의 비용 상승이 있습니다.
기존 방식
토큰 사용량
→ 입력 5,384 / 출력 6,500
최종 비용
→ (5.384 X 1.25) + (6.5 X 5) = 39.22원
최적화 방식
단일 호출당 토큰
→ 입력 837 / 출력 670
단일 호출 비용
→ (0.837 X 1.25) + (0.67 X 5) = 4.39원
총 비용 (10회)
→ 4.39원 X 10 = 43.9원
https://github.com/Quizly-Team/backend/pull/38