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).
리뷰 모델 측정 결과표