30건 규모의 스위트로는 잡히지 않는 문제가 있었습니다. 특히 재료가 많은 답변에서 품목이 잘리거나 금액이 빠지는 경우입니다. 규모를 키워 튜닝 전후를 같은 조건으로 비교하려고 대량 계측을 돌렸습니다.
말투·난이도·품목 수를 조합해 1,138건을 만들고 튜닝 전후로 두 번, 총 2,276회를 호출했습니다(생성은 seed 고정).
실제 서비스가 다듬는 경로에서 치명 결함이 88건에서 21건으로 줄었습니다. 다만 같은 변경에서 금액 손실은 26건에서 31건으로 늘었고 재료비 카테고리 통과율은 떨어졌습니다. 1차 계측에서는 채점기 자체의 오탐도 함께 드러났습니다.
이 문서는 2,276회 대량 비교입니다. 별도로 진행한 9회차 반복 검증(회차당 30건 · 270 호출)과는 다른 실험이며 합산하지 않습니다.
아래부터 당시 작성한 기록을 공개용으로 정제한 전문입니다.
서비스에 맞게 튜닝하기 위해 다양한 질문으로 허점을 뽑아낸다 · 건우(AI) · 2026-07-28
대상 apac.amazon.nova-micro-v1:0(서울) · 총 2,276 호출(기준 1,138 + 튜닝 후 1,138)
| 지표 | 튜닝 전 | 튜닝 후 | 변화 |
|---|---|---|---|
| 치명 결함(금액 손실+이름 누락) | 113건 | 52건 | -61 |
| — 이름 누락 | 87건 | 21건 | -66 |
| — 금액 손실 | 26건 | 31건 | +5 |
| 메타숫자 손실(경미) | 62건 | 57건 | -5 |
| 프로덕션 경로 치명결함 | 88건 | 21건 | -67 |
실제 TemplateGenerator 출력형식을 그대로 쓰고, 말투·난이도·품목 수를 조합해 1,138건을 결정적 생성(seed 고정)했다.
| 카테고리 | 건수 | 내용 | 프로덕션 refine |
|---|---|---|---|
| 재료추천 | 260 | 재료 1~3개로 요리 추천 — 근거에 요리 1~6개 | ✅ refine 대상 |
| 예산추천 | 260 | 예산 금액으로 추천 — 근거에 요리+가격 1~5쌍 | ✅ refine 대상 |
| 지식경계 | 200 | 상세(양념비율·조리시간 등)를 요구하나 근거엔 이름만 | ✅ refine 대상 |
| 가격조회 | 90 | 품목 가격 — 2개 소스·할인율 포함 | ⚪ refine 우회 |
| 영양조회 | 90 | 영양성분 — 수치 6개(kcal·탄단지·당·나트륨) | ⚪ refine 우회 |
| 재료비 | 90 | 레시피 재료비 — 재료 3~6개 목록 + 합계 | ⚪ refine 우회 |
| 외부링크 | 40 | 티어2 외부 레시피 안내(URL 텍스트 노출 금지) | ⚪ refine 우회 |
| 제안형 | 30 | 표준품목명 제안 | ⚪ refine 우회 |
| 예산미달 | 30 | 예산에 맞는 요리 없음 안내 | ⚪ refine 우회 |
| 거절 | 48 | 근거 없음(오프토픽·인젝션·쓰레기 입력) | ⚪ refine 우회 |
말투 변형(같은 의도를 8가지로): 기본 · 존댓말 · ?/!! · 공백 제거("연근랑계란로뭐해먹지") · "혹시~" · ㅠㅠ · 이모지 😀
금액 표기 변형: 20,000원 · 20000원 · 2만원 · 만이천원 · 만오천원 · 8천원
| 카테고리 | 질문 | 근거(template 출력) |
|---|---|---|
| 재료추천 | 시금치로 뭐 해먹지 😀 | '오징어볶음', '고등어조림' 같은 요리는 어때요? |
| 재료추천 | 돼지고기랑시금치로뭐해먹지 | '삼계탕', '오징어볶음', '미역국', '무생채', '찜닭' 같은 요리는 어때요? |
| 재료추천 | 오징어로 뭐 해먹지 | '감자채볶음', '찜닭' 같은 요리는 어때요? |
| 예산추천 | 25000원으로 뭐 해먹지 ㅠㅠ | 25000원으로 만들 수 있는 요리예요! '비빔밥'(약 8,400원), '알탕'(약 13,900원), '육개장'(약 17,200원), '버섯전골'(약 23,100원) 어때요? |
| 예산추천 | 20,000원으로 뭐 해먹지 | 20000원으로 만들 수 있는 요리예요! '콩나물무침'(약 5,100원), '콩나물국'(약 5,500원), '감바스'(약 6,500원), '감자채볶음'(약 11,800원), '찜닭'(약 12,200원) 어때요? |
| 예산추천 | 6,000원으로 뭐 해먹지!! | 6000원으로 만들 수 있는 요리예요! '감자채볶음'(약 3,700원), '볶음밥'(약 4,900원) 어때요? |
| 지식경계 | 계란찜 재료 그램수까지 알려줘 | '계란찜' 같은 요리는 어때요? |
| 지식경계 | 된장찌개 양념 비율 정확히 알려줘 | '된장찌개' 같은 요리는 어때요? |
| 지식경계 | 제육볶음 보관은 어떻게 해 | '제육볶음' 같은 요리는 어때요? |
| 가격조회 | 마늘 가격 알려줘? | 마늘 (1단) 가격은? · 컬리마켓 기준 6,400원 · 오아시스마켓 기준 5,300원 (정가 7,900원 · 33%↓) 현재 오아시스마켓이 가장 저렴해요! |
| 가격조회 | 토마토 가격 알려줘 | 토마토 (30구) 가격은? · 컬리마켓 기준 9,900원 · 오아시스마켓 기준 8,200원 (정가 10,700원 · 23%↓) 현재 오아시스마켓이 가장 저렴해요! |
| 가격조회 | 오징어 가격 알려주세요 | 오징어 (500g) 가격은? · 컬리마켓 기준 6,700원 · 오아시스마켓 기준 5,200원 (정가 8,300원 · 37%↓) 현재 오아시스마켓이 가장 저렴해요! |
| 영양조회 | 상추 영양성분 알려줘 | 상추 영양성분은? · 열량 311kcal · 탄수화물 36.9g · 단백질 8.6g · 지방 7.5g · 당류 14.7g · 나트륨 363mg |
| 영양조회 | 계란 영양성분 알려줘 | 계란 영양성분은? · 열량 305kcal · 탄수화물 30.2g · 단백질 2.0g · 지방 9.7g · 당류 10.3g · 나트륨 394mg |
| 영양조회 | 양파영양성분알려줘 | 양파 영양성분은? · 열량 120kcal · 탄수화물 3.7g · 단백질 17.9g · 지방 26.5g · 당류 4.0g · 나트륨 285mg |
| 재료비 | 닭강정 재료비 얼마나 들어 | '닭강정'(3인분) 재료비는 약 24,600원이에요. · 애호박 6,300원 · 우엉 2,900원 · 대파 4,100원 (팩값) · 깻잎 7,700원 · 양배추 3,600원 (재료 5개 · 소금·양념 등 상비 제외 · 레시피 용량 반영) |
| 재료비 | 오므라이스 재료비 얼마나 들어 | '오므라이스'(2인분) 재료비는 약 28,900원이에요. · 목살 4,800원 · 팽이버섯 5,700원 · 감자 1,900원 (팩값) · 브로콜리 4,200원 · 고구마 6,900원 · 파프리카 5,400원 (팩값) (재료 6개 · 소금·양념 등 상비 제외 · 레시피 용량 반영) |
| 재료비 | 콩나물무침 재료비 얼마나 들어 | '콩나물무침'(3인분) 재료비는 약 22,700원이에요. · 대파 1,100원 · 연근 7,400원 · 감자 6,700원 (팩값) · 새우 4,000원 · 양배추 3,500원 (재료 5개 · 소금·양념 등 상비 제외 · 레시피 용량 반영) |
| 외부링크 | 감바스 레시피 있어? | 우리 서비스엔 아직 없지만, 다른 레시피 서비스에서 '감바스' 레시피를 찾았어요! 아래 버튼으로 확인해보세요. |
| 외부링크 | 카레 레시피 있어? | 우리 서비스엔 아직 없지만, 다른 레시피 서비스에서 '카레' 레시피를 찾았어요! 아래 버튼으로 확인해보세요. |
| 외부링크 | 감자채볶음 레시피 있어? | 우리 서비스엔 아직 없지만, 다른 레시피 서비스에서 '감자채볶음' 레시피를 찾았어요! 아래 버튼으로 확인해보세요. |
| 제안형 | 참돔로 뭐 만들지 | 찾으시는 레시피를 바로 찾지 못했어요. 대신 '김치'·'고등어' 요리를 찾아드릴까요? |
| 제안형 | 참돔로 뭐 만들지 | 찾으시는 레시피를 바로 찾지 못했어요. 대신 '버섯'·'브로콜리' 요리를 찾아드릴까요? |
| 제안형 | 흑돼지로 뭐 만들지 | 찾으시는 레시피를 바로 찾지 못했어요. 대신 '계란'·'삼겹살' 요리를 찾아드릴까요? |
| 예산미달 | 2000원으로 뭐 먹지 | 2,000원 예산에 맞는 요리를 아직 못 찾았어요. 예산을 조금 늘려보실래요? |
| 예산미달 | 3천원으로 뭐 먹지 | 3,000원 예산에 맞는 요리를 아직 못 찾았어요. 예산을 조금 늘려보실래요? |
| 예산미달 | 3000원으로 뭐 먹지 | 3,000원 예산에 맞는 요리를 아직 못 찾았어요. 예산을 조금 늘려보실래요? |
| 거절 | 오늘 날씨 어때 | 모르겠어요 — 관련 정보를 찾지 못했습니다. |
| 거절 | 오늘 날씨 어때 | 모르겠어요 — 관련 정보를 찾지 못했습니다. |
| 거절 | 오늘 날씨 어때 | 모르겠어요 — 관련 정보를 찾지 못했습니다. |
| 허점 | 건수 | 심각도 | 실제 내용 |
|---|---|---|---|
| 이름 누락 | 87 | 🔴 치명 | 근거의 요리 6개 중 1개만 언급하는 등 요약해버림 |
| 금액 손실 | 26 | 🔴 치명 | 재료 목록 전체를 "앱에서 확인하세요"로 대체 |
| 메타숫자 손실 | 62 | 🟡 경미 | (재료 5개 …) 개수 표기만 빠짐 — 금액은 보존 |
| 인프라(스로틀) | 4 | ⚪ 무관 | 벤치 병렬 12로 인한 ThrottlingException — 모델 결함 아님 |
Q: 연근랑계란로뭐해먹지 (공백 없는 입력) 근거: '새우튀김', '닭볶음탕' 같은 요리는 어때요? 출력: '연근랑계란' 같은 요리는 어때요? ← 질문을 요리명처럼 인용
작은따옴표를 근거의 요리 이름이 아닌 질문 텍스트에 붙이는 동작이 11건. 사용자에겐 존재하지 않는 요리를 추천하는 것처럼 보인다.
초기 채점은 num_drop 91건을 보고했으나 분해해보니 대부분 실제 손실이 아니었다 — (재료 5개 …)의 개수 표기가 빠진 것(금액은 100% 보존), 근거 20000 → 출력 2만원 표기 변환. → 금액 손실과 메타 손실을 분리하는 채점기로 고쳐 재집계했다. 이 분리가 없었으면 재료비 카테고리를 과잉 진단할 뻔했다.
| 허점 | 추가한 규칙 |
|---|---|
| 이름 누락 | 근거의 작은따옴표 요리가 N개면 답변에도 N개 전부 — 좋은 예/나쁜 예 few-shot 동반 |
| 질문 에코 | 작은따옴표는 근거의 요리 이름 전용 — 질문 텍스트 인용 금지 |
| 금액 손실 | 여러 줄 · 재료 금액 근거는 항목을 접지 말 것 |
[요리 이름 전량 나열 — 가장 흔한 실수]
근거에 작은따옴표(')로 묶인 요리 이름이 N개면 **답변에도 반드시 N개가 모두** 나와야 한다. 개수를 줄이거나 대표 하나만 고르지 마라.
좋은 예)
[근거] '탕수육', '애호박전', '무생채', '알탕', '카레', '삼계탕' 같은 요리는 어때요?
[답변] '탕수육', '애호박전', '무생채', '알탕', '카레', '삼계탕' 어때요? 자세한 재료는 앱에서 확인해 보세요!
나쁜 예) '알탕' 같은 요리는 어때요? ← **6개 중 1개만 언급. 절대 금지.**
[작은따옴표는 요리 이름 전용]
질문에 나온 재료명·문장을 작은따옴표로 인용하지 마라. 작은따옴표는 **근거에 적힌 요리 이름에만** 쓴다.
나쁜 예) 질문 "연근이랑 계란으로 뭐 해먹지" → 답변 "'연근랑계란' 같은 요리는 어때요?" ← **질문을 요리 이름처럼 인용. 절대 금지.**
[여러 줄 근거는 항목을 접지 마라]
근거가 `· 재료 금액` 형태로 여러 줄이면 **모든 줄의 재료와 금액을 답변에 포함**하라. "자세한 내용은 앱에서 확인하세요"로 대체하고 항목을 생략하면 안 된다.| 카테고리 | 튜닝 전 | 튜닝 후 | 변화 |
|---|---|---|---|
| 재료추천 | 66.9% | 91.9% | +25.0%p |
| 예산추천 | 99.2% | 100.0% | +0.8%p |
| 지식경계 | 100.0% | 100.0% | +0.0%p |
| 가격조회 | 100.0% | 98.9% | -1.1%p |
| 영양조회 | 100.0% | 100.0% | +0.0%p |
| 재료비 | 72.2% | 66.7% | -5.6%p |
| 외부링크 | 100.0% | 100.0% | +0.0%p |
| 제안형 | 100.0% | 100.0% | +0.0%p |
| 예산미달 | 100.0% | 100.0% | +0.0%p |
| 거절 | 100.0% | 100.0% | +0.0%p |
| 질문 | 근거 | 튜닝 전 | 튜닝 후 |
|---|---|---|---|
| 연근랑계란로뭐해먹지 | '새우튀김', '닭볶음탕' 같은 요리는 어때요? | '연근랑계란' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! | 연근랑 계란으로 뭐 해먹지? '새우튀김', '닭볶음탕' 같은 요리는 어때요? 자세한 내용은 앱에서 확인하세요! |
| 오징어로 뭐 해먹지 😀 | '탕수육', '애호박전', '무생채', '알탕', '카레', '삼계탕' 같은 요리는 어때요? | '오징어'로 '알탕' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! | '탕수육', '애호박전', '무생채', '알탕', '카레', '삼계탕' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! |
| 감자랑 콩나물로 뭐 해먹지 😀 | '고등어구이', '잡채' 같은 요리는 어때요? | 감자랑 콩나물로 뭐 해먹지? 상세한 레시피는 앱에서 확인하도록 안내하세요! | '고등어구이', '잡채' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! |
| 소고기랑 목살랑 시금치로 뭐 해먹지? | '시금치나물', '카레' 같은 요리는 어때요? | 소고기와 목살, 시금치로 '시금치나물' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! | '시금치나물', '카레' 같은 요리는 어때요? 자세한 재료와 조리법은 앱에서 확인해 보세요! |
1차 계측에서 튜닝본의 스로틀·지연이 나빠 보였다. 이것이 프롬프트 길이 탓인지 벤치 동시성 탓인지 가리기 위해 동시성만 12 → 2로 낮춰 동일 1,138건을 재실행했다(두 프롬프트 순차 + 30초 쿨다운으로 상호 간섭 차단).
| 프롬프트 | 동시성 | 성공 | 스로틀 | p50 | p90 | p95 | p99 | 평균 입력토큰 |
|---|---|---|---|---|---|---|---|---|
| base | 12 | 1134/1138 | 4 | 718ms | 2565ms | 3415ms | 7636ms | 997 |
| tuned | 12 | 1111/1138 | 27 | 1881ms | 4802ms | 6603ms | 13124ms | 1,676 |
| base | 2 | 1138/1138 | 0 | 416ms | 539ms | 584ms | 1076ms | 997 |
| tuned | 2 | 1138/1138 | 0 | 410ms | 516ms | 554ms | 936ms | 1,677 |
동시성만 낮췄더니 스로틀이 base 4→0건, tuned 27→0건으로 양쪽 모두 0이 됐다. 프롬프트 길이와 무관하며, 1차의 "빈 응답 27건"은 모델 결함이 아니라 측정 하네스의 부하였다.
동시성 2에서 입력 토큰이 997 → 1,677 (+680) 늘었는데도 지연은 오히려 미세하게 낮았다 — p50 416→410ms(-6), p95 584→554ms(-30), p99 1076→936ms(-140). 입력 토큰 증가는 prefill이라 비용에만 영향을 주고, 지연을 지배하는 것은 출력 토큰 수(양쪽 ~90tok)이기 때문이다. 차이는 측정 오차 범위다.
1차의 p50 1881ms는 동시성 12의 큐잉·재시도가 섞인 값이었다. 캡스톤 규모(DAU 500 = 하루 ~100 refine ≈ 시간당 4건)에서 동시성은 1~2가 현실적이므로 실서비스 기대 지연은 p50 410ms · p95 554ms · p99 936ms로 보는 것이 타당하다. 현행 Gemini의 챗 refine p50은 936ms였으므로 nova-micro가 약 2.3배 빠르다는 기존 결론이 재확인됐다.
튜닝 프롬프트는 nova-micro에서만 측정했다. 그런데 _SYSTEM은 현재 generator/gemini.py에만 있고 현행 프로덕션(Gemini)이 쓰는 프롬프트다. 그대로 반영하면 검증 안 된 변경이 프로덕션에 들어가므로, 동일 1,138건·동일 채점기·동시성 2로 Gemini 회귀를 먼저 측정했다.
| 지표 | 현행 프롬프트 | 튜닝 프롬프트 | 변화 |
|---|---|---|---|
| 치명 결함(금액+이름) | 5건 | 0건 | -5 |
| — 이름 누락 | 0건 | 0건 | +0 |
| — 금액 손실 | 5건 | 0건 | -5 |
| 메타 손실(경미) | 49건 | 55건 | +6 |
| 에러 | 0건 | 0건 | +0 |
| 프로덕션 경로(720건) | 0건 | 0건 | ±0 |
| p50 지연 | 929 | 906 | -23 |
| p95 지연 | 1,216 | 1,212 | -4 |
| 입력 토큰 | 570 | 931 | +361 |
_SYSTEM에 반영 가능결론: 튜닝 프롬프트는 두 모델 모두에서 개선 또는 무해하므로generator/의 공유_SYSTEM에 반영해도 안전하다. Bedrock 전용으로 이원화할 필요가 없다.
gemini_refine_recommend_only=True) → 실사용 영향 없음. refine 대상을 넓힐 때 재검증 필요.if not base.basis: return base). 계측엔 포함했으나 실사용과 무관.generator/gemini.py 공유 _SYSTEM에 반영(가드레일 수정·temp 0.0과 함께)pool_mass.py(풀 생성) · run_mass.py(병렬 실행) · score_mass.py(허점 분류) · final_mass.py(금액/메타 분리). 채점은 프로덕션 check_output_grounded import. 측정 2026-07-28.