큰 질문 하나 대신 작은 질문 여럿 — 쪼개고, 코드로 합성하고, confidence로 분기한다
가장 흔한 실수는 "이 티켓을 자동 환불해야 할까? 긴급하고, 정당하고, 금액이 작으면 그렇게 해"처럼 여러 판단이 뒤엉킨 큰 질문을 하나로 던지는 것입니다. 긴 추론이 필요하고, 판단 근거가 불투명하며, 가중치를 바꾸려면 질문 문장을 통째로 다시 써야 합니다.
복합 질문을 원자 질문으로 쪼개면 각 질문은 단일 요인만 판단하므로 추론이 짧고 안정적이며, 요인별 결과값이 그대로 드러나 근거를 확인할 수 있습니다. 결합 규칙과 가중치는 질문 문장이 아니라 코드에 두므로, 문장을 다시 쓰지 않고도 조정할 수 있습니다.
| 관점 | 복합 질문 1개 | 원자 질문 N개 |
|---|---|---|
| 형태 | "환불 자동승인 할까?" | 긴급? · 환불요청? · 소액? (각각 Noul/Score) |
| 추론 | 긴 다단계 추론 필요 | 각 질문은 단순 — 짧고 안정적 |
| 지연 | 추론 길수록 느림 | 병렬이라 거의 불변 |
| 가중치 | 문장 재작성해야 조정 | 코드에서 자유롭게 조정 |
| 설명 | 블랙박스 | 요인별 값이 투명하게 보임 |
💡 원칙은 하나 — 질문은 원자적(atomic)이고 합성 가능(composable)하게, 즉 큰 질문 하나 대신 작은 질문 여럿으로 쪼개 코드에서 합친다는 뜻입니다. 판단을 쪼갤수록 각 답이 정확해지고, 결합은 코드가 맡습니다.
아래 코드는 쪼갠 원자 질문들의 답을 꺼내 각 요인에 가중치를 곱해 하나의 위험 점수로 합치고, 그 점수로 자동 승인·사람 검토·반려를 가릅니다.
# 원자 질문들의 답을 코드가 가중 결합
urgent = r.nouls["urgent"].noul # 0~1
is_refund = r.nouls["is_refund"].noul # 0~1
severity = r.scores["severity"].score # 0~1 (low..high)
# 각 요인에 독립적인 가중치를 코드가 부여
risk = 0.5*urgent + 0.3*is_refund + 0.2*severity
if risk > 0.8:
auto_approve() # 자동 승인
elif risk > 0.5:
route_to_human() # 사람 검토
else:
decline() # 자동 반려
💡 확신도를 믿을 수 없으면 이 로직이 무너집니다(1-2강). JEV는 그 신뢰도를 캘리브레이션 학습(RLCD)으로 정직하게 제공하므로 패턴이 성립합니다.
지금까지 배운 세 프리미티브가 실제 제품에서 어떻게 쓰이는지, 그리고 성능과 비용은 어떤지로 넘어갑니다. 4강에서는 JEV를 파이프라인에 얹었을 때의 처리량·지연·과금 모델과, 실전 도입 시 챙겨야 할 것들을 정리합니다.