{
  "aboutHtml": "<p>Jev는 TypeSafe의 플래그십 모델이자 새로운 <strong>System One</strong> 클래스의 첫 모델입니다. 텍스트를 쓰는 대신 프로그램이 바로 사용할 수 있는 결정을 빠르게 내립니다. 텍스트나 JSON 형태의 <strong>상태</strong>(<code>state</code>)와 <strong>질문</strong> 집합을 전달하면, 보정된 확률이 포함된 자료형이 정해진 값을 받습니다.</p><p>언어 모델이 사람을 위한 말을 쓴다면 Jev는 TypeSafe의 설명대로 코드에 더 가깝습니다. 응답이 즉시 코드에 필요한 형식으로 나오고, 빠르며, 지정한 선택지 밖의 값이 없습니다. 반복 요청에서도 안정적인 응답을 하도록 설계되었습니다.</p><h4>System One과 언어 모델의 차이</h4><ul><li><strong>생성하지 않습니다.</strong> Jev는 사용자에게 답변을 쓰거나 코드를 작성하거나 추론 과정을 설명하지 않습니다. 세 가지 질문 유형 중 하나로 가능한 응답을 직접 지정합니다.</li><li><strong>보정된 결정을 학습합니다.</strong> TypeSafe는 RLCD(Reinforcement Learning for Calibrated Decisions)로 모델을 학습합니다. 확률을 실제 결과에 맞추며 불확실성을 반영합니다. 확률 0.8인 다수의 응답 중 약 80%가 맞아야 합니다. 보정은 큰 표본의 특성이며 개별 응답의 정확성을 보장하지 않습니다.</li><li><strong>학습 목표가 다릅니다.</strong> 채팅 모델은 사람의 선호에 맞도록 학습되며(RLHF), TypeSafe의 관찰에 따르면 이는 비위를 맞추는 행동과 확신 있게 들리는 오류를 장려합니다. RLHF의 공동 저자 중 한 명인 디오구 알메이다는 TypeSafe 공동 창업자입니다.</li></ul><p>이름은 대니얼 카너먼의 책 『느리게 생각하고… 빠르게 결정하기』에 나오는 시스템 1을 가리킵니다. 빠른 직관적 판단을 시스템 2의 느리고 신중한 사고와 대비한 개념입니다. Jev는 빠르고 좁은 판단을 위해 만들어졌습니다.</p><h4>세 가지 질문 유형</h4><p>질문은 상태에 대한 하나의 판단입니다. 응답은 코드가 임계값과 비교하거나, 정렬하거나, 다음 단계에 전달하는 값입니다.</p><ol><li><strong>Choice — 선택지 고르기.</strong> 문의를 맡을 부서, 상품 카테고리, 코드 조각의 언어 등이 해당합니다. 선택지는 선택지 → 설명의 사전이며 최대 255개입니다. 응답에는 선택된 <code>choice</code>, 모든 선택지의 확률 <code>probabilities</code>(합계 1), 확신도 <code>confidence</code>가 있습니다. 목록이 모든 경우를 다루지 못할 수 있다면 기타 또는 해당 없음 항목을 추가하세요.</li><li><strong>Score — 척도 평가.</strong> 오류의 심각도, 고객의 짜증 정도, 숙련도처럼 직접 설명하는 순서 있는 척도의 위치입니다. 낮은 수준부터 높은 수준까지 2~10단계이며, 모델은 단계 번호와 이웃 단계를 보지 않고 각각을 따로 평가합니다. 응답에는 <code>score</code>(단계 번호에 각 확률을 곱한 값의 합이므로 단계 사이에 놓일 수 있음), 단계 설명의 <code>legend</code>, <code>probabilities</code>, <code>confidence</code>가 있습니다.</li><li><strong>Noul — 예 또는 아니요.</strong> 진술이 맞는지 판단합니다. 응답 <code>noul</code>은 0~1의 예 확률입니다. 1에 가까우면 확신하는 예, 0에 가까우면 확신하는 아니요, 약 0.5이면 모델이 망설입니다. 별도의 <code>confidence</code>는 없으며 숫자 하나로 응답을 모두 설명합니다. 선택 사항인 <code>criteria</code>는 무엇을 예와 아니요로 볼지 구체화합니다.</li></ol><p>선택 방법은 다음과 같습니다. 순서 없는 알려진 선택지는 choice, 스펙트럼의 단계는 score, 확률 자체가 중요한 순수한 예·아니요는 noul입니다. Noul 0.5는 예와 아니요의 확률이 같다는 뜻이며 중간 수준이 아닙니다. 정도는 score로 측정합니다. 두 유형이 모두 적절하다면 코드가 곧바로 행동할 수 있는 쪽을 고르세요. choice는 분기, score는 임계값, noul은 <code>if</code>입니다.</p><p>하나의 요청에 유형을 섞을 수 있습니다. 응답은 항상 지정한 선택지로 제한되고 다른 질문에 의존하지 않습니다. 다른 응답을 바꾸지 않고 질문을 추가하거나 제거할 수 있습니다.</p><h4>상태</h4><p>상태는 고객 메시지, 문서 구간, 데이터베이스 기록, 애플리케이션 상태 등 모델이 평가하는 대상입니다.</p><ul><li><strong>문자열</strong> — 메시지, 기사, 발췌처럼 텍스트가 하나인 경우입니다.</li><li><strong>객체</strong> — 이름이 있는 필드, 연결된 기록, 애플리케이션 상태입니다. TypeSafe는 각 부분의 이름이 명확하므로 대부분의 요청에 객체를 권장합니다.</li><li><strong>배열</strong> — 메시지나 기록의 순서입니다.</li></ul><p>전문가에게 줄 자료처럼 준비하세요. 판단에 비교가 필요하면 대화, 주문, 반품 규칙을 함께 담으세요. 내용은 상태에, 판단은 질문에 넣으세요. 질문이 상태의 한 부분에 관한 것이라면 <code>ticket.messages[0].text</code>처럼 그 경로를 백틱으로 표시하세요.</p><h4>질문하는 방법</h4><ul><li><strong>질문 하나에 빠른 판단 하나를 담으세요.</strong> 좋은 질문은 적절한 맥락을 아는 사람이 1초 만에 답할 수 있는 것입니다. 예를 들어 메시지가 긴급한가요?라는 질문입니다. 메시지를 분석하고 무엇을 할지 결정하라는 요청은 이미 느린 추론이므로 단순한 질문으로 나누어야 합니다.</li><li><strong>질문 전체는 <code>instructions</code>에 넣으세요.</strong> <code>refund_requested</code> 같은 질문 키는 코드에만 필요하며 모델에 전달되지 않습니다.</li><li><strong>같은 상태의 모든 질문은 한 요청으로 보내세요.</strong> 모델은 병렬로 평가합니다. TypeSafe에 따르면 추가 질문은 응답 시간을 거의 늘리지 않고 자체 토큰만큼만 비용이 듭니다. 혹시 필요할까 해서 넣는 질문은 비용이 거의 들지 않으며, 필요한 응답은 코드가 결정합니다.</li><li><strong>복잡한 판단은 나누세요.</strong> 스타트업 지원서를 평가하라는 대신 시장 규모, 기술적 실현 가능성, 경쟁사와의 차이를 따로 질문하고 코드에서 가중치로 결과를 계산하세요. 우선순위가 바뀌면 질문을 다시 쓰는 대신 가중치를 바꾸세요.</li><li><strong>종속된 질문은 두 번째 요청으로 보내세요.</strong> 한 요청의 응답은 서로의 맥락이 되지 않습니다. 첫 응답 없이 다음 요청을 구성할 수 없을 때에만 두 번째 요청이 필요합니다. 추가 데이터를 불러오거나 다음 질문의 선택지를 골라야 하는 경우입니다.</li><li><strong>긴 질문은 객체로 구성하세요.</strong> <code>instructions</code>와 <code>criteria</code>는 일반적으로 문자열이지만 객체나 배열일 수도 있습니다. 한 필드에는 질문을, 다른 필드에는 데이터를 넣습니다. 이력서와 데이터베이스 기록을 한 질문에서 비교할 때 편리합니다.</li></ul><h4>확신도</h4><p>choice와 score의 <code>confidence</code>는 0~1로 확률이 한 응답에 얼마나 집중되는지 보여 줍니다. 1은 모든 확률이 한 선택지에 있고, 0은 모든 선택지에 균등하게 분포합니다. score에서는 이웃 단계가 먼 단계보다 확신도를 덜 낮춥니다. noul에서는 값 자체가 확신도입니다. 0.5에서 멀수록 응답이 더 확실합니다.</p><p>TypeSafe는 세 범위를 권장합니다.</p><ol><li><strong>높은 확신도</strong> — 자동으로 행동하세요.</li><li><strong>중간</strong> — 신중하게 행동하세요. 예를 들어 사용자에게 확인을 요청하세요.</li><li><strong>낮은 확신도</strong> — 사람에게 넘기거나, 요청을 구체화하거나, 더 강력한 추론 모델 같은 대체 경로를 연결하세요.</li></ol><p>오류 비용이 클수록 임계값을 엄격하게 정하세요. 되돌릴 수 없는 작업의 기준은 읽기보다 높아야 합니다. 응답은 무엇을 선택할지, 확신도는 행동할 만한지를 말합니다. 자체 데이터에서 확신도와 정확성을 비교하여 임계값을 정하세요.</p><h4>Jev를 중심으로 시스템 만들기</h4><p>Jev는 다음 단계를 스스로 선택하고 반복마다 길을 잃을 수 있는 에이전트보다는, 코드가 과정을 제어하고 모델이 좁은 의미적 질문에 답하는 프로그램을 위해 설계되었습니다. TypeSafe의 설계 단계는 여덟 가지입니다.</p><ol><li>코드로 할 수 있는 것은 코드로 하세요. 신뢰할 수 있고 저렴합니다.</li><li>상태에는 현재 질문에 필요한 것만 넣으세요. 최신 사실은 모델 메모리 대신 자체 지식베이스에서 가져오세요.</li><li>상태를 구조화하세요. 중첩 JSON을 사용하고, 모호함을 줄일 수 있다면 질문에 필요한 필드 경로를 백틱으로 표시하세요.</li><li>질문은 최대한 좁고 구체적으로 하세요. TypeSafe에 따르면 가장 중요한 규칙일 수 있습니다. 넓은 질문은 한 응답 뒤에 여러 판단을 숨깁니다.</li><li>질문을 구조화하세요. 질문 자체는 짧게 두고, 설명, 예시, 자체 데이터베이스의 값은 하나의 긴 문자열 대신 <code>instructions</code> 또는 <code>criteria</code> 객체의 이웃 필드에 넣으세요.</li><li>같은 상태에 대한 다수의 독립적인 질문을 하나의 요청에 담으세요. 같은 비용으로 더 많은 가치를 얻습니다.</li><li>응답은 코드가 규칙, 가중 합계, 일반적인 머신러닝 모델의 특징값으로 결합합니다.</li><li>확신도에 따라 분기하세요. 불확실한 사례는 사람이나 추론 모델에 넘기세요.</li></ol><p>Jev는 채팅이나 코드 자동 완성 모델이 아니며, 프로그래밍 에이전트에서 언어 모델 대신 넣을 수 없습니다. 다만 에이전트가 빠른 보정된 응답이 필요한 곳에서 Jev를 호출하는 코드를 작성할 수 있습니다.</p><h4>활용 분야</h4><ul><li><strong>백그라운드 자동화</strong> — 사람이 곁에 없어도 백만 번 실행되는 결정.</li><li><strong>실시간</strong> — TypeSafe에 따르면 대부분의 요청은 약 100ms에 수행되어 즉시 처리와 인터페이스에 충분합니다.</li><li><strong>대규모 데이터</strong> — 거대한 코퍼스 검색, 에이전트 작업 로그 라벨링, 예측용 특징값.</li><li><strong>다른 모델 검증</strong> — 요청, 추출, 추론, 도구 호출에서 제한 우회, 인용 오류, 허구를 확인합니다.</li><li><strong>검색과 순위화</strong> — 질의·후보 쌍의 관련성, 재순위화, 컨텍스트 선택.</li><li><strong>의도별 분기</strong> — 사용자의 목적과 필요한 처리기를 판단합니다. 단순 로직, 전문 모델, 사람 중에서 선택하며 주제, 복잡도, 위험에 따라 어떤 언어 모델에 요청을 줄지 정합니다.</li><li><strong>보호 검사</strong> — 언어 모델의 입력, 출력, 도구 호출에서 삽입된 지시, 규칙 위반, 개인정보 유출을 검사합니다.</li><li><strong>고객 지원</strong> — 문의 주제와 의도, 긴급성, 짜증, 이탈 위험, 환불 요청, 대기열.</li><li><strong>콘텐츠 검토</strong> — 플랫폼 규칙에 따른 유해성, 괴롭힘, 스팸, 사기, 위험한 조언, 개인정보를 다룹니다. 심각도와 확신도에 따라 통과, 경고, 확인, 차단을 선택합니다.</li><li><strong>산업별 활용</strong> — 보험 사고, 금융 조사와 KYC, 계약과 광고, 상품 카드, 채용, 잠재 고객, 게임, 위험, 수요 예측, 지식 그래프, 과학 리뷰, CI의 의미적 코드 검증.</li></ul><h4>특성</h4><ul><li><strong><code>jev-latest</code></strong> — 최신 안정 버전의 별칭으로, 현재는 Jev 1.13입니다. 응답한 버전은 <code>model</code> 필드에 있으며 예시는 <code>jev-1.13.0</code>입니다. 새 버전이 나오면 별칭이 그 버전으로 옮겨가며, 사용자가 수정하지 않아도 응답이 바뀔 수 있습니다. 특정 버전에 맞춰 임계값을 정했다면 이 필드를 확인하세요.</li><li><strong>컨텍스트</strong> — 상태와 모든 질문을 합쳐 요청당 64K토큰입니다. 상태와 가장 긴 질문의 합계는 최대 32K입니다. 모델은 상태를 한 번 읽고 모든 질문을 이에 대해 병렬로 검사합니다.</li><li><strong>입력</strong> — 문자열, JSON 객체, 텍스트 배열 형태의 텍스트만 받습니다. 이미지, 오디오, 동영상은 아직 지원하지 않으므로 미리 텍스트로 바꾸세요.</li><li><strong>언어</strong> — 주 학습 언어는 영어이며 현재 영어의 정확도가 가장 높습니다. 중국어, 일본어, 한국어 등 다른 언어도 입력받지만 정확도가 낮으므로 자체 데이터로 확인하세요.</li><li><strong>Ailoot API 가격 및 과금</strong> — 조건은 선택한 메서드에 따라 달라지며 해당 메서드 카드에 명시되어 있습니다.</li><li><strong>설정</strong> — Jev는 고객 데이터로 파인튜닝하지 않습니다. 자체 자료는 <code>state</code>에, 분야 규칙은 <code>instructions</code>와 <code>criteria</code>에 넣으세요.</li><li><strong>데이터</strong> — TypeSafe는 고객의 요청과 응답으로 Jev를 학습하지 않는다고 밝힙니다.</li></ul><h4>Jev 1.13의 알려진 약점</h4><p>TypeSafe는 현재 버전의 약점을 공개적으로 나열하며 이후 버전에서 많은 부분을 고치겠다고 약속합니다. 모델은 빠르고 보정되어 있으며 상식적인 판단을 잘하지만 다음 한계가 있습니다.</p><ol><li><strong>문자 그대로 읽습니다.</strong> 암시된 질문이 아니라 적힌 질문에 답하며 단서, 부정, 암묵적 조건을 문자 그대로 이해합니다. 정확한 조건과 경계 사례를 <code>criteria</code>에 적고, 피할 수 없는 해석은 문자 그대로의 두 질문으로 나누세요.</li><li><strong>계산기가 아닙니다.</strong> 문자, 반복, 목록 요소의 개수 세기는 신뢰하기 어렵고 크기가 커질수록 오류가 증가합니다. 후보별 질문 하나를 사용하고 계산은 코드로 하세요. 모델은 색상 이름보다 hex나 RGB 색상을 덜 잘 이해합니다. <code>score</code>는 임계값에 적합하지만 단계 사이의 정확한 수치에는 적합하지 않습니다.</li><li><strong>날짜와 시간.</strong> 어느 날짜가 먼저인지, 간격이 얼마인지, 날짜가 기간에 속하는지에 대한 판단은 신뢰하기 어렵습니다. 특히 형식이 섞이거나 상대적 날짜를 사용하면 그렇습니다. 날짜 부분은 choice로 추출하고 미기재 선택지를 추가한 뒤 코드로 비교하세요.</li><li><strong>간접 표현.</strong> 이중 부정과 속성의 속성에 대한 질문은 정확도를 낮춥니다. 직접 쓰고 상태의 부분을 이름으로 지정하세요.</li><li><strong>불필요한 상태 내용.</strong> 관련 없는 텍스트는 정확도를 낮춥니다. 코드로 필터링하고, 불가능하면 noul 질문으로 관련 없는 내용을 제외하세요.</li><li><strong>적대적인 텍스트.</strong> 모델은 기본적으로 상태 안의 함정을 예상하지 않습니다. 삽입된 지시나 자신의 분류에 이의를 제기하는 텍스트가 응답을 바꿀 수 있습니다. 정확한 기준을 쓰고 실행 전에 경계 사례를 확인하세요.</li><li><strong>모순.</strong> <code>instructions</code>와 <code>criteria</code>가 서로 다른 것을 요구하면 정확도가 떨어집니다. 예를 들어 noul의 예를 아니요로 설명하는 경우입니다. 기준은 질문의 연장입니다.</li><li><strong>선택지 순서.</strong> 모델이 때때로 choice의 첫 선택지를 선호합니다. 순서를 바꾼 뒤 응답이 변하지 않는지 확인하세요.</li><li><strong>생성.</strong> Jev는 텍스트 쓰기를 학습하지 않았습니다. 데이터 추출에는 정규식이나 생성 모델로 후보를 찾고 Jev가 choice로 올바른 것을 선택하게 하세요.</li></ol>",
  "aboutText": "Jev는 TypeSafe의 플래그십 모델이자 새로운 **System One** 클래스의 첫 모델입니다. 텍스트를 쓰는 대신 프로그램이 바로 사용할 수 있는 결정을 빠르게 내립니다. 텍스트나 JSON 형태의 **상태**(`state`)와 **질문** 집합을 전달하면, 보정된 확률이 포함된 자료형이 정해진 값을 받습니다.\n\n언어 모델이 사람을 위한 말을 쓴다면 Jev는 TypeSafe의 설명대로 코드에 더 가깝습니다. 응답이 즉시 코드에 필요한 형식으로 나오고, 빠르며, 지정한 선택지 밖의 값이 없습니다. 반복 요청에서도 안정적인 응답을 하도록 설계되었습니다.\n\n### System One과 언어 모델의 차이\n\n- **생성하지 않습니다.** Jev는 사용자에게 답변을 쓰거나 코드를 작성하거나 추론 과정을 설명하지 않습니다. 세 가지 질문 유형 중 하나로 가능한 응답을 직접 지정합니다.\n- **보정된 결정을 학습합니다.** TypeSafe는 RLCD(Reinforcement Learning for Calibrated Decisions)로 모델을 학습합니다. 확률을 실제 결과에 맞추며 불확실성을 반영합니다. 확률 0.8인 다수의 응답 중 약 80%가 맞아야 합니다. 보정은 큰 표본의 특성이며 개별 응답의 정확성을 보장하지 않습니다.\n- **학습 목표가 다릅니다.** 채팅 모델은 사람의 선호에 맞도록 학습되며(RLHF), TypeSafe의 관찰에 따르면 이는 비위를 맞추는 행동과 확신 있게 들리는 오류를 장려합니다. RLHF의 공동 저자 중 한 명인 디오구 알메이다는 TypeSafe 공동 창업자입니다.\n\n이름은 대니얼 카너먼의 책 『느리게 생각하고… 빠르게 결정하기』에 나오는 시스템 1을 가리킵니다. 빠른 직관적 판단을 시스템 2의 느리고 신중한 사고와 대비한 개념입니다. Jev는 빠르고 좁은 판단을 위해 만들어졌습니다.\n\n### 세 가지 질문 유형\n\n질문은 상태에 대한 하나의 판단입니다. 응답은 코드가 임계값과 비교하거나, 정렬하거나, 다음 단계에 전달하는 값입니다.\n\n1. **Choice — 선택지 고르기.** 문의를 맡을 부서, 상품 카테고리, 코드 조각의 언어 등이 해당합니다. 선택지는 선택지 → 설명의 사전이며 최대 255개입니다. 응답에는 선택된 `choice`, 모든 선택지의 확률 `probabilities`(합계 1), 확신도 `confidence`가 있습니다. 목록이 모든 경우를 다루지 못할 수 있다면 기타 또는 해당 없음 항목을 추가하세요.\n2. **Score — 척도 평가.** 오류의 심각도, 고객의 짜증 정도, 숙련도처럼 직접 설명하는 순서 있는 척도의 위치입니다. 낮은 수준부터 높은 수준까지 2~10단계이며, 모델은 단계 번호와 이웃 단계를 보지 않고 각각을 따로 평가합니다. 응답에는 `score`(단계 번호에 각 확률을 곱한 값의 합이므로 단계 사이에 놓일 수 있음), 단계 설명의 `legend`, `probabilities`, `confidence`가 있습니다.\n3. **Noul — 예 또는 아니요.** 진술이 맞는지 판단합니다. 응답 `noul`은 0~1의 예 확률입니다. 1에 가까우면 확신하는 예, 0에 가까우면 확신하는 아니요, 약 0.5이면 모델이 망설입니다. 별도의 `confidence`는 없으며 숫자 하나로 응답을 모두 설명합니다. 선택 사항인 `criteria`는 무엇을 예와 아니요로 볼지 구체화합니다.\n\n선택 방법은 다음과 같습니다. 순서 없는 알려진 선택지는 choice, 스펙트럼의 단계는 score, 확률 자체가 중요한 순수한 예·아니요는 noul입니다. Noul 0.5는 예와 아니요의 확률이 같다는 뜻이며 중간 수준이 아닙니다. 정도는 score로 측정합니다. 두 유형이 모두 적절하다면 코드가 곧바로 행동할 수 있는 쪽을 고르세요. choice는 분기, score는 임계값, noul은 `if`입니다.\n\n하나의 요청에 유형을 섞을 수 있습니다. 응답은 항상 지정한 선택지로 제한되고 다른 질문에 의존하지 않습니다. 다른 응답을 바꾸지 않고 질문을 추가하거나 제거할 수 있습니다.\n\n### 상태\n\n상태는 고객 메시지, 문서 구간, 데이터베이스 기록, 애플리케이션 상태 등 모델이 평가하는 대상입니다.\n\n- **문자열** — 메시지, 기사, 발췌처럼 텍스트가 하나인 경우입니다.\n- **객체** — 이름이 있는 필드, 연결된 기록, 애플리케이션 상태입니다. TypeSafe는 각 부분의 이름이 명확하므로 대부분의 요청에 객체를 권장합니다.\n- **배열** — 메시지나 기록의 순서입니다.\n\n전문가에게 줄 자료처럼 준비하세요. 판단에 비교가 필요하면 대화, 주문, 반품 규칙을 함께 담으세요. 내용은 상태에, 판단은 질문에 넣으세요. 질문이 상태의 한 부분에 관한 것이라면 `ticket.messages[0].text`처럼 그 경로를 백틱으로 표시하세요.\n\n### 질문하는 방법\n\n- **질문 하나에 빠른 판단 하나를 담으세요.** 좋은 질문은 적절한 맥락을 아는 사람이 1초 만에 답할 수 있는 것입니다. 예를 들어 메시지가 긴급한가요?라는 질문입니다. 메시지를 분석하고 무엇을 할지 결정하라는 요청은 이미 느린 추론이므로 단순한 질문으로 나누어야 합니다.\n- **질문 전체는 `instructions`에 넣으세요.** `refund_requested` 같은 질문 키는 코드에만 필요하며 모델에 전달되지 않습니다.\n- **같은 상태의 모든 질문은 한 요청으로 보내세요.** 모델은 병렬로 평가합니다. TypeSafe에 따르면 추가 질문은 응답 시간을 거의 늘리지 않고 자체 토큰만큼만 비용이 듭니다. 혹시 필요할까 해서 넣는 질문은 비용이 거의 들지 않으며, 필요한 응답은 코드가 결정합니다.\n- **복잡한 판단은 나누세요.** 스타트업 지원서를 평가하라는 대신 시장 규모, 기술적 실현 가능성, 경쟁사와의 차이를 따로 질문하고 코드에서 가중치로 결과를 계산하세요. 우선순위가 바뀌면 질문을 다시 쓰는 대신 가중치를 바꾸세요.\n- **종속된 질문은 두 번째 요청으로 보내세요.** 한 요청의 응답은 서로의 맥락이 되지 않습니다. 첫 응답 없이 다음 요청을 구성할 수 없을 때에만 두 번째 요청이 필요합니다. 추가 데이터를 불러오거나 다음 질문의 선택지를 골라야 하는 경우입니다.\n- **긴 질문은 객체로 구성하세요.** `instructions`와 `criteria`는 일반적으로 문자열이지만 객체나 배열일 수도 있습니다. 한 필드에는 질문을, 다른 필드에는 데이터를 넣습니다. 이력서와 데이터베이스 기록을 한 질문에서 비교할 때 편리합니다.\n\n### 확신도\n\nchoice와 score의 `confidence`는 0~1로 확률이 한 응답에 얼마나 집중되는지 보여 줍니다. 1은 모든 확률이 한 선택지에 있고, 0은 모든 선택지에 균등하게 분포합니다. score에서는 이웃 단계가 먼 단계보다 확신도를 덜 낮춥니다. noul에서는 값 자체가 확신도입니다. 0.5에서 멀수록 응답이 더 확실합니다.\n\nTypeSafe는 세 범위를 권장합니다.\n\n1. **높은 확신도** — 자동으로 행동하세요.\n2. **중간** — 신중하게 행동하세요. 예를 들어 사용자에게 확인을 요청하세요.\n3. **낮은 확신도** — 사람에게 넘기거나, 요청을 구체화하거나, 더 강력한 추론 모델 같은 대체 경로를 연결하세요.\n\n오류 비용이 클수록 임계값을 엄격하게 정하세요. 되돌릴 수 없는 작업의 기준은 읽기보다 높아야 합니다. 응답은 무엇을 선택할지, 확신도는 행동할 만한지를 말합니다. 자체 데이터에서 확신도와 정확성을 비교하여 임계값을 정하세요.\n\n### Jev를 중심으로 시스템 만들기\n\nJev는 다음 단계를 스스로 선택하고 반복마다 길을 잃을 수 있는 에이전트보다는, 코드가 과정을 제어하고 모델이 좁은 의미적 질문에 답하는 프로그램을 위해 설계되었습니다. TypeSafe의 설계 단계는 여덟 가지입니다.\n\n1. 코드로 할 수 있는 것은 코드로 하세요. 신뢰할 수 있고 저렴합니다.\n2. 상태에는 현재 질문에 필요한 것만 넣으세요. 최신 사실은 모델 메모리 대신 자체 지식베이스에서 가져오세요.\n3. 상태를 구조화하세요. 중첩 JSON을 사용하고, 모호함을 줄일 수 있다면 질문에 필요한 필드 경로를 백틱으로 표시하세요.\n4. 질문은 최대한 좁고 구체적으로 하세요. TypeSafe에 따르면 가장 중요한 규칙일 수 있습니다. 넓은 질문은 한 응답 뒤에 여러 판단을 숨깁니다.\n5. 질문을 구조화하세요. 질문 자체는 짧게 두고, 설명, 예시, 자체 데이터베이스의 값은 하나의 긴 문자열 대신 `instructions` 또는 `criteria` 객체의 이웃 필드에 넣으세요.\n6. 같은 상태에 대한 다수의 독립적인 질문을 하나의 요청에 담으세요. 같은 비용으로 더 많은 가치를 얻습니다.\n7. 응답은 코드가 규칙, 가중 합계, 일반적인 머신러닝 모델의 특징값으로 결합합니다.\n8. 확신도에 따라 분기하세요. 불확실한 사례는 사람이나 추론 모델에 넘기세요.\n\nJev는 채팅이나 코드 자동 완성 모델이 아니며, 프로그래밍 에이전트에서 언어 모델 대신 넣을 수 없습니다. 다만 에이전트가 빠른 보정된 응답이 필요한 곳에서 Jev를 호출하는 코드를 작성할 수 있습니다.\n\n### 활용 분야\n\n- **백그라운드 자동화** — 사람이 곁에 없어도 백만 번 실행되는 결정.\n- **실시간** — TypeSafe에 따르면 대부분의 요청은 약 100ms에 수행되어 즉시 처리와 인터페이스에 충분합니다.\n- **대규모 데이터** — 거대한 코퍼스 검색, 에이전트 작업 로그 라벨링, 예측용 특징값.\n- **다른 모델 검증** — 요청, 추출, 추론, 도구 호출에서 제한 우회, 인용 오류, 허구를 확인합니다.\n- **검색과 순위화** — 질의·후보 쌍의 관련성, 재순위화, 컨텍스트 선택.\n- **의도별 분기** — 사용자의 목적과 필요한 처리기를 판단합니다. 단순 로직, 전문 모델, 사람 중에서 선택하며 주제, 복잡도, 위험에 따라 어떤 언어 모델에 요청을 줄지 정합니다.\n- **보호 검사** — 언어 모델의 입력, 출력, 도구 호출에서 삽입된 지시, 규칙 위반, 개인정보 유출을 검사합니다.\n- **고객 지원** — 문의 주제와 의도, 긴급성, 짜증, 이탈 위험, 환불 요청, 대기열.\n- **콘텐츠 검토** — 플랫폼 규칙에 따른 유해성, 괴롭힘, 스팸, 사기, 위험한 조언, 개인정보를 다룹니다. 심각도와 확신도에 따라 통과, 경고, 확인, 차단을 선택합니다.\n- **산업별 활용** — 보험 사고, 금융 조사와 KYC, 계약과 광고, 상품 카드, 채용, 잠재 고객, 게임, 위험, 수요 예측, 지식 그래프, 과학 리뷰, CI의 의미적 코드 검증.\n\n### 특성\n\n- **`jev-latest`** — 최신 안정 버전의 별칭으로, 현재는 Jev 1.13입니다. 응답한 버전은 `model` 필드에 있으며 예시는 `jev-1.13.0`입니다. 새 버전이 나오면 별칭이 그 버전으로 옮겨가며, 사용자가 수정하지 않아도 응답이 바뀔 수 있습니다. 특정 버전에 맞춰 임계값을 정했다면 이 필드를 확인하세요.\n- **컨텍스트** — 상태와 모든 질문을 합쳐 요청당 64K토큰입니다. 상태와 가장 긴 질문의 합계는 최대 32K입니다. 모델은 상태를 한 번 읽고 모든 질문을 이에 대해 병렬로 검사합니다.\n- **입력** — 문자열, JSON 객체, 텍스트 배열 형태의 텍스트만 받습니다. 이미지, 오디오, 동영상은 아직 지원하지 않으므로 미리 텍스트로 바꾸세요.\n- **언어** — 주 학습 언어는 영어이며 현재 영어의 정확도가 가장 높습니다. 중국어, 일본어, 한국어 등 다른 언어도 입력받지만 정확도가 낮으므로 자체 데이터로 확인하세요.\n- **Ailoot API 가격 및 과금** — 조건은 선택한 메서드에 따라 달라지며 해당 메서드 카드에 명시되어 있습니다.\n- **설정** — Jev는 고객 데이터로 파인튜닝하지 않습니다. 자체 자료는 `state`에, 분야 규칙은 `instructions`와 `criteria`에 넣으세요.\n- **데이터** — TypeSafe는 고객의 요청과 응답으로 Jev를 학습하지 않는다고 밝힙니다.\n\n### Jev 1.13의 알려진 약점\n\nTypeSafe는 현재 버전의 약점을 공개적으로 나열하며 이후 버전에서 많은 부분을 고치겠다고 약속합니다. 모델은 빠르고 보정되어 있으며 상식적인 판단을 잘하지만 다음 한계가 있습니다.\n\n1. **문자 그대로 읽습니다.** 암시된 질문이 아니라 적힌 질문에 답하며 단서, 부정, 암묵적 조건을 문자 그대로 이해합니다. 정확한 조건과 경계 사례를 `criteria`에 적고, 피할 수 없는 해석은 문자 그대로의 두 질문으로 나누세요.\n2. **계산기가 아닙니다.** 문자, 반복, 목록 요소의 개수 세기는 신뢰하기 어렵고 크기가 커질수록 오류가 증가합니다. 후보별 질문 하나를 사용하고 계산은 코드로 하세요. 모델은 색상 이름보다 hex나 RGB 색상을 덜 잘 이해합니다. `score`는 임계값에 적합하지만 단계 사이의 정확한 수치에는 적합하지 않습니다.\n3. **날짜와 시간.** 어느 날짜가 먼저인지, 간격이 얼마인지, 날짜가 기간에 속하는지에 대한 판단은 신뢰하기 어렵습니다. 특히 형식이 섞이거나 상대적 날짜를 사용하면 그렇습니다. 날짜 부분은 choice로 추출하고 미기재 선택지를 추가한 뒤 코드로 비교하세요.\n4. **간접 표현.** 이중 부정과 속성의 속성에 대한 질문은 정확도를 낮춥니다. 직접 쓰고 상태의 부분을 이름으로 지정하세요.\n5. **불필요한 상태 내용.** 관련 없는 텍스트는 정확도를 낮춥니다. 코드로 필터링하고, 불가능하면 noul 질문으로 관련 없는 내용을 제외하세요.\n6. **적대적인 텍스트.** 모델은 기본적으로 상태 안의 함정을 예상하지 않습니다. 삽입된 지시나 자신의 분류에 이의를 제기하는 텍스트가 응답을 바꿀 수 있습니다. 정확한 기준을 쓰고 실행 전에 경계 사례를 확인하세요.\n7. **모순.** `instructions`와 `criteria`가 서로 다른 것을 요구하면 정확도가 떨어집니다. 예를 들어 noul의 예를 아니요로 설명하는 경우입니다. 기준은 질문의 연장입니다.\n8. **선택지 순서.** 모델이 때때로 choice의 첫 선택지를 선호합니다. 순서를 바꾼 뒤 응답이 변하지 않는지 확인하세요.\n9. **생성.** Jev는 텍스트 쓰기를 학습하지 않았습니다. 데이터 추출에는 정규식이나 생성 모델로 후보를 찾고 Jev가 choice로 올바른 것을 선택하게 하세요.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "f7d81773fa0ae08625e352fb5b5731a54997e6e9f6485097090e5e25ee6cad50",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ko",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">TS</span><h2 id=\"sheet-title\">jev-latest</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"닫기\">×</button></div><div class=\"idline\"><span>TypeSafe /</span><code>jev-latest</code><button type=\"button\" id=\"copy-id\">ID 복사</button></div><nav class=\"card-jump-nav\" aria-label=\"모델 카드 섹션\"><button type=\"button\" data-card-jump=\"overview\">시작하기</button><button type=\"button\" data-card-jump=\"methods\">입력 및 메서드</button><button type=\"button\" data-card-jump=\"pricing\">요금</button><button type=\"button\" data-card-jump=\"examples\">예제</button><button type=\"button\" data-card-jump=\"results\">결과</button><button type=\"button\" data-card-jump=\"aliases\">별칭</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API 메서드\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|systemone|/v1/systemone|jev-latest\">System One</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">시작하기</h3><p class=\"mdesc-full\">TypeSafe의 판단 모델입니다. 텍스트를 쓰는 대신 텍스트나 JSON에 대한 자료형이 정해진 질문에 답하며, 선택지 고르기, 척도 평가, 확률이 포함된 예·아니요를 제공합니다. 라우팅, 문의 분류, 콘텐츠 검토, 점수화에 적합하며 한 요청의 모든 질문을 병렬로 평가합니다.</p><dl class=\"card-io\" data-card-io><div><dt>허용 입력</dt><dd>텍스트</dd></div><div><dt>결과</dt><dd>structured</dd></div></dl><details class=\"card-about\"><summary>모델 소개</summary><p class=\"note-s\" data-model-method-boundary>이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.</p><div class=\"mabout\" id=\"m-about\"><p>Jev는 TypeSafe의 플래그십 모델이자 새로운 <strong>System One</strong> 클래스의 첫 모델입니다. 텍스트를 쓰는 대신 프로그램이 바로 사용할 수 있는 결정을 빠르게 내립니다. 텍스트나 JSON 형태의 <strong>상태</strong>(<code>state</code>)와 <strong>질문</strong> 집합을 전달하면, 보정된 확률이 포함된 자료형이 정해진 값을 받습니다.</p><p>언어 모델이 사람을 위한 말을 쓴다면 Jev는 TypeSafe의 설명대로 코드에 더 가깝습니다. 응답이 즉시 코드에 필요한 형식으로 나오고, 빠르며, 지정한 선택지 밖의 값이 없습니다. 반복 요청에서도 안정적인 응답을 하도록 설계되었습니다.</p><h4>System One과 언어 모델의 차이</h4><ul><li><strong>생성하지 않습니다.</strong> Jev는 사용자에게 답변을 쓰거나 코드를 작성하거나 추론 과정을 설명하지 않습니다. 세 가지 질문 유형 중 하나로 가능한 응답을 직접 지정합니다.</li><li><strong>보정된 결정을 학습합니다.</strong> TypeSafe는 RLCD(Reinforcement Learning for Calibrated Decisions)로 모델을 학습합니다. 확률을 실제 결과에 맞추며 불확실성을 반영합니다. 확률 0.8인 다수의 응답 중 약 80%가 맞아야 합니다. 보정은 큰 표본의 특성이며 개별 응답의 정확성을 보장하지 않습니다.</li><li><strong>학습 목표가 다릅니다.</strong> 채팅 모델은 사람의 선호에 맞도록 학습되며(RLHF), TypeSafe의 관찰에 따르면 이는 비위를 맞추는 행동과 확신 있게 들리는 오류를 장려합니다. RLHF의 공동 저자 중 한 명인 디오구 알메이다는 TypeSafe 공동 창업자입니다.</li></ul><p>이름은 대니얼 카너먼의 책 『느리게 생각하고… 빠르게 결정하기』에 나오는 시스템 1을 가리킵니다. 빠른 직관적 판단을 시스템 2의 느리고 신중한 사고와 대비한 개념입니다. Jev는 빠르고 좁은 판단을 위해 만들어졌습니다.</p><h4>세 가지 질문 유형</h4><p>질문은 상태에 대한 하나의 판단입니다. 응답은 코드가 임계값과 비교하거나, 정렬하거나, 다음 단계에 전달하는 값입니다.</p><ol><li><strong>Choice — 선택지 고르기.</strong> 문의를 맡을 부서, 상품 카테고리, 코드 조각의 언어 등이 해당합니다. 선택지는 선택지 → 설명의 사전이며 최대 255개입니다. 응답에는 선택된 <code>choice</code>, 모든 선택지의 확률 <code>probabilities</code>(합계 1), 확신도 <code>confidence</code>가 있습니다. 목록이 모든 경우를 다루지 못할 수 있다면 기타 또는 해당 없음 항목을 추가하세요.</li><li><strong>Score — 척도 평가.</strong> 오류의 심각도, 고객의 짜증 정도, 숙련도처럼 직접 설명하는 순서 있는 척도의 위치입니다. 낮은 수준부터 높은 수준까지 2~10단계이며, 모델은 단계 번호와 이웃 단계를 보지 않고 각각을 따로 평가합니다. 응답에는 <code>score</code>(단계 번호에 각 확률을 곱한 값의 합이므로 단계 사이에 놓일 수 있음), 단계 설명의 <code>legend</code>, <code>probabilities</code>, <code>confidence</code>가 있습니다.</li><li><strong>Noul — 예 또는 아니요.</strong> 진술이 맞는지 판단합니다. 응답 <code>noul</code>은 0~1의 예 확률입니다. 1에 가까우면 확신하는 예, 0에 가까우면 확신하는 아니요, 약 0.5이면 모델이 망설입니다. 별도의 <code>confidence</code>는 없으며 숫자 하나로 응답을 모두 설명합니다. 선택 사항인 <code>criteria</code>는 무엇을 예와 아니요로 볼지 구체화합니다.</li></ol><p>선택 방법은 다음과 같습니다. 순서 없는 알려진 선택지는 choice, 스펙트럼의 단계는 score, 확률 자체가 중요한 순수한 예·아니요는 noul입니다. Noul 0.5는 예와 아니요의 확률이 같다는 뜻이며 중간 수준이 아닙니다. 정도는 score로 측정합니다. 두 유형이 모두 적절하다면 코드가 곧바로 행동할 수 있는 쪽을 고르세요. choice는 분기, score는 임계값, noul은 <code>if</code>입니다.</p><p>하나의 요청에 유형을 섞을 수 있습니다. 응답은 항상 지정한 선택지로 제한되고 다른 질문에 의존하지 않습니다. 다른 응답을 바꾸지 않고 질문을 추가하거나 제거할 수 있습니다.</p><h4>상태</h4><p>상태는 고객 메시지, 문서 구간, 데이터베이스 기록, 애플리케이션 상태 등 모델이 평가하는 대상입니다.</p><ul><li><strong>문자열</strong> — 메시지, 기사, 발췌처럼 텍스트가 하나인 경우입니다.</li><li><strong>객체</strong> — 이름이 있는 필드, 연결된 기록, 애플리케이션 상태입니다. TypeSafe는 각 부분의 이름이 명확하므로 대부분의 요청에 객체를 권장합니다.</li><li><strong>배열</strong> — 메시지나 기록의 순서입니다.</li></ul><p>전문가에게 줄 자료처럼 준비하세요. 판단에 비교가 필요하면 대화, 주문, 반품 규칙을 함께 담으세요. 내용은 상태에, 판단은 질문에 넣으세요. 질문이 상태의 한 부분에 관한 것이라면 <code>ticket.messages[0].text</code>처럼 그 경로를 백틱으로 표시하세요.</p><h4>질문하는 방법</h4><ul><li><strong>질문 하나에 빠른 판단 하나를 담으세요.</strong> 좋은 질문은 적절한 맥락을 아는 사람이 1초 만에 답할 수 있는 것입니다. 예를 들어 메시지가 긴급한가요?라는 질문입니다. 메시지를 분석하고 무엇을 할지 결정하라는 요청은 이미 느린 추론이므로 단순한 질문으로 나누어야 합니다.</li><li><strong>질문 전체는 <code>instructions</code>에 넣으세요.</strong> <code>refund_requested</code> 같은 질문 키는 코드에만 필요하며 모델에 전달되지 않습니다.</li><li><strong>같은 상태의 모든 질문은 한 요청으로 보내세요.</strong> 모델은 병렬로 평가합니다. TypeSafe에 따르면 추가 질문은 응답 시간을 거의 늘리지 않고 자체 토큰만큼만 비용이 듭니다. 혹시 필요할까 해서 넣는 질문은 비용이 거의 들지 않으며, 필요한 응답은 코드가 결정합니다.</li><li><strong>복잡한 판단은 나누세요.</strong> 스타트업 지원서를 평가하라는 대신 시장 규모, 기술적 실현 가능성, 경쟁사와의 차이를 따로 질문하고 코드에서 가중치로 결과를 계산하세요. 우선순위가 바뀌면 질문을 다시 쓰는 대신 가중치를 바꾸세요.</li><li><strong>종속된 질문은 두 번째 요청으로 보내세요.</strong> 한 요청의 응답은 서로의 맥락이 되지 않습니다. 첫 응답 없이 다음 요청을 구성할 수 없을 때에만 두 번째 요청이 필요합니다. 추가 데이터를 불러오거나 다음 질문의 선택지를 골라야 하는 경우입니다.</li><li><strong>긴 질문은 객체로 구성하세요.</strong> <code>instructions</code>와 <code>criteria</code>는 일반적으로 문자열이지만 객체나 배열일 수도 있습니다. 한 필드에는 질문을, 다른 필드에는 데이터를 넣습니다. 이력서와 데이터베이스 기록을 한 질문에서 비교할 때 편리합니다.</li></ul><h4>확신도</h4><p>choice와 score의 <code>confidence</code>는 0~1로 확률이 한 응답에 얼마나 집중되는지 보여 줍니다. 1은 모든 확률이 한 선택지에 있고, 0은 모든 선택지에 균등하게 분포합니다. score에서는 이웃 단계가 먼 단계보다 확신도를 덜 낮춥니다. noul에서는 값 자체가 확신도입니다. 0.5에서 멀수록 응답이 더 확실합니다.</p><p>TypeSafe는 세 범위를 권장합니다.</p><ol><li><strong>높은 확신도</strong> — 자동으로 행동하세요.</li><li><strong>중간</strong> — 신중하게 행동하세요. 예를 들어 사용자에게 확인을 요청하세요.</li><li><strong>낮은 확신도</strong> — 사람에게 넘기거나, 요청을 구체화하거나, 더 강력한 추론 모델 같은 대체 경로를 연결하세요.</li></ol><p>오류 비용이 클수록 임계값을 엄격하게 정하세요. 되돌릴 수 없는 작업의 기준은 읽기보다 높아야 합니다. 응답은 무엇을 선택할지, 확신도는 행동할 만한지를 말합니다. 자체 데이터에서 확신도와 정확성을 비교하여 임계값을 정하세요.</p><h4>Jev를 중심으로 시스템 만들기</h4><p>Jev는 다음 단계를 스스로 선택하고 반복마다 길을 잃을 수 있는 에이전트보다는, 코드가 과정을 제어하고 모델이 좁은 의미적 질문에 답하는 프로그램을 위해 설계되었습니다. TypeSafe의 설계 단계는 여덟 가지입니다.</p><ol><li>코드로 할 수 있는 것은 코드로 하세요. 신뢰할 수 있고 저렴합니다.</li><li>상태에는 현재 질문에 필요한 것만 넣으세요. 최신 사실은 모델 메모리 대신 자체 지식베이스에서 가져오세요.</li><li>상태를 구조화하세요. 중첩 JSON을 사용하고, 모호함을 줄일 수 있다면 질문에 필요한 필드 경로를 백틱으로 표시하세요.</li><li>질문은 최대한 좁고 구체적으로 하세요. TypeSafe에 따르면 가장 중요한 규칙일 수 있습니다. 넓은 질문은 한 응답 뒤에 여러 판단을 숨깁니다.</li><li>질문을 구조화하세요. 질문 자체는 짧게 두고, 설명, 예시, 자체 데이터베이스의 값은 하나의 긴 문자열 대신 <code>instructions</code> 또는 <code>criteria</code> 객체의 이웃 필드에 넣으세요.</li><li>같은 상태에 대한 다수의 독립적인 질문을 하나의 요청에 담으세요. 같은 비용으로 더 많은 가치를 얻습니다.</li><li>응답은 코드가 규칙, 가중 합계, 일반적인 머신러닝 모델의 특징값으로 결합합니다.</li><li>확신도에 따라 분기하세요. 불확실한 사례는 사람이나 추론 모델에 넘기세요.</li></ol><p>Jev는 채팅이나 코드 자동 완성 모델이 아니며, 프로그래밍 에이전트에서 언어 모델 대신 넣을 수 없습니다. 다만 에이전트가 빠른 보정된 응답이 필요한 곳에서 Jev를 호출하는 코드를 작성할 수 있습니다.</p><h4>활용 분야</h4><ul><li><strong>백그라운드 자동화</strong> — 사람이 곁에 없어도 백만 번 실행되는 결정.</li><li><strong>실시간</strong> — TypeSafe에 따르면 대부분의 요청은 약 100ms에 수행되어 즉시 처리와 인터페이스에 충분합니다.</li><li><strong>대규모 데이터</strong> — 거대한 코퍼스 검색, 에이전트 작업 로그 라벨링, 예측용 특징값.</li><li><strong>다른 모델 검증</strong> — 요청, 추출, 추론, 도구 호출에서 제한 우회, 인용 오류, 허구를 확인합니다.</li><li><strong>검색과 순위화</strong> — 질의·후보 쌍의 관련성, 재순위화, 컨텍스트 선택.</li><li><strong>의도별 분기</strong> — 사용자의 목적과 필요한 처리기를 판단합니다. 단순 로직, 전문 모델, 사람 중에서 선택하며 주제, 복잡도, 위험에 따라 어떤 언어 모델에 요청을 줄지 정합니다.</li><li><strong>보호 검사</strong> — 언어 모델의 입력, 출력, 도구 호출에서 삽입된 지시, 규칙 위반, 개인정보 유출을 검사합니다.</li><li><strong>고객 지원</strong> — 문의 주제와 의도, 긴급성, 짜증, 이탈 위험, 환불 요청, 대기열.</li><li><strong>콘텐츠 검토</strong> — 플랫폼 규칙에 따른 유해성, 괴롭힘, 스팸, 사기, 위험한 조언, 개인정보를 다룹니다. 심각도와 확신도에 따라 통과, 경고, 확인, 차단을 선택합니다.</li><li><strong>산업별 활용</strong> — 보험 사고, 금융 조사와 KYC, 계약과 광고, 상품 카드, 채용, 잠재 고객, 게임, 위험, 수요 예측, 지식 그래프, 과학 리뷰, CI의 의미적 코드 검증.</li></ul><h4>특성</h4><ul><li><strong><code>jev-latest</code></strong> — 최신 안정 버전의 별칭으로, 현재는 Jev 1.13입니다. 응답한 버전은 <code>model</code> 필드에 있으며 예시는 <code>jev-1.13.0</code>입니다. 새 버전이 나오면 별칭이 그 버전으로 옮겨가며, 사용자가 수정하지 않아도 응답이 바뀔 수 있습니다. 특정 버전에 맞춰 임계값을 정했다면 이 필드를 확인하세요.</li><li><strong>컨텍스트</strong> — 상태와 모든 질문을 합쳐 요청당 64K토큰입니다. 상태와 가장 긴 질문의 합계는 최대 32K입니다. 모델은 상태를 한 번 읽고 모든 질문을 이에 대해 병렬로 검사합니다.</li><li><strong>입력</strong> — 문자열, JSON 객체, 텍스트 배열 형태의 텍스트만 받습니다. 이미지, 오디오, 동영상은 아직 지원하지 않으므로 미리 텍스트로 바꾸세요.</li><li><strong>언어</strong> — 주 학습 언어는 영어이며 현재 영어의 정확도가 가장 높습니다. 중국어, 일본어, 한국어 등 다른 언어도 입력받지만 정확도가 낮으므로 자체 데이터로 확인하세요.</li><li><strong>Ailoot API 가격 및 과금</strong> — 조건은 선택한 메서드에 따라 달라지며 해당 메서드 카드에 명시되어 있습니다.</li><li><strong>설정</strong> — Jev는 고객 데이터로 파인튜닝하지 않습니다. 자체 자료는 <code>state</code>에, 분야 규칙은 <code>instructions</code>와 <code>criteria</code>에 넣으세요.</li><li><strong>데이터</strong> — TypeSafe는 고객의 요청과 응답으로 Jev를 학습하지 않는다고 밝힙니다.</li></ul><h4>Jev 1.13의 알려진 약점</h4><p>TypeSafe는 현재 버전의 약점을 공개적으로 나열하며 이후 버전에서 많은 부분을 고치겠다고 약속합니다. 모델은 빠르고 보정되어 있으며 상식적인 판단을 잘하지만 다음 한계가 있습니다.</p><ol><li><strong>문자 그대로 읽습니다.</strong> 암시된 질문이 아니라 적힌 질문에 답하며 단서, 부정, 암묵적 조건을 문자 그대로 이해합니다. 정확한 조건과 경계 사례를 <code>criteria</code>에 적고, 피할 수 없는 해석은 문자 그대로의 두 질문으로 나누세요.</li><li><strong>계산기가 아닙니다.</strong> 문자, 반복, 목록 요소의 개수 세기는 신뢰하기 어렵고 크기가 커질수록 오류가 증가합니다. 후보별 질문 하나를 사용하고 계산은 코드로 하세요. 모델은 색상 이름보다 hex나 RGB 색상을 덜 잘 이해합니다. <code>score</code>는 임계값에 적합하지만 단계 사이의 정확한 수치에는 적합하지 않습니다.</li><li><strong>날짜와 시간.</strong> 어느 날짜가 먼저인지, 간격이 얼마인지, 날짜가 기간에 속하는지에 대한 판단은 신뢰하기 어렵습니다. 특히 형식이 섞이거나 상대적 날짜를 사용하면 그렇습니다. 날짜 부분은 choice로 추출하고 미기재 선택지를 추가한 뒤 코드로 비교하세요.</li><li><strong>간접 표현.</strong> 이중 부정과 속성의 속성에 대한 질문은 정확도를 낮춥니다. 직접 쓰고 상태의 부분을 이름으로 지정하세요.</li><li><strong>불필요한 상태 내용.</strong> 관련 없는 텍스트는 정확도를 낮춥니다. 코드로 필터링하고, 불가능하면 noul 질문으로 관련 없는 내용을 제외하세요.</li><li><strong>적대적인 텍스트.</strong> 모델은 기본적으로 상태 안의 함정을 예상하지 않습니다. 삽입된 지시나 자신의 분류에 이의를 제기하는 텍스트가 응답을 바꿀 수 있습니다. 정확한 기준을 쓰고 실행 전에 경계 사례를 확인하세요.</li><li><strong>모순.</strong> <code>instructions</code>와 <code>criteria</code>가 서로 다른 것을 요구하면 정확도가 떨어집니다. 예를 들어 noul의 예를 아니요로 설명하는 경우입니다. 기준은 질문의 연장입니다.</li><li><strong>선택지 순서.</strong> 모델이 때때로 choice의 첫 선택지를 선호합니다. 순서를 바꾼 뒤 응답이 변하지 않는지 확인하세요.</li><li><strong>생성.</strong> Jev는 텍스트 쓰기를 학습하지 않았습니다. 데이터 추출에는 정규식이나 생성 모델로 후보를 찾고 Jev가 choice로 올바른 것을 선택하게 하세요.</li></ol></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot에서 사용 가능 · 입력 및 메서드</h3><details class=\"card-method\" open><summary><b>Ailoot · System One</b> <code>POST /v1/systemone</code></summary><dl class=\"method-capabilities\"><div><dt>입력</dt><dd><code>text</code></dd></div><div><dt>출력</dt><dd><code>structured</code></dd></div><div><dt>컨텍스트</dt><dd>64,000 tokens</dd></div><div><dt>출력 형식</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>필드</th><th>유형</th><th>요건</th><th>값과 한도</th><th>기본값</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>jev-latest</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string|object|array</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">questions</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>object</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>최소 객체 필드 수: 1</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">questions.&lt;id&gt;.type</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>noul, choice, score</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">questions.&lt;id&gt;.instructions</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string|object|array|null</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">questions.&lt;id&gt;.criteria</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>object|array|null</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>조건: noul: 선택 사항인 null 허용 true/false 설명; choice: 기준 객체; score: 비어 있지 않은 기준 배열</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>boolean|null</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>false, null</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>입력 자료 조합</summary><p class=\"note-s\"><b>noul</b> · 필수: state, questions.&lt;id&gt;.type=noul</p><p class=\"note-s\"><b>choice</b> · 필수: state, questions.&lt;id&gt;.type=choice, criteria object</p><p class=\"note-s\"><b>score</b> · 필수: state, questions.&lt;id&gt;.type=score, nonemptycriteriaarray</p></details><details class=\"note-s\" data-method-contract><summary>메서드 매개변수와 수명 주기</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>매개변수</th><th>명세</th></tr></thead><tbody><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>material_types</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>text</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>required</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>model, state, questions</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>optional_controls</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>null</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>content_type</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>application/json</td></tr></tbody></table></div><p>수명 주기: <code>exact retained published method</code></p><p class=\"note-s\">메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">요금</h3><h4>Ailoot 메서드 요금</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> System One</b><code>POST /v1/systemone</code></header><dl><div><dt>입력</dt><dd>≈US$0.000084 <em>/ 1K</em></dd></div><div><dt>출력</dt><dd>US$0.00 <em>/ 1K</em></dd></div></dl></section><p class=\"note-s\">Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. <a href=\"/docs/ko/billing/reserve/\">금액 확보와 정산 방식 →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">요청 예제</h3><h4>Ailoot · System One</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-665-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-665-panel-0\" aria-selected=\"true\" tabindex=\"0\">분류 예제</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-665-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-665-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;jev-latest&quot;, &quot;state&quot;: &quot;&quot;, &quot;questions&quot;: {&quot;is_urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;instructions&quot;: &quot;Does the supplied customer message express urgency?&quot;}}}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;state&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">결과 수신 및 저장</h3><h4>Ailoot · System One</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>완료된 결과 모두 보관</h5><p class=\"note-s\">반환된 완전한 응답, 파일, 콘텐츠 부분을 모두 보관하세요.</p><p class=\"note-s\">제공된 질문 ID, 확률 및 범례와 함께 모든 답변을 보존하세요. n을 사용하는 신뢰도 공식은 n&gt;1을 요구하지만, 이를 API의 최소 선택지 규칙으로 단정하지 않습니다.</p></div><details class=\"card-about\" data-output-fields><summary>응답 필드</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>필드</th><th>유형</th></tr></thead><tbody><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.type</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.noul</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>number</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.choice</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.score</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>number</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.confidence</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>number</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.probabilities</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>object</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">answers.&lt;id&gt;.legend</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>object</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>오류와 다음 단계</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>응답</th><th>조건</th><th>다음 단계</th></tr></thead><tbody><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>새 생성 요청 전에 표시된 필드를 수정하세요.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">별칭</h3><h4>모델 별칭</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></span></p><h4>메서드 경로 별칭</h4><p class=\"note-s\">위에 표시된 메서드 경로를 사용하세요.</p><h4>관련 호출용 ID</h4><p class=\"note-s\"><a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "jev-latest",
        "fmt": "systemone",
        "http": "POST",
        "path": "/v1/systemone",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      },
      "method_key": "Core|systemone|/v1/systemone|jev-latest",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음",
                "http_status": 400,
                "recovery": "새 생성 요청 전에 표시된 필드를 수정하세요.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "제공된 질문 ID, 확률 및 범례와 함께 모든 답변을 보존하세요. n을 사용하는 신뢰도 공식은 n>1을 요구하지만, 이를 API의 최소 선택지 규칙으로 단정하지 않습니다.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: 선택 사항인 null 허용 true/false 설명; choice: 기준 객체; score: 비어 있지 않은 기준 배열",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    }
  ],
  "model_id": "jev-latest",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "e3a0efa66e046839850d80d5b823a7f579bd2ab8f4fc6e591760501c5f917a41",
    "input_html_sha256": "ad51dad8ebf2a19f56a400648e6c11af18a1754689c478b271e48e3f8ee96b86",
    "private_audit_sha256": "67ba719bb9c73ceee41ec7b3b7c01b5e99fd821ca8b84a8ce37ddb825f0ec366",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ko/jev-latest/",
    "description": "TypeSafe의 판단 모델입니다. 텍스트를 쓰는 대신 텍스트나 JSON에 대한 자료형이 정해진 질문에 답하며, 선택지 고르기, 척도 평가, 확률이 포함된 예·아니요를 제공합니다. 라우팅, 문의 분류, 콘텐츠 검토, 점수화에 적합하며 한 요청의 모든 질문을 병렬로 평가합니다.",
    "locale": "ko",
    "md_url": "https://ailoot.ai/models/ko/jev-latest/index.md",
    "title": "jev-latest — Ailoot",
    "url": "https://ailoot.ai/models/ko/jev-latest/"
  },
  "rawModel": {
    "about": "Jev는 TypeSafe의 플래그십 모델이자 새로운 **System One** 클래스의 첫 모델입니다. 텍스트를 쓰는 대신 프로그램이 바로 사용할 수 있는 결정을 빠르게 내립니다. 텍스트나 JSON 형태의 **상태**(`state`)와 **질문** 집합을 전달하면, 보정된 확률이 포함된 자료형이 정해진 값을 받습니다.\n\n언어 모델이 사람을 위한 말을 쓴다면 Jev는 TypeSafe의 설명대로 코드에 더 가깝습니다. 응답이 즉시 코드에 필요한 형식으로 나오고, 빠르며, 지정한 선택지 밖의 값이 없습니다. 반복 요청에서도 안정적인 응답을 하도록 설계되었습니다.\n\n### System One과 언어 모델의 차이\n\n- **생성하지 않습니다.** Jev는 사용자에게 답변을 쓰거나 코드를 작성하거나 추론 과정을 설명하지 않습니다. 세 가지 질문 유형 중 하나로 가능한 응답을 직접 지정합니다.\n- **보정된 결정을 학습합니다.** TypeSafe는 RLCD(Reinforcement Learning for Calibrated Decisions)로 모델을 학습합니다. 확률을 실제 결과에 맞추며 불확실성을 반영합니다. 확률 0.8인 다수의 응답 중 약 80%가 맞아야 합니다. 보정은 큰 표본의 특성이며 개별 응답의 정확성을 보장하지 않습니다.\n- **학습 목표가 다릅니다.** 채팅 모델은 사람의 선호에 맞도록 학습되며(RLHF), TypeSafe의 관찰에 따르면 이는 비위를 맞추는 행동과 확신 있게 들리는 오류를 장려합니다. RLHF의 공동 저자 중 한 명인 디오구 알메이다는 TypeSafe 공동 창업자입니다.\n\n이름은 대니얼 카너먼의 책 『느리게 생각하고… 빠르게 결정하기』에 나오는 시스템 1을 가리킵니다. 빠른 직관적 판단을 시스템 2의 느리고 신중한 사고와 대비한 개념입니다. Jev는 빠르고 좁은 판단을 위해 만들어졌습니다.\n\n### 세 가지 질문 유형\n\n질문은 상태에 대한 하나의 판단입니다. 응답은 코드가 임계값과 비교하거나, 정렬하거나, 다음 단계에 전달하는 값입니다.\n\n1. **Choice — 선택지 고르기.** 문의를 맡을 부서, 상품 카테고리, 코드 조각의 언어 등이 해당합니다. 선택지는 선택지 → 설명의 사전이며 최대 255개입니다. 응답에는 선택된 `choice`, 모든 선택지의 확률 `probabilities`(합계 1), 확신도 `confidence`가 있습니다. 목록이 모든 경우를 다루지 못할 수 있다면 기타 또는 해당 없음 항목을 추가하세요.\n2. **Score — 척도 평가.** 오류의 심각도, 고객의 짜증 정도, 숙련도처럼 직접 설명하는 순서 있는 척도의 위치입니다. 낮은 수준부터 높은 수준까지 2~10단계이며, 모델은 단계 번호와 이웃 단계를 보지 않고 각각을 따로 평가합니다. 응답에는 `score`(단계 번호에 각 확률을 곱한 값의 합이므로 단계 사이에 놓일 수 있음), 단계 설명의 `legend`, `probabilities`, `confidence`가 있습니다.\n3. **Noul — 예 또는 아니요.** 진술이 맞는지 판단합니다. 응답 `noul`은 0~1의 예 확률입니다. 1에 가까우면 확신하는 예, 0에 가까우면 확신하는 아니요, 약 0.5이면 모델이 망설입니다. 별도의 `confidence`는 없으며 숫자 하나로 응답을 모두 설명합니다. 선택 사항인 `criteria`는 무엇을 예와 아니요로 볼지 구체화합니다.\n\n선택 방법은 다음과 같습니다. 순서 없는 알려진 선택지는 choice, 스펙트럼의 단계는 score, 확률 자체가 중요한 순수한 예·아니요는 noul입니다. Noul 0.5는 예와 아니요의 확률이 같다는 뜻이며 중간 수준이 아닙니다. 정도는 score로 측정합니다. 두 유형이 모두 적절하다면 코드가 곧바로 행동할 수 있는 쪽을 고르세요. choice는 분기, score는 임계값, noul은 `if`입니다.\n\n하나의 요청에 유형을 섞을 수 있습니다. 응답은 항상 지정한 선택지로 제한되고 다른 질문에 의존하지 않습니다. 다른 응답을 바꾸지 않고 질문을 추가하거나 제거할 수 있습니다.\n\n### 상태\n\n상태는 고객 메시지, 문서 구간, 데이터베이스 기록, 애플리케이션 상태 등 모델이 평가하는 대상입니다.\n\n- **문자열** — 메시지, 기사, 발췌처럼 텍스트가 하나인 경우입니다.\n- **객체** — 이름이 있는 필드, 연결된 기록, 애플리케이션 상태입니다. TypeSafe는 각 부분의 이름이 명확하므로 대부분의 요청에 객체를 권장합니다.\n- **배열** — 메시지나 기록의 순서입니다.\n\n전문가에게 줄 자료처럼 준비하세요. 판단에 비교가 필요하면 대화, 주문, 반품 규칙을 함께 담으세요. 내용은 상태에, 판단은 질문에 넣으세요. 질문이 상태의 한 부분에 관한 것이라면 `ticket.messages[0].text`처럼 그 경로를 백틱으로 표시하세요.\n\n### 질문하는 방법\n\n- **질문 하나에 빠른 판단 하나를 담으세요.** 좋은 질문은 적절한 맥락을 아는 사람이 1초 만에 답할 수 있는 것입니다. 예를 들어 메시지가 긴급한가요?라는 질문입니다. 메시지를 분석하고 무엇을 할지 결정하라는 요청은 이미 느린 추론이므로 단순한 질문으로 나누어야 합니다.\n- **질문 전체는 `instructions`에 넣으세요.** `refund_requested` 같은 질문 키는 코드에만 필요하며 모델에 전달되지 않습니다.\n- **같은 상태의 모든 질문은 한 요청으로 보내세요.** 모델은 병렬로 평가합니다. TypeSafe에 따르면 추가 질문은 응답 시간을 거의 늘리지 않고 자체 토큰만큼만 비용이 듭니다. 혹시 필요할까 해서 넣는 질문은 비용이 거의 들지 않으며, 필요한 응답은 코드가 결정합니다.\n- **복잡한 판단은 나누세요.** 스타트업 지원서를 평가하라는 대신 시장 규모, 기술적 실현 가능성, 경쟁사와의 차이를 따로 질문하고 코드에서 가중치로 결과를 계산하세요. 우선순위가 바뀌면 질문을 다시 쓰는 대신 가중치를 바꾸세요.\n- **종속된 질문은 두 번째 요청으로 보내세요.** 한 요청의 응답은 서로의 맥락이 되지 않습니다. 첫 응답 없이 다음 요청을 구성할 수 없을 때에만 두 번째 요청이 필요합니다. 추가 데이터를 불러오거나 다음 질문의 선택지를 골라야 하는 경우입니다.\n- **긴 질문은 객체로 구성하세요.** `instructions`와 `criteria`는 일반적으로 문자열이지만 객체나 배열일 수도 있습니다. 한 필드에는 질문을, 다른 필드에는 데이터를 넣습니다. 이력서와 데이터베이스 기록을 한 질문에서 비교할 때 편리합니다.\n\n### 확신도\n\nchoice와 score의 `confidence`는 0~1로 확률이 한 응답에 얼마나 집중되는지 보여 줍니다. 1은 모든 확률이 한 선택지에 있고, 0은 모든 선택지에 균등하게 분포합니다. score에서는 이웃 단계가 먼 단계보다 확신도를 덜 낮춥니다. noul에서는 값 자체가 확신도입니다. 0.5에서 멀수록 응답이 더 확실합니다.\n\nTypeSafe는 세 범위를 권장합니다.\n\n1. **높은 확신도** — 자동으로 행동하세요.\n2. **중간** — 신중하게 행동하세요. 예를 들어 사용자에게 확인을 요청하세요.\n3. **낮은 확신도** — 사람에게 넘기거나, 요청을 구체화하거나, 더 강력한 추론 모델 같은 대체 경로를 연결하세요.\n\n오류 비용이 클수록 임계값을 엄격하게 정하세요. 되돌릴 수 없는 작업의 기준은 읽기보다 높아야 합니다. 응답은 무엇을 선택할지, 확신도는 행동할 만한지를 말합니다. 자체 데이터에서 확신도와 정확성을 비교하여 임계값을 정하세요.\n\n### Jev를 중심으로 시스템 만들기\n\nJev는 다음 단계를 스스로 선택하고 반복마다 길을 잃을 수 있는 에이전트보다는, 코드가 과정을 제어하고 모델이 좁은 의미적 질문에 답하는 프로그램을 위해 설계되었습니다. TypeSafe의 설계 단계는 여덟 가지입니다.\n\n1. 코드로 할 수 있는 것은 코드로 하세요. 신뢰할 수 있고 저렴합니다.\n2. 상태에는 현재 질문에 필요한 것만 넣으세요. 최신 사실은 모델 메모리 대신 자체 지식베이스에서 가져오세요.\n3. 상태를 구조화하세요. 중첩 JSON을 사용하고, 모호함을 줄일 수 있다면 질문에 필요한 필드 경로를 백틱으로 표시하세요.\n4. 질문은 최대한 좁고 구체적으로 하세요. TypeSafe에 따르면 가장 중요한 규칙일 수 있습니다. 넓은 질문은 한 응답 뒤에 여러 판단을 숨깁니다.\n5. 질문을 구조화하세요. 질문 자체는 짧게 두고, 설명, 예시, 자체 데이터베이스의 값은 하나의 긴 문자열 대신 `instructions` 또는 `criteria` 객체의 이웃 필드에 넣으세요.\n6. 같은 상태에 대한 다수의 독립적인 질문을 하나의 요청에 담으세요. 같은 비용으로 더 많은 가치를 얻습니다.\n7. 응답은 코드가 규칙, 가중 합계, 일반적인 머신러닝 모델의 특징값으로 결합합니다.\n8. 확신도에 따라 분기하세요. 불확실한 사례는 사람이나 추론 모델에 넘기세요.\n\nJev는 채팅이나 코드 자동 완성 모델이 아니며, 프로그래밍 에이전트에서 언어 모델 대신 넣을 수 없습니다. 다만 에이전트가 빠른 보정된 응답이 필요한 곳에서 Jev를 호출하는 코드를 작성할 수 있습니다.\n\n### 활용 분야\n\n- **백그라운드 자동화** — 사람이 곁에 없어도 백만 번 실행되는 결정.\n- **실시간** — TypeSafe에 따르면 대부분의 요청은 약 100ms에 수행되어 즉시 처리와 인터페이스에 충분합니다.\n- **대규모 데이터** — 거대한 코퍼스 검색, 에이전트 작업 로그 라벨링, 예측용 특징값.\n- **다른 모델 검증** — 요청, 추출, 추론, 도구 호출에서 제한 우회, 인용 오류, 허구를 확인합니다.\n- **검색과 순위화** — 질의·후보 쌍의 관련성, 재순위화, 컨텍스트 선택.\n- **의도별 분기** — 사용자의 목적과 필요한 처리기를 판단합니다. 단순 로직, 전문 모델, 사람 중에서 선택하며 주제, 복잡도, 위험에 따라 어떤 언어 모델에 요청을 줄지 정합니다.\n- **보호 검사** — 언어 모델의 입력, 출력, 도구 호출에서 삽입된 지시, 규칙 위반, 개인정보 유출을 검사합니다.\n- **고객 지원** — 문의 주제와 의도, 긴급성, 짜증, 이탈 위험, 환불 요청, 대기열.\n- **콘텐츠 검토** — 플랫폼 규칙에 따른 유해성, 괴롭힘, 스팸, 사기, 위험한 조언, 개인정보를 다룹니다. 심각도와 확신도에 따라 통과, 경고, 확인, 차단을 선택합니다.\n- **산업별 활용** — 보험 사고, 금융 조사와 KYC, 계약과 광고, 상품 카드, 채용, 잠재 고객, 게임, 위험, 수요 예측, 지식 그래프, 과학 리뷰, CI의 의미적 코드 검증.\n\n### 특성\n\n- **`jev-latest`** — 최신 안정 버전의 별칭으로, 현재는 Jev 1.13입니다. 응답한 버전은 `model` 필드에 있으며 예시는 `jev-1.13.0`입니다. 새 버전이 나오면 별칭이 그 버전으로 옮겨가며, 사용자가 수정하지 않아도 응답이 바뀔 수 있습니다. 특정 버전에 맞춰 임계값을 정했다면 이 필드를 확인하세요.\n- **컨텍스트** — 상태와 모든 질문을 합쳐 요청당 64K토큰입니다. 상태와 가장 긴 질문의 합계는 최대 32K입니다. 모델은 상태를 한 번 읽고 모든 질문을 이에 대해 병렬로 검사합니다.\n- **입력** — 문자열, JSON 객체, 텍스트 배열 형태의 텍스트만 받습니다. 이미지, 오디오, 동영상은 아직 지원하지 않으므로 미리 텍스트로 바꾸세요.\n- **언어** — 주 학습 언어는 영어이며 현재 영어의 정확도가 가장 높습니다. 중국어, 일본어, 한국어 등 다른 언어도 입력받지만 정확도가 낮으므로 자체 데이터로 확인하세요.\n- **Ailoot API 가격 및 과금** — 조건은 선택한 메서드에 따라 달라지며 해당 메서드 카드에 명시되어 있습니다.\n- **설정** — Jev는 고객 데이터로 파인튜닝하지 않습니다. 자체 자료는 `state`에, 분야 규칙은 `instructions`와 `criteria`에 넣으세요.\n- **데이터** — TypeSafe는 고객의 요청과 응답으로 Jev를 학습하지 않는다고 밝힙니다.\n\n### Jev 1.13의 알려진 약점\n\nTypeSafe는 현재 버전의 약점을 공개적으로 나열하며 이후 버전에서 많은 부분을 고치겠다고 약속합니다. 모델은 빠르고 보정되어 있으며 상식적인 판단을 잘하지만 다음 한계가 있습니다.\n\n1. **문자 그대로 읽습니다.** 암시된 질문이 아니라 적힌 질문에 답하며 단서, 부정, 암묵적 조건을 문자 그대로 이해합니다. 정확한 조건과 경계 사례를 `criteria`에 적고, 피할 수 없는 해석은 문자 그대로의 두 질문으로 나누세요.\n2. **계산기가 아닙니다.** 문자, 반복, 목록 요소의 개수 세기는 신뢰하기 어렵고 크기가 커질수록 오류가 증가합니다. 후보별 질문 하나를 사용하고 계산은 코드로 하세요. 모델은 색상 이름보다 hex나 RGB 색상을 덜 잘 이해합니다. `score`는 임계값에 적합하지만 단계 사이의 정확한 수치에는 적합하지 않습니다.\n3. **날짜와 시간.** 어느 날짜가 먼저인지, 간격이 얼마인지, 날짜가 기간에 속하는지에 대한 판단은 신뢰하기 어렵습니다. 특히 형식이 섞이거나 상대적 날짜를 사용하면 그렇습니다. 날짜 부분은 choice로 추출하고 미기재 선택지를 추가한 뒤 코드로 비교하세요.\n4. **간접 표현.** 이중 부정과 속성의 속성에 대한 질문은 정확도를 낮춥니다. 직접 쓰고 상태의 부분을 이름으로 지정하세요.\n5. **불필요한 상태 내용.** 관련 없는 텍스트는 정확도를 낮춥니다. 코드로 필터링하고, 불가능하면 noul 질문으로 관련 없는 내용을 제외하세요.\n6. **적대적인 텍스트.** 모델은 기본적으로 상태 안의 함정을 예상하지 않습니다. 삽입된 지시나 자신의 분류에 이의를 제기하는 텍스트가 응답을 바꿀 수 있습니다. 정확한 기준을 쓰고 실행 전에 경계 사례를 확인하세요.\n7. **모순.** `instructions`와 `criteria`가 서로 다른 것을 요구하면 정확도가 떨어집니다. 예를 들어 noul의 예를 아니요로 설명하는 경우입니다. 기준은 질문의 연장입니다.\n8. **선택지 순서.** 모델이 때때로 choice의 첫 선택지를 선호합니다. 순서를 바꾼 뒤 응답이 변하지 않는지 확인하세요.\n9. **생성.** Jev는 텍스트 쓰기를 학습하지 않았습니다. 데이터 추출에는 정규식이나 생성 모델로 후보를 찾고 Jev가 choice로 올바른 것을 선택하게 하세요.",
    "alias_of": null,
    "aliases": [],
    "author": "TypeSafe",
    "ctx": 64000,
    "formats": [
      "systemone"
    ],
    "guide": "/docs/api/systemone/",
    "id": "jev-latest",
    "input": [
      "text"
    ],
    "kind": "decision",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "필수 필드, 자료 표현 방식 또는 파라미터 값이 올바르지 않음",
                "http_status": 400,
                "recovery": "새 생성 요청 전에 표시된 필드를 수정하세요.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "제공된 질문 ID, 확률 및 범례와 함께 모든 답변을 보존하세요. n을 사용하는 신뢰도 공식은 n>1을 요구하지만, 이를 API의 최소 선택지 규칙으로 단정하지 않습니다.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: 선택 사항인 null 허용 true/false 설명; choice: 기준 객체; score: 비어 있지 않은 기준 배열",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "메서드 형식과 ID는 정확합니다. 공급자의 기능 지원과 요청 수락은 별개입니다."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "jev-latest",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      }
    ],
    "name": "jev-latest",
    "price": {
      "in": 0.084,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "sort_in": 0.084,
      "sort_out": 0,
      "varies": false
    },
    "short": "TypeSafe의 판단 모델입니다. 텍스트를 쓰는 대신 텍스트나 JSON에 대한 자료형이 정해진 질문에 답하며, 선택지 고르기, 척도 평가, 확률이 포함된 예·아니요를 제공합니다. 라우팅, 문의 분류, 콘텐츠 검토, 점수화에 적합하며 한 요청의 모든 질문을 병렬로 평가합니다."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "TypeSafe의 판단 모델입니다. 텍스트를 쓰는 대신 텍스트나 JSON에 대한 자료형이 정해진 질문에 답하며, 선택지 고르기, 척도 평가, 확률이 포함된 예·아니요를 제공합니다. 라우팅, 문의 분류, 콘텐츠 검토, 점수화에 적합하며 한 요청의 모든 질문을 병렬로 평가합니다.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "91408891365103c0ce0d5c15c1fa35580c8baefc5b4298ae79b9e4744358f7b2",
    "renderer_sha256": "6825a317438b70ab0939441dcebefece462384e77f7e96cce899605c4b208caa"
  },
  "sourceRevision": "1004fa1708728832af300021a3e72b9654129cab5251ddd9bccb71b1c9b0499d"
}
