AI 보안
LLM 대신 Jev: 확률을 그대로 보여주는 판단 엔진은 무엇이 다른가
입력이 어떤 범주에 얼마나 해당하는지를 확률로 돌려주는 판단 엔진 Jev를 LLM, 규칙 엔진, ML 분류기와 비교해 정리했습니다.
사용자 입력을 분류하고 판단하는 일을 LLM에게 맡길지 고민하면서 Jev를 정리했습니다. 아직 공부 중인 내용입니다.
Jev란
사용자 입력을 보고 어떤 범주에, 얼마만큼 해당하는지를 측정하는 판단 엔진입니다.
LLM도 확률에 기대어 답하지만 그 확률을 보여주지 않습니다. Jev는 확률 값을 그대로 돌려주기 때문에, 결과를 얼마나 믿어도 되는지 사용자가 직접 판단할 수 있습니다.
다른 방식과 비교
| 방식 | 유연성 | 속도 | 확률 제공 | 출력 구조 보장 | 준비 비용 |
|---|---|---|---|---|---|
| 규칙 엔진 | 낮음 | 매우 빠름 | 없음 | 있음 | 낮음 |
| ML 분류기 | 낮음 | 매우 빠름 | 있음 | 있음 | 높음 |
| 일반 LLM | 매우 높음 | 느림 | 없음 | 보통 | 매우 낮음 |
| LLM 구조화 출력 | 높음 | 느림 | 없음 | 있음 | 매우 낮음 |
| 추론형 LLM | 매우 높음 | 매우 느림 | 없음 | 보통 | 매우 낮음 |
| Jev | 높음 | 빠름 (실측 232ms) | 있음 | 있음 | 낮음 |
호출 방식
판단할 대상(State)과, 그에 대해 묻는 질문(Question)을 함께 넘깁니다.
result = client.system_one(
state="결제가 두 번 됐습니다. 빨리 환불해주세요.",
questions={
"department": Choice(criteria={"billing": None, "technical": None,
"sales": None, "other": None}),
"urgency": Score(criteria=["급하지 않음", "보통", "급함", "매우 급함"]),
"refund": Noul(instructions="고객이 환불을 요구하고 있는가?"),
},
)
질문 세 가지
| 질문 | 묻는 것 | 예 |
|---|---|---|
| Choice | 여러 후보 중 어느 것인가 | 어느 부서로 보낼까 |
| Score | 어느 정도인가 | 얼마나 급한가 |
| Noul | 그런가, 아닌가 | 환불을 요구하는가 |
Choice는 가장 확률이 높은 후보와 확신도, 전체 확률 분포를 함께 돌려줍니다.
choice: "billing"
confidence: 0.94
probabilities: {"billing": 0.90, "sales": 0.07, "technical": 0.02, "other": 0.01}
Score는 점수별 확률을 종합한 평균값을, Noul은 "예"일 확률 하나를 돌려줍니다.
보안 관점에서 관심이 간 이유
LLM의 판단을 보안 정책에 그대로 쓰기 어려운 이유 중 하나는 결과를 얼마나 믿어야 할지 알 수 없다는 점입니다. 확률이 함께 나오면 "0.9 이상일 때만 자동 처리, 그 아래는 사람 검토" 같은 기준을 세울 수 있습니다. 이 부분은 직접 실험해 보며 더 확인할 계획입니다.