AI/LLM

팀 프로젝트(Zelo) - 리뷰 모델 변경 테스트 및 결정

기억지기 개발자 2026. 10. 22. 23:30

LLM 모델 설정 변경 근거

결론

용도 모델 · 추론 강도 설정 위치
일반 (메뉴 계획 · 채팅 설명) gpt-6-luna · low spring.ai.openai.chat.model, spring.ai.openai.chat.reasoning-effort
리뷰 한 줄 요약 gpt-5-mini · medium (기존 그대로) zelo.llm.review-summary.model, zelo.llm.review-summary.reasoning-effort
  • 리뷰 요약의 medium은 gpt-5-mini의 기본값이다. 일반 설정의 low가 모든 요청에 섞이기 때문에, 예전과 같은 조건으로 보내려고 직접 적었다.
  • 시간 제한(zelo.llm.timeout)은 두 용도가 같이 쓴다. 12s로 올리는 것을 함께 제안한다 (아래 3장).

1. 일반(메뉴 계획)을 gpt-6-luna low로 바꾸는 이유

정확도 · 속도 (메뉴 계획 실측, 2026-10-21, 조합당 60번)

조합 정확도 p50 p95 최대 5초 초과
gpt-5-mini 기본 (기존) 93.3% 9.8s 15.3s 15s 이상 85%
gpt-6-luna low 98.3% 5.7s 7.5s 8.4s 68%
gpt-6-luna none 85.0% 2.0s 2.5s 2.9s 0%
  • 정확도: 인원 · 예산 · 조건 키워드 · 목록 안 재료를 맞힌 비율 (시연 문장 포함)
  • none은 가장 빠르지만 목록에 없는 재료("물")를 넣는 실수가 있었다.

속도 재확인 (같은 입력을 두 모델에 번갈아 보냄, 2026-10-22, 메뉴 계획 20번씩)

모델 성공 평균 p95 5초 초과
gpt-5-mini medium (기존) 100% 10.0s 14.6s 100%
gpt-6-luna low 100% 4.4s 5.6s 20%

비용 (1M 토큰, 입력 / 출력)

모델 가격
gpt-5-mini $0.25 / $2.00
gpt-6-luna $0.10 / $0.50

→ 더 정확하고, 두 배 이상 빠르고, 더 싸다.


2. 리뷰 요약은 gpt-5-mini를 유지하는 이유

지금 프롬프트의 규칙: "한두 명의 소수 의견은 요약에서 뺀다"

리뷰 요약 실험(2026-10-22, 같은 프롬프트, 리뷰 묶음 5개 × 5회). 자동 채점 뒤 원문을 직접 읽고 다시 채점한 결과다.

묶음 확인한 규칙 gpt-5-mini gpt-6-luna low
majority 다수 의견(맵지 않음)은 넣고, 한 명의 "짜다"는 빼기 4/5 0/5
outlier 한 명의 "상한 냄새"는 빼기 3/5 2/5
mixed · injection · noise 갈린 의견 표시 · 리뷰 속 지시 무시 · 맛 지어내지 않기 15/15 15/15
합계 22/25 (88%) 17/25 (68%)
  • gpt-6-luna는 "~평이 많지만 짜게 느낀다는 의견도 있어요"처럼 소수 의견을 덧붙이는 문형을 거의 매번 썼다. 자동 채점은 금지 단어 목록에 "짜게"가 없어 이를 놓쳤다(자동 채점으로는 luna 88%, mini 84%였다).
  • 그래서 지금 프롬프트 그대로 모델만 바꾸면 리뷰 요약 품질이 떨어진다.

속도는 느리지만 리뷰 요약에는 덜 중요하다

모델 평균 p95 5초 초과 (2026-10-22 재확인, 10번씩)
gpt-5-mini medium 7.1s 12.0s 80%
gpt-6-luna low 1.7s 2.4s 0%
  • 요약은 사용자가 기다리는 호출이 아니라, 관리 작업(시드 · 일괄 생성)에서 상품마다 한 번 만들어 저장한다. 그래서 속도보다 품질을 우선했다.
  • 한 상품이 실패해도 요약을 비워 두고 다음 상품으로 넘어가며, 평점 · 리뷰 수 · 키워드 언급 수는 그대로 쓸 수 있다.
  • 비용도 상품 수만큼만 부르므로 총액이 작다.

3. 함께 정해야 할 것: 시간 제한 12s

  • 지금 dev 설정은 5s다. gpt-5-mini든 gpt-6-luna든 메뉴 계획은 5s를 못 지킨다 (위 표의 "5초 초과").
  • gpt-6-luna low 메뉴 계획 p95 7.5s × 1.5 → 12s 제안. 실측 60번 중 12s를 넘은 호출은 0번이었다.
  • 리뷰 요약(gpt-5-mini)은 p95 12.0 ~ 17.5s라서 12s에서도 일부 시도가 시간 초과로 재시도될 수 있다. 실패해도 요약만 비고 나머지 기능은 정상이다. 문제가 되면 리뷰 요약 전용 시간 제한을 따로 두는 방안을 검토한다.

4. 나중에 다시 볼 조건

상황 바뀔 수 있는 결정
"소수 의견도 알려 준다"로 정책을 바꾸면 원문 재채점에서 gpt-6-luna가 mini보다 낫다(다른 규칙 100% vs 96%, 부풀린 표현 0번 vs 2번). 퓨샷 · luna는 소수 의견을 매번 소수로 표시했다 → 리뷰도 luna로 통일 검토
소수 의견을 계속 빼되 luna로 통일하고 싶으면 "추출 후 요약" 기법 + luna가 96%(24/25). 구조화 출력용 클래스 추가 필요
Day 6 툴 호출 경로 gpt-6-luna는 Chat Completions에서 툴 호출을 추론 none일 때만 지원 → 그 경로의 모델은 따로 측정

5. 한계

  • 표본이 작다 (메뉴 계획 문장 20개 × 3회, 리뷰 묶음 5개 × 5회). 큰 차이(정확도 98 vs 93, 속도 2배 이상, 리뷰 88 vs 68)는 믿을 만하지만 1 ~ 2번 차이는 오차일 수 있다.
  • OpenAI 응답 속도는 시간대에 따라 달라진다 (luna 메뉴 계획 5초 초과: 10-21 68%, 10-22 20%).

6. 식품 안전 규칙 실험 (2026-10-22 22:03)

규칙: 맛·취향·배송 소수 의견은 빼고, 식품 안전(상함·곰팡이·이물질·유통기한·탈이 남) 의견은 1건이라도 "일부 ~라는 의견도 있어요"로 넣는다. 리뷰 묶음 6개 × 3회.

원문을 직접 읽고 다시 채점한 결과 (자동 채점은 "곰팡이 걱정 없이 오래 보관돼요" 같은 긍정 언급도 실패로 셌다):

방식 gpt-5-mini medium gpt-6-luna low
현재 프롬프트 안전 의견 2/12만 넣음 안전 의견 8/12, 맛 소수 의견("짜다") 덧붙임
규칙 (프롬프트만) 18/18 17/18 (taste-only에서 "짜다" 1번)
규칙 + 코드 표시 18/18 14/18 ("일부 짜다는 의견과 머리카락…" 4번)
  • 규칙만 넣어도 두 모델 모두 안전 의견을 12/12 넣었다. 안전이 아닌 리뷰("곰팡이 걱정 없이")를 안전 문제로 착각한 경우는 0번.
  • 코드 표시는 이득이 없다. 안전 누락은 이미 0이고, luna는 오히려 옆의 맛 소수 의견까지 같이 나열했다.
  • 부풀림("의견이 갈려요")은 모든 조합 0번.
  • 한계: 3회뿐이다. 프롬프트 예시가 spoiled 묶음과 거의 같아 그 묶음 결과는 후하게 나왔다(머리카락·곰팡이·배탈 묶음은 예시와 달라 일반화를 본 것).

→ 리뷰 요약은 gpt-5-mini medium + 식품 안전 규칙(프롬프트만) 으로 간다. luna도 거의 같지만 "짜다" 같은 맛 소수 의견을 덧붙이는 습관이 이번에도 보였다(1/18, 지난 실험 5/5).


리뷰 모델 측정 결과표