JEV - 루프에서 나가기: 확신도를 코드에 쓴다
확신도가 분기에 쓰인 뒤, 사람은 요청마다의 필수 경로에서 물러나 확률이 아직 흩어진 소수만 다룹니다. 고권한 동작은 여전히 코드가 임계값 위에서 실행합니다.

공동 작성자: folkbench.com (Folkbench는 AI API, 모델 서비스, 관련 사이트를 위한 검증 가능한 평가·선택 플랫폼입니다. 공개된 서비스 정보, 가격, 가용성, 지연, 증거 구간을 바탕으로 사용자가 경로를 비교하고 고를 수 있게 합니다.)
이 시리즈는 열 편입니다:
- JEV - 관절에는 뇌가 필요 없습니다
- JEV - 제어 노드의 윤활제
- JEV - BERT에서 하나의 분포로
- JEV - 주문 대신 닫힌 질문을 설계한다
- JEV - 반토큰 장부는 이것을 먼저 내지 않는다
- JEV - 분포만 돌려주는 두 demo
- JEV - 루프에서 나가기: 확신도를 코드에 쓴다
- JEV - 선을 넘으면 더 똑똑함은 상품이 아니다
- JEV - 직관과 이성: 관절에 묻지 말 말
- JEV - 화면 조작에서 확률만으로
루프의 한가운데에 사람이 있는 것은 타협이었습니다. 모델이 헛소리를 할 수 있어서, 고권한 동작 앞에 사람이 서 있었습니다. 오래 세워 두면 사람은 아키텍처 부채가 됩니다. 처리량은 더 이상 대역폭에 달리지 않습니다. 누군가 근무 중인지에 달립니다. Jev는 이것을 뒤집습니다. 확신도는 분기에 쓰입니다. 사람은 간선에서 가장자리로 물러나, 분포가 아직 흩어진 짧은 구간만 다룹니다.
사람이 끌려 들어온 이유
대화 모델은 텍스트를 이어 쓰는 기계입니다. 출력의 모양이 불안정하고, 환각은 곧 업무 사고가 됩니다. 금융, 배차, 준수는 그래서 방어를 두 겹 쌓았습니다.
해석 층은 계속 두꺼워집니다
한 단락에서 적법한 JSON을 꺼내려면, 주변에 Pydantic, 재시도, 키워드 차단 목록, 두 번째 지시가 자랍니다. 판정 하나의 경로는 이렇게 됩니다. 지시를 쓰고, 생성을 기다리고, 해석에 실패하고, 다시 지시하고, 다시 평가합니다. 지연은 호출 한 번에서 한 바퀴의 순환으로 불어납니다.
사람 대기열이 간선이 됩니다
방어가 아직 아무것도 약속하지 못할 때, 제품은 말합니다. 여기에 사람 대기열을 거십시오. 시스템은 「모델이 초안을 쓰고, 사람이 결정한다」가 됩니다.
- 상한은 사람의 속도와 근무조이지, 기계가 아닙니다.
- 사람은 여러 시스템 사이를 오가며 구조화되지 않은 글을 읽습니다. 피로 자체가 오판을 부릅니다.
- 사 온 계산력은 끝에 가서 입력하는 사람 앞의 초안기가 됩니다. 이것은 가짜 자동화입니다.
확신도를 분기에 쓰기
모델을 if에 곧장 쓸 수 없었던 것은, 「90퍼센트는 확실하다」가 그 자체로 믿을 수 없고 비교하기도 어려웠기 때문입니다. Jev가 돌려주는 것은 닫힌 질문 위의 확률입니다. 정책이 허용할 만큼 높으면 코드가 실행됩니다. 흩어져 있으면 가장자리 대기열로 갑니다.
request
│
▼
Jev
├─ probability clears the threshold ─► code runs
└─ probability does not ─► a person at the edge
확률을 먼저 모읍니다
이유는 쓰지 않습니다. 의미를 정해 둔 부류나 단으로 누르고, 수를 돌려줍니다. 벽의 왼쪽은 자연어의 혼란을 흡수합니다. 오른쪽에는 시험할 수 있는 수만 남습니다.
임계값이 곧 경로입니다
임계값은 정책이지, 모델의 출고 설정이 아닙니다. 환불 같은 고권한 동작은 「예」의 확률이 0.99를 넘도록 잡을 수 있습니다. 넘으면 단단한 분기로 갑니다. 못 넘으면 자동화를 위해 밀어붙이지 마십시오. 여기의 0.99는 예입니다. 업무마다 스스로 씁니다.
사람은 가장자리에 남습니다
사람은 더 이상 간선의 모든 마디에 서지 않습니다. 사람 대기열은 필수 경로가 아니라 예외를 가로채는 곳이 됩니다. 실어 나르는 것은 확률이 흐린 소수이지, 모든 요청이 아닙니다.
요청 하나, 쓰는 법 둘
먼저 생성하고, 그다음 해석합니다
def handle_ticket_legacy(ticket_text: str):
prompt = f"""
Read the ticket and return JSON:
{{"intent": "REFUND"|"COMPLAINT"|"OTHER", "urgency": "HIGH"|"LOW"}}
Ticket: {ticket_text}
"""
raw = chat_model.complete(prompt)
try:
data = json.loads(raw)
except json.JSONDecodeError:
return push_to_human(ticket_text, reason="parse")
if data.get("intent") == "REFUND" and data.get("urgency") == "HIGH":
# no trustworthy confidence, so the privileged action still will not run itself
return push_to_human(ticket_text, data)
return default_route(data)
해석은 빠진 칸과 부서진 형식을 다뤄야 합니다. 해석이 성공해도 얼마나 안정적이었는지는 모릅니다. 고위험 분기는 여전히 사람에게 돌아갑니다.
분포가 분기에 들어갑니다
def handle_ticket_jev(ticket_text: str):
refund = jev.noul(state=ticket_text, statement="this is a high-risk request that should enter refund review automatically")
kind = jev.choice(
state=ticket_text,
options=["HIGH_RISK_REFUND", "NORMAL_INQUIRY", "SPAM"],
)
if kind.top == "HIGH_RISK_REFUND" and refund.p_yes >= 0.99:
return execute_refund_review(ticket_text)
if kind.top == "NORMAL_INQUIRY" and kind.probability >= 0.95:
return auto_reply(ticket_text)
return push_to_edge_human(ticket_text, confidence=kind.probability)
이것은 모델에게 환불할 권리를 주지 않습니다. 고권한 동작은 여전히 코드가 임계값 위에서 호출하는 함수입니다. 그 함수 안의 회계 검사는 한 줄도 빠져서는 안 됩니다. 모델이 주는 것은 닫힌 질문의 확률뿐입니다.
나란히
| 차원 | 먼저 생성하고, 사람이 루프 안에 있음 | 분포를 분기에 씀 |
|---|---|---|
| 제어 흐름 | try-catch, 재시도, 안전 울타리 | 임계값과 보통 분기 |
| 지연 | 생성 한 번, 종종 1초를 넘음. 사람을 기다리면 몇 시간 | 닫힌 호출은 약 70–500 ms. 사람은 가장자리에서만 |
| 사람이 있는 곳 | 종종 간선 위 | 확률이 부족할 때만 |
| 상태 | 가운데에 텍스트 한 구간 | 통과하거나, 통과하지 않거나 |
결정성은 if로 돌아옵니다
소프트웨어가 원하는 것은 시험할 수 있는 분기입니다. 대화 모델이 간선에 들어오면, 모양이 바뀔 수 있는 문장이 if 앞에 앉습니다. 닫힌 질문은 그 변형을 벽의 왼쪽에 남깁니다. 오른쪽은 여전히 if와 else입니다.
모든 요청이 클릭을 기다릴 때, 사람은 가장 큰 마찰입니다. 간선에서 빼면, 임계값을 넘은 흐름은 확인 때문에 멈추지 않습니다. 확률이 떨어지면 시스템은 국지적으로 가장자리로 미끄러집니다. 사슬 전체를 막지는 않습니다.
루프의 한가운데에 사람이 있는 것은 초기에 치른 타협입니다. 성숙한 배선은 사람을 부품으로 쓰지 않습니다. 아직 흩어진 소수를 보게 하고, 극단적인 예외를 다루게 합니다. 관절이 기울기를 갖습니다. 사람이 갖는 것은 아직 정책에 적히지 않은 구간입니다.