Jev는 TypeSafe AI가 만든 "System One Model"(시스템 원 모델)이라는 새로운 범주의 첫 제품이다. 기존 LLM처럼 사람이 읽을 자연어 텍스트를 생성하는 모델이 아니라, 소프트웨어가 직접 실행할 수 있는 "타입이 지정된 결정(typed decisions)"과 보정된 확률(calibrated probabilities)을 출력하는 것을 목표로 설계됐다.
Jev는 자유 형식 텍스트 대신, 아래 세 가지 정해진 응답 형식(질문 유형) 중 하나로만 답한다.
| 유형 | 목적 | 반환 필드 | 사용 예 |
|---|---|---|---|
| Choice | 정해진 목록 중 하나(순서 없는 범주)를 선택 | choice(선택된 옵션), probabilities(옵션별 확률, 합 1.0), confidence(0~1) | 상담 티켓을 부서로 라우팅, 문서 유형 분류, 프로그래밍 언어 감지 |
| Score | 정해진 등급(2~10단계) 위에서 위치를 평가 | score(등급 번호의 확률 가중 평균), legend(등급 설명), probabilities, confidence | 버그 심각도, 고객 불만 강도, 숙련도 평가 |
| Noul | 예/아니오 명제에 대한 확률 반환 | noul(0=아니오 ~ 1=예 확률, 별도 confidence 없음) | 개인정보 포함 여부, 환불 요청 여부, 기술 언급 여부 판별 |
하나의 API 요청에 state(평가 대상 데이터)와 여러 개의 질문(questions)을 함께 보내면, 각 질문은 서로 독립적으로 병렬 평가된다. 한 질문의 답이 다른 질문의 숨은 컨텍스트가 되지 않으므로, 질문을 추가해도 "context-rot"(맥락 오염으로 인한 성능 저하)이 생기지 않는다고 설명한다. 질문을 늘려도 응답 시간은 거의 늘지 않고, 추가 토큰 비용만 소폭 증가한다.
Choice·Score 응답에는 확률 분포의 "뾰족한 정도"를 나타내는 confidence(0~1) 값이 함께 제공된다. 분포가 한 옵션에 집중되면 1.0(높은 확신), 여러 옵션에 퍼지면 낮은 값이 된다. 이를 이용해 "고확신 시 자동 실행, 저확신 시 사람에게 에스컬레이션" 같은 로직을 코드로 짤 수 있다.
Choice·Score·Noul의 instructions와 criteria에 문자열 대신 JSON 객체를 사용할 수 있어, 스키마·택소노미·DB 로우를 그대로 넘길 수 있고, 계층형 분류(taxonomy 트리 탐색)나 복잡한 필드 추출도 가능하다.
Claude Code 등 코딩 에이전트가 Jev API를 올바르게 통합하도록 돕는 "TypeSafe agent skill"을 별도로 배포한다. (2.6절 상세는 6장 참조)
Jev 자체는 다운로드해 로컬에서 실행하는 모델이 아니라, TypeSafe AI가 호스팅하는 API(SaaS)로 제공된다. "설치"는 이 API를 호출하기 위한 SDK 또는 에이전트 스킬을 설치하는 것을 의미한다.
TYPESAFE_API_KEY로 설정한다. (Python/JS SDK가 이 환경 변수를 자동으로 읽는다.)pip install typesafe-sdk
# 또는
uv add typesafe-sdk
pip install "typesafe-sdk[http2]"npm install @typesafe-ai/sdk
Claude Code용:
claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-ai
기타 에이전트용 (범용 skills 설치기):
npx skills add typesafe-ai/skills --skill typesafe-ai
수동 설치: GitHub 저장소(typesafe-ai/skills)의 skills/typesafe-ai 디렉터리 전체를 에이전트의 스킬 디렉터리에 복사한다.
업데이트:
# Claude Code
claude plugin marketplace update typesafe-ai
claude plugin update typesafe@typesafe-ai
# 기타
npx skills update
설치 없이 바로 사용해보고 싶다면 플레이그라운드를 이용할 수 있다: https://console.typesafe.ai/playground (출처: https://docs.typesafe.ai/introduction/coding-agents)
state + questions모든 요청은 평가 대상 데이터(state) 와 하나 이상의 질문(questions) 을 함께 보내는 구조다. (출처: https://docs.typesafe.ai/concepts/state)
state는 세 가지 형태를 지원한다."My card was charged twice."{"message": "My card was charged twice.", "order_id": "A-104"}["Hi", "My customer number is TS1337.", "My card was charged twice."]state는 텍스트 전용(문자열/JSON/텍스트 배열)만 지원하며, 이미지·음성·영상은 아직 지원하지 않는다. POST https://api.typesafe.ai/v1/systemoneAuthorization: Bearer <API_KEY>curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{"state": "...", "model": "jev-latest", "questions": {...}}
EOF
요청 필드(모두 필수): state, model(예: "jev-latest"), questions(질문 이름 → 질문 정의의 맵). 응답은 model, answers(질문 이름 → 답변 맵), usage(input_tokens, output_tokens)로 구성된다.
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient() as client:
response = client.system_one(
state={"document": "I was charged twice. Please fix this ASAP."},
questions={
"billing": Noul(instructions="Is this ticket about billing?"),
"tone": Choice(
instructions="What is the customer's tone?",
criteria={"calm": None, "frustrated": None, "angry": None},
),
"urgency": Score(
instructions="How urgent is this ticket?",
criteria=["can wait", "this week", "today"],
),
},
)
print(response.nouls["billing"].noul)
print(response.choices["tone"].choice)
print(response.scores["urgency"].score)
비동기 처리가 필요하면 AsyncTypeSafeClient(async/await)를 사용한다. SDK는 기본 재시도 정책으로 재시도를 자동 처리한다.
공식 문서는 System One 기반 앱을 만들 때 지켜야 할 5가지 원칙을 제시한다. (출처: https://docs.typesafe.ai/concepts/how-to-build-with-system-one)
1. 코드에 제어권 유지: 결정론적 로직·부수효과는 코드에 남기고, 상식적 판단이 필요한 부분에만 AI를 사용한다.
2. 입력을 전략적으로 분해: 현재 질문과 무관한 컨텍스트는 넣지 않는다(맥락 오염 방지).
3. 원자적 질문 던지기: (가이드가 "가장 중요한 개념"이라고 강조) 복잡한 판단을 좁고 명확한 개별 질문으로 쪼갠다.
4. 병렬성 활용: 독립적인 질문을 한 요청에 여러 개 넣어 왕복 횟수를 줄인다.
5. 출력을 코드에서 결정론적으로 조합: 가중합·임계값·전통적 ML 모델 등으로 답변들을 코드에서 합성하고, 확신도 기반으로 라우팅한다.
문서는 실전에서 자주 쓰는 4가지 패턴을 소개한다. (출처: https://docs.typesafe.ai/patterns)
| 패턴 | 설명 |
|---|---|
| Speculative Fan-Out | 관련 있을 수도 있는 질문까지 한 번에 모두 보내고, 코드에서 필요한 답만 골라 쓴다 (비용/속도 이점) |
| Confidence-Gated Routing | 답변 값 + confidence를 함께 봐서, 확신도가 낮으면 사람에게 넘기고 높으면 자동 실행한다 |
| Composite Scoring | 여러 차원의 평가를 코드에서 하나의 점수로 합성한다 |
| Intent Routing | 사용자 요청의 의도를 분류해 적절한 처리 경로로 라우팅한다 |
Confidence-Gated Routing 예시(은행 음성 명령 처리):
if action.confidence < 0.6:
route_to_support_agent()
elif action.choice == "check_balance":
show_balance()
elif action.choice == "approve_transfer":
if action.confidence > 0.85:
approve_transfer()
else:
ask_user_to_confirm()
(출처: https://docs.typesafe.ai/patterns/confidence-routing)
"몇 개의 질문부터 전체 파이프라인까지" 실전 예제를 모아둔 쿡북 섹션이 있으며, 총 23개 레시피가 5개 카테고리(자기 일관성/자가검증, 배치 처리, 검색·재랭킹·함수 호출 등 how-to, 추출, 분류)로 구성돼 있다. 예: 병렬 질문 배치 처리, BM25 재랭킹, 시맨틱 검색, 텍스트 구조 복원, 함수 호출 매핑, 지식 그래프 엔티티 정합, RAG 패시지 스코어링, 인용 검증, LLM 가드레일, 구조화 데이터 추출 캐스케이드, 날짜 추출, 계층형 분류 등. (출처: https://docs.typesafe.ai/cookbooks)
System One 모델은 전통적 LLM과 달리 자유 형식 텍스트를 생성하지 않고, "타입이 있고 제약된 출력(typed, constrained outputs)"을 반환하도록 만들어졌다. 이 모델들은 답장을 작성하거나, 코드를 생성하거나, 자신의 추론 과정을 설명하지 않는다. 입력은 현재 텍스트 전용(문자열/JSON 객체/텍스트 배열)만 지원된다. (출처: https://docs.typesafe.ai/concepts/system-one)
공식 "머신러닝 프라이머" 문서는 사후 훈련(post-training) 기법을 3가지로 구분한다. (출처: https://docs.typesafe.ai/introduction/machine-learning-primer)
사용자는 state(평가 대상)와 하나 이상의 questions를 한 번의 요청으로 제출한다. 모델은 "각 질문을 상태에 대해 병렬로 평가"하여, 타입이 있는 답과 확률·확신도를 한 응답에 담아 반환한다. 질문들은 서로 독립적으로 평가되므로 질문을 늘려도 맥락 오염(context-rot)이 생기지 않는다. (출처: https://docs.typesafe.ai/introduction)
Choice, Score, Noul은 한 번의 API 호출 안에서 자유롭게 조합할 수 있으며, 지연시간에 큰 영향을 주지 않는다. 이 세 원시 요소를 코드로 조합해 더 큰 워크플로우를 구성하는 것이 핵심 아키텍처 패턴이다. (출처: https://docs.typesafe.ai/introduction, https://docs.typesafe.ai/primitives)
TypeSafe AI는 향후 AI 활용의 "99%가 기계-기계 간(machine-to-machine) 상호작용, 1%만 인간 상호작용"이 될 것이라 가정하고, 출력을 사람이 읽기 좋게 만드는 대신 소프트웨어가 예측 가능하게 처리할 수 있도록 설계했다고 밝힌다. (출처: https://docs.typesafe.ai/introduction/machine-learning-primer)
(출처: https://docs.typesafe.ai/models)
| 통합 대상 | 방식 | 출처 |
|---|---|---|
| HTTP API | 언어 무관, POST https://api.typesafe.ai/v1/systemone 직접 호출 | https://docs.typesafe.ai/api |
Python SDK (typesafe-sdk) | 동기(TypeSafeClient)·비동기(AsyncTypeSafeClient) 클라이언트, 자동 재시도 | https://docs.typesafe.ai/sdk/python |
JavaScript/TypeScript SDK (@typesafe-ai/sdk) | ESM/CJS/TS 타입 지원, choice()/score()/noul() 헬퍼 함수 | https://docs.typesafe.ai/sdk/javascript |
| Claude Code 플러그인/스킬 | claude plugin marketplace add typesafe-ai/skills → claude plugin install typesafe@typesafe-ai, 이후 /typesafe:typesafe-ai 로 호출하거나 프롬프트에서 "use the TypeSafe skill"이라고 지시 | https://docs.typesafe.ai/agent-skill |
| 기타 코딩 에이전트(범용 skills) | npx skills add typesafe-ai/skills --skill typesafe-ai | https://docs.typesafe.ai/agent-skill |
| GitHub 저장소 | 스킬: github.com/typesafe-ai/skills, JS SDK 소스: github.com/typesafe-ai/typesafe-sdk-js | https://docs.typesafe.ai/introduction/quickstart, https://docs.typesafe.ai/sdk/javascript |
| 플레이그라운드(콘솔) | 코드 없이 바로 테스트: https://console.typesafe.ai/playground | https://docs.typesafe.ai/introduction/coding-agents |
코딩 에이전트(Claude Code, Cursor 등)와의 관계에 대해 문서는 명확히 선을 긋는다: Jev는 코딩 에이전트를 대체하지 않으며, 텍스트 스트리밍·파일 편집·코드 완성을 하지 않는다. 대신 코딩 에이전트가 만드는 애플리케이션 "내부"에서 구조화된 결정을 담당하는 컴포넌트로 통합된다. TypeSafe agent skill은 코딩 에이전트가 Jev API를 올바르게 통합하는 코드를 생성하도록 돕는 문서/가이드 역할을 한다. (출처: https://docs.typesafe.ai/introduction/coding-agents)
그 외 언어별 공식 SDK(예: Go, Java, Ruby 등)에 대한 언급은 문서에서 확인되지 않았다 — 정보 없음 (Python, JavaScript/TypeScript, HTTP API 세 가지만 공식 문서에 나열됨, 출처: https://docs.typesafe.ai/sdk).
공식 랜딩 페이지와 모델 문서에 공개된 가격 정보는 다음과 같다. (출처: https://typesafe.ai/, https://docs.typesafe.ai/models)
속도/요율 제한(Rate Limits):