MNIST 실험 노트

배경 지식 & API 가이드 · 2026년 10월 기준

Jev는 왜 주목받았고,
우리는 무엇을 만들 수 있을까요?

모델 이름, 학습 도구, API가 섞여 헷갈렸다면
여기서 관계부터 정리해 보세요.

Clef 외의 대안은 모델과 API 지도에서 한눈에 비교할 수 있습니다. 가격과 성능은 모델별 비교표, 실험 후보는 MNIST 추천에서 볼 수 있습니다. 먼저 등장 배경과 사례를 읽고, 뒤에서는 실제 요청과 응답을 살펴봅니다. 코드를 보고 싶다면 웹 API나 Unsloth Python API로 바로 넘어가도 됩니다.

공식 발표 · 개발자 보고 · 연구 논문관계부터 알아보기 ↓

01 / 큰 그림

Jev·Clef는 모델, Unsloth는 실행하고 가르치는 도구입니다

이름무엇인가요?이 튜토리얼과의 관계
Jev
TypeSafe AI
상황과 질문을 받아 정해진 형식의 판단을 반환하는 모델. TypeSafe API로 사용합니다.‘문장을 생성하는 대신 행동을 고른다’는 접근의 출발점입니다.
Clef
Cloudflare
가중치와 구현을 공개한 decision model 계열. Jev와 호환되는 질문 형식을 제공합니다.기반 모델에 붙이는 판단부(head)의 방식을 참고합니다.
Unsloth모델을 불러오고, 추가 학습하고, 실행·배포하는 프레임워크와 앱입니다.Qwen3.5-0.8B에 판단부와 LoRA를 붙여 학습하는 데 사용했습니다.

근거: TypeSafe 소개 · Clef 모델 카드 · Unsloth 소개

세 가지를 차례대로 호출하는 구조가 아닙니다.

이 사이트의 MNIST 실험은 Jev 서버를 부르지 않습니다. Unsloth로 직접 학습한 Qwen 기반 모델이 그림을 보고 행동을 고릅니다. Cloudflare가 배포한 완성된 Clef 모델을 그대로 평가한 것도 아닙니다. 실제 모델 코드

일반적인 분류기와 무엇이 다른가요?

전통적인 분류기는 보통 학습할 때 정한 범주를 출력합니다. 여기서 다루는 decision model은 판단할 질문과 선택지의 뜻을 요청마다 함께 넣는 것이 특징입니다. 예를 들어 ‘어느 팀에 보낼까?’의 선택지를 ‘결제·기술·기타’로 주거나, 다른 요청에서는 ‘보관·검토·삭제 후보’로 바꿉니다. 새 선택지에서도 잘 판단하는지는 별도로 검증해야 합니다.

JSON을 출력하는 LLM과도 겉모습은 비슷할 수 있습니다. 차이는 JSON이라는 파일 형식 자체보다 내부에서 자유로운 문장을 순차 생성하는가, 허용된 답에 직접 점수를 매기는가에 있습니다. 타입이 맞는 답도 내용상 틀릴 수 있습니다. 개념 출처 ↗

02 / 등장과 확산

이번 관심의 출발점은 TypeSafe의 Jev 공개였습니다

‘최초’는 범위를 나눠 말해야 합니다. 분류·점수화·정책 선택 자체는 오래된 머신러닝 문제입니다. 여기서는 2026년 가을, 범용적인 typed decision API를 둘러싼 공개 흐름을 다룹니다. 아래 연표만으로 decision model 전체의 발명자를 정할 수는 없습니다.

2026. 09. 15. · 모델 공개

Diogo Almeida와 TypeSafe AI가 Jev를 소개

창업자 Diogo Almeida가 ‘System One’이라는 이름으로 빠른 구조화 판단을 전면에 내세웠습니다. RLCD라는 확률 보정 중심의 학습 방법도 소개했습니다. 속도·비용 우위는 발표사의 비교 주장으로 읽어야 하며, 모든 업무에 적용되는 배수는 아닙니다.

TypeSafe의 최초 발표 ↗
2026. 09. 21. · 개발 도구로 확장

LangSmith가 평가자 기능에 Jev를 추가

에이전트의 기록을 읽고 개인정보 노출 여부나 응답 품질 등을 평가하는 용도로 연결했습니다. 채팅 밖에서 모델을 쓰는 방식이 구체적인 개발 도구에 들어간 사례입니다.

LangChain 발표 ↗
2026. 10. 01. · 공개 가중치와 구현

Cloudflare가 Clef와 Clef-flash를 공개

호환 API뿐 아니라 직접 실행할 수 있는 가중치가 나왔습니다. Cloudflare는 앞선 DiffusionGemma 실험이 Matt Mastracci의 독립 연구에서 출발했다고 밝힙니다. 제품을 공개한 사람과 공개 구현에 기여한 사람을 함께 볼 필요가 있습니다.

Cloudflare 발표 ↗
2026. 10. 05.–07. · 멀티모달과 소형 모델

Liquid AI의 d1, 이어 d1-3B·d1-omni-600M

텍스트와 이미지를 판단하는 d1을 소개한 뒤, 공개 가중치와 엣지 장비 실행 결과를 발표했습니다. omni-600M은 초기 연구용 체크포인트로 소개되어, 큰 모델과 같은 완성도로 해석하면 안 됩니다.

d1 발표 · 공개 모델 발표 ↗

최근 흐름은 세 방향으로 읽을 수 있습니다

위 자료를 종합하면, ① LLM 옆에서 분류·평가·분기를 맡기기, ② 텍스트를 넘어 이미지 등으로 입력 넓히기, ③ 공개 모델을 로컬에서 실행하고 업무별로 추가 학습하기로 확장되는 흐름입니다. 이는 자료를 종합한 해석이며 시장 전체를 집계한 통계는 아닙니다. Unsloth의 decision model 학습·서빙 지원도 세 번째 방향에 해당합니다. 학습 안내 ↗

System One은 제품이 내세우는 접근을 이해하는 이름입니다.

빠른 판단과 느린 숙고를 구분하는 비유입니다. 이름만으로 인간처럼 직관을 갖췄다거나, 모든 추론 문제를 해결한다는 뜻은 아닙니다. Vercel의 개념 설명 ↗

03 / 보고된 활용과 한계

어디에 쓰였는지, 무엇까지 확인됐는지 함께 봅니다

제품 통합 · 2026. 09. 21.

에이전트 기록을 평가하는 LangSmith

Jev를 평가자로 사용해 실행 기록에 구조화된 피드백을 붙입니다. 예를 들면 ‘민감정보가 노출됐나?’는 yes/no 확률로, ‘사용자 의도는 무엇인가?’는 선택지로 묻습니다.

확인 범위: 기능 공개와 사용 예시. 모든 평가 업무에서 사람과 같은 정확도를 보장한 결과는 아닙니다.

공식 보고 ↗
개발자 실험 · 2026. 09. 18.

포켓몬에서 ‘이동 방침’을 고르기

2389 Research의 Michael Sugimura는 Jev를 매 이동의 길찾기에 쓰는 대신, 어떤 이동 정책을 쓸지 고르는 역할에 배치했습니다. 상위 목표는 다른 모델이 담당하고 실제 경로 계산은 코드가 맡았습니다.

확인 범위: 개발자 자신의 초기 실험 보고. ‘Jev가 혼자 화면만 보고 게임을 모두 풀었다’는 사례로 소개하면 부정확합니다.

개발자 원문 ↗
기업 내부 시험 · 2026. 10. 01.

웹사이트를 분류하는 Clef

Cloudflare는 위협 인텔리전스 팀에서 웹사이트를 읽고 범주를 판별하는 시험을 소개했습니다. 가져오기·렌더링·분류를 합쳐 Clef 2.2초, 비교 LLM 4.7초였다고 보고했습니다.

확인 범위: 회사가 측정한 특정 작업 흐름. 모델 자체의 순수 추론 시간이나 독립적인 보안 인증 수치가 아닙니다.

Cloudflare 원문 ↗
독립 평가 · 2026. 09. 29. 제출

37개 데이터셋에서 Jev 평가

Deußer·Sparrenberg·Sifa는 346,009개 요청으로 분류·라우팅·독해 등을 평가했습니다. 좋은 결과와 함께 저자원 언어, 세밀한 범주, 평가 척도에 따른 차이도 보고합니다. 이진 판단에서는 임계값 조정이 중요했습니다.

확인 범위: Jev 1.13.0과 논문의 고정 프롬프트·비교 모델 조건. arXiv 프리프린트입니다.

평가 논문 ↗
독립 보안 평가 · 2026. 10. 13. 제출

형식이 고정되어도 공격에 강한지는 별개

Li 등은 같은 공격 입력을 Jev·LLM 평가자·전용 분류기에 적용했습니다. Jev는 일부 규칙 기반 검사에서 강했지만, 피싱 판단에서는 놓치는 사례와 공격 영향을 보고했습니다.

확인 범위: 네 과제와 해당 공격 구성에서의 결과. ‘문장을 생성하지 않으니 프롬프트 공격도 불가능하다’는 결론은 성립하지 않습니다. arXiv 프리프린트입니다.

비교 논문 ↗
제조사 데모 · 2026. 10. 05.

지원 요청 필터링부터 회로기판 검사까지

Liquid AI는 d1을 여섯 개 응용 과제로 평가했습니다. 시각 검사에서는 정상 부품과 검사 대상 이미지를 함께 제공했습니다. 질문을 좁게 정의해 이미지 판단에 사용하는 방향입니다.

확인 범위: 제조사 데모이며 모델마다 각 응용을 한 번 실행한 비교입니다. 반복 실험으로 확인한 현장 불량 검출 성능과는 다릅니다.

d1 데모와 측정 조건 ↗

추가 가이드 / 모델과 API 지도

Clef 말고 무엇이 있나요?

Jev·Clef만 있는 분야는 아닙니다. 상용 API, 공개 가중치, 학습·서빙 구현을 함께 보면 아래처럼 나뉩니다. 2026년 10월 30일에 1차 자료로 확인한 주요 계열을 모았으며, 모든 파생 체크포인트를 망라한 목록은 아닙니다.

“Open API”는 “오픈 모델”과 다릅니다.

누구나 키를 발급받아 호출하는 상용 API도 모델 내부는 비공개일 수 있습니다. 반대로 공개 가중치를 내려받아 나만의 비공개 서버에서 쓸 수도 있습니다. OpenAPI라는 말은 API 명세 형식을 뜻하기도 하므로 여기서는 ‘호스팅 API’와 ‘공개 가중치’로 나눕니다.

A. 서비스 API로 사용하는 모델

아래는 호스팅 API가 확인된 제품입니다. 공개 가중치를 별도로 확인하지 못한 제품을 영구적으로 비공개라고 단정하지는 않습니다.

모델·개발사사용·공개 방식쉽게 이해하면
Jev · TypeSafe ↗API선택·참거짓·등급 판단. 이 튜토리얼에서 소개하는 System One 형식의 기준점.
OpenAI Decisions ↗APIpredicate·choice·score를 지원합니다. 일반 채팅 API와 별도이며 Jev의 요청 JSON을 그대로 보내는 방식은 아닙니다.
Microsoft-Decision-1 ↗Foundry · OpenRouterQwen3.5-9B를 바탕으로 한 판단 모델. 분류·우선순위·검증 등에 쓰며 Foundry에서는 배포 설정이 필요합니다.
GLiDE · Fastino ↗API불확실한 질문에 추가 추론을 쓰는 접근. 아래의 공개 모델 GLiNER2.5-Decide와는 다른 제품입니다.
Mercury Decide · Inception ↗API상황과 타입이 정해진 질문을 받아 판단과 확률을 반환하는 제품입니다.
Nimble · Bespoke ↗API · 가입 대기호스팅 판단 모델. 확인 당시 신규 가입이 일시 중단되어 대기 목록으로 안내되었습니다.
Parallel Decisions ↗API · 웹 근거 포함웹에서 자료를 찾고 출처와 함께 판단합니다. 제공한 입력만 채점하는 모델과는 검색 시간·비용까지 비교해야 합니다.
Span-01 · Respan ↗API · 기록 평가에이전트 실행 기록에 특정 행동이 있었는지 평가합니다. 범용 선택 모델보다 관측·평가 업무에 초점을 둡니다.

B. API와 공개 모델을 함께 살펴볼 계열

같은 브랜드라도 서버에서 부르는 모델과 다운로드하는 모델의 크기·버전·성능이 같다는 뜻은 아닙니다.

모델·개발사사용·공개 방식쉽게 이해하면
Clef · Cloudflare ↗Workers AI + 공개 가중치호스팅으로 호출하거나 공개 모델을 직접 실행할 수 있습니다. 모델별 실행 코드와 라이선스를 확인합니다.
d1 · Liquid AI ↗호스팅 + 일부 공개 모델호스팅 d1 계열과 공개 d1-3B·d1-omni-600M을 구별합니다. omni는 초기 연구 모델이며 공개 모델은 Liquid의 라이선스를 따릅니다.
pplx-Decider · Perplexity ↗API + 공개 체크포인트API는 v1.2와 Flash v1.2를 안내합니다. 공개 v1.1-27b는 Apache-2.0이며 전용 판단부·attention 설정을 보존해야 합니다. 최신 API 모델의 가중치 공개까지 의미하지 않습니다.
Span-02 · Respan ↗API + 공개 모델 발표타입이 정해진 판단과 추론 예산을 다룹니다. 제조사는 공개 가중치도 안내합니다. 실제 다운로드 버전의 모델 카드와 라이선스를 다시 확인하세요.

C. 직접 실행하거나 학습할 공개 모델·구현

공개 가중치는 파일을 받아 실행할 수 있다는 뜻입니다. 학습 데이터까지 전부 공개되었다는 뜻은 아니며, 호스팅 비용이 사라져도 장비와 운영 비용은 남습니다.

모델·개발사사용·공개 방식쉽게 이해하면
Laya · Convai Innovations ↗Apache-2.0작은 encoder 계열. 영어 ModernBERT와 다국어 mmBERT 변형을 구별합니다. 기본 모델과 typed-decisions 특화 모델의 성능도 다릅니다.
Kev · Jared Palmer ↗공개 가중치 · 코드Qwen 계열에 판단부를 붙인 구현. 크기별 모델을 로컬에서 비교하고 실행 코드를 살펴보기 좋습니다.
GLiNER2.5-Decide · Fastino ↗Apache-2.0 · 340MCPU 실행을 지원하는 소형 모델. 판단뿐 아니라 span·관계 추출과 출력 사이 제약, full·LoRA 학습을 다룹니다.
H2O-Lightning-4B ↗Apache-2.0 · 4BQwen3.5-4B 기반의 텍스트·이미지 판단 모델입니다. 일반 채팅 모델용 예제보다 모델 카드의 판단 실행 방식을 우선 확인합니다.
vLLM Semantic Router · Decision ↗공개 모델 + 실행 프로젝트라우팅 등에 쓸 판단 모델 계열과 실행 환경입니다. vLLM이라는 추론 엔진 자체와 개별 Decision 모델은 구별합니다.
Strands Decider ↗공개 모델 + 학습·서빙 코드판단부를 붙이는 학습 파이프라인부터 평가·로컬 서버까지 제공하는 프로젝트입니다. Perplexity의 Decider와는 별개입니다.

추가 확인: Perplexity의 현재 API와 버전 안내 · Liquid의 호스팅 모델 목록 · Respan 변경 기록

그래서 무엇부터 비교하면 되나요?

  • 서버 운영 없이 판단 기능을 붙이려면: Jev·OpenAI Decisions·Microsoft-Decision-1·GLiDE·Mercury Decide 등 호스팅 API를 같은 평가 자료로 비교합니다.
  • 내 컴퓨터에서 작은 텍스트 분류부터 해보려면: Laya·GLiNER2.5-Decide 같은 encoder 모델부터 살펴볼 수 있습니다. 한국어 지원 여부와 실제 한국어 정확도는 따로 확인합니다.
  • 이 MNIST 실험처럼 이미지를 보고 행동을 고르게 하려면: 이미지 입력을 지원하는 Clef·d1·H2O-Lightning·pplx-Decider의 해당 버전을 확인하고, 직접 학습에는 Unsloth나 Strands의 지원 범위를 살펴봅니다.
  • 최신 웹 정보를 찾아야 판단할 수 있다면: Parallel처럼 검색을 포함한 서비스를 비교합니다. 모델 추론 시간만으로 비교하면 작업 전체의 차이를 놓칩니다.

API 주소만 바꾸면 교체할 수 있나요?

항상 그렇지는 않습니다. Jev 계열의 state / questions / noul과 OpenAI의 input / questions / predicate는 의미가 비슷해도 JSON 구조가 다릅니다. Cloudflare는 바깥 응답 래퍼도 다릅니다. 요청 변환, 응답 변환, 오류 처리, 확률 임계값 재평가가 필요합니다. ‘호환’이라는 말만 보고 수치를 같은 의미로 취급하지 마세요.

특히 Perplexity는 API에서 옛 모델 이름을 보내도 새 버전으로 연결할 수 있다고 설명합니다. 재현 실험이라면 이름뿐 아니라 변경 기록과 실제 제공 버전을 확인해야 합니다. 버전·과금 규칙 ↗

일반 LLM·분류기·라우터도 대안인가요?

네. GPT·Claude·Gemini 같은 일반 LLM에 구조화 출력을 요구하거나, Qwen·Llama 계열을 직접 학습하거나, BERT 분류기를 쓰는 방법도 대안입니다. 다만 모두가 이 표의 ‘전용 decision model’인 것은 아닙니다. 자유로운 설명이 필요한지, 고정 범주만 필요한지, 요청마다 선택지가 바뀌는지를 먼저 정하세요.

OpenRouter 같은 유통 API와 Unsloth 같은 학습 도구도 모델 자체와 구별합니다. 모델 목록이 많아 보여도 같은 가중치를 여러 서비스가 제공하는 경우가 있습니다.

비교 / 가격 · 속도 · 정확도 · 한국어

숫자를 나란히 보되, 측정 조건도 함께 읽습니다

확인일 2026. 10. 30. · 18개 계열을 버전과 실행 방식별로 나누고 한국어 추가학습 모델을 더했습니다. 아래 수치는 공개 자료를 정리한 것이며, 여기서 새로 API를 호출하거나 모델을 벤치마크한 결과는 아닙니다.

표를 읽는 네 가지 기준
  • 가격: 별도 표기가 없으면 USD / 입력 100만 토큰입니다. 공개 모델의 ‘호출료 없음’은 총비용 0원이 아닙니다.
  • 속도: p50은 중앙값, p95는 95% 요청이 그 시간 안에 끝난다는 뜻입니다. 장비 내 추론·상용 API·고객 사례를 서로 다른 측정으로 표시했습니다.
  • 정확도: DI는 Decision Index의 점수로, 일반적인 정답률 %가 아닙니다. 버전·분할·태스크·실행자가 다르면 순위 비교에 쓰지 마세요. F1도 정답률과 다릅니다.
  • 한국어: ‘미확인’은 불가능이라는 뜻이 아닙니다. 기반 모델의 다국어 능력만으로 판단 모델의 한국어 품질을 보장하지 않았습니다.

좁은 화면에서는 표를 가로로 밀어 보세요. 모델별 출처는 첫 열에 있습니다.

모델별 공개 수치와 확인 범위 — 정확도 순위표가 아닙니다
모델 / 출처가격속도 / 측정 조건정확도 / 평가 조건한국어 지원 근거이미지 직접 입력
Jev 1.14$0.042 / 1M 입력 · OpenRouter100 ms p50 · OpenRouter 최근 1주 표시, 모든 지역·입력 혼합1.14의 동일 조건 정확도 미확인. 이전 1.13 점수를 최신 버전에 옮기지 않음.한국어별 평가·지원 명세 미확인지원 확인
OpenAI Decisions · GPT-6 Luna$0.10 / 1M 입력; 캐시 읽기 $0.01 · 쓰기·지역 할증 별도<280 ms p95 · Sierra 업무 사례, 전체 서비스 보장치 아님Box의 30개 보험증서 사례에서 Responses API와 같은 정확도 보고. 통일 벤치마크 수치 미확인.한국어별 평가·지원 명세 미확인지원 확인
Microsoft-Decision-1$0.042 / 1M 입력 · OpenRouter200 ms p50 · OpenRouter 최근 1주 표시Microsoft의 36개 벤치마크 비교에서 최고 성능 주장. 공통 정확도 %는 확인 자료에 없음.다국어 평가 언급 / 한국어별 수치 미확인텍스트용
GLiDE$0.04 / 1M 입력동일 조건 절대 지연시간 미확인DI 0.2.1: 64.81점 · Fastino 자체 실행, 9/30 발표 당시. 최신 배너 점수와 구분.한국어별 평가·지원 명세 미확인지원 확인
Mercury Decide$0.02 / 1M 입력 · 50% 할인 표시 당시공식 자료에서 비교 가능한 수치 미확인공식 자료에서 공통 벤치마크 수치 미확인한국어별 평가·지원 명세 미확인이번 조사에서 미확인
Nimble-v4 / v4-max공개 단가 미확인 · 신규 가입 대기비교 가능한 수치 미확인DI public: 63.70 / 68.46점 · Bespoke 자체 실행 10/12, 미등재 결과한국어별 평가 미확인 · 텍스트 모델텍스트용
Parallel Decisions$1 / 1,000 호출 · 토큰 과금과 단위가 다름웹 검색 포함. 동일 조건 p50/p95 미확인웹 근거를 찾는 과제. 이미지 숫자 판단과 비교할 공통 수치 미확인한국어별 평가·지원 명세 미확인이번 조사에서 미확인
Span-01$0.02 / 1M 입력; Lite 무료는 일일 한도 내비교 가능한 수치 미확인행동 평가 0.806 · Respan 자체 trace 벤치마크, 단순 정답률로 해석하지 않음한국어별 평가·지원 명세 미확인이번 조사에서 미확인
Clef 27B$0.24 / 1M 입력 · Workers AI; 로컬은 장비비209.3 ms 중앙값 / 238.6 ms p95 · Cloudflare DI 0.2.1 내부 실행BANKING77 macro-F1 94.2% · 같은 내부 실행. MNIST 수치 아님.한국어별 평가·지원 명세 미확인지원 확인
Clef-flash 9B$0.038 / 1M 입력 · Workers AI; 로컬은 장비비38.8 ms 중앙값 / 122.4 ms p95 · Cloudflare DI 0.2.1 내부 실행BANKING77 macro-F1 90.9% · 같은 내부 실행. 공개 모델도 이미지 지원.한국어별 평가·지원 명세 미확인지원 확인
d1 · 호스팅$0.02 / 1M 입력 · Liquid 가격표의 d1API의 동일 조건 수치 미확인. 아래 로컬 3B 속도와 다름.공개 3B와 서버 모델을 동일시하지 않음. 정확 버전별 비교 필요.한국어별 평가·지원 명세 미확인지원 확인
d1-3B · 공개 모델로컬 장비비 + Liquid 라이선스 조건RTX 4090: 텍스트 8 ms / 384px 이미지 17 ms · 단건, 개발사 측정DI 0.2.1 public: 48.57점 · Liquid 보고. 이미지 MNIST 성능은 미측정.다국어 벤치마크 있음 / 한국어별 결과 미확인지원 확인
d1-omni-600M로컬 장비비 + Liquid 라이선스 조건초기 연구 모델. 같은 발표의 3B 속도를 적용하지 않음.DI 0.2.1 public: 15.95점 · Liquid 보고한국어별 평가·지원 명세 미확인지원 확인
pplx-Decider v1.2 / Flash v1.2$0.02 / $0.01 per 1M 입력 · 각각 27B / 4B현재 버전의 동일 조건 속도 미확인v1.2의 공통 평가 수치 미확인. 아래 공개 v1.1 점수와 구분.한국어별 평가·지원 명세 미확인지원 확인
pplx-Decider v1.1-27b · 공개로컬 실행: 호출료 없음 / 장비·전력 별도동일 조건 속도 미확인DI 61.56점 · Perplexity 모델 카드 자체 보고. 전용 attention·readout 설정 필요.한국어별 평가·지원 명세 미확인지원 확인
Span-02$0.01 / 1M 입력; 공개판은 장비비budget_ms로 추론 예산 설정. 그 값은 실측 왕복 지연시간이 아님.DI 0.3: 61.2점(추론 끔) / 64.1점(시간 제한 없음) · Respan 실행한국어별 평가·지원 명세 미확인지원 확인
Laya · 영어 기본판로컬 실행: 호출료 없음 / 장비·전력 별도39.5 ms · T4, 1질문, 개발사 측정MASSIVE 영어 intent: 78.3% · 개발사 비교. 모든 업무의 정확도 아님.영어용. 한국어에는 다국어판을 선택텍스트용
Laya Multilingual로컬 실행: 호출료 없음 / 장비·전력 별도32.8 ms · T4, 1질문, 개발사 측정MASSIVE 51언어 평균 정확도 36.6% · 20선택지 실험한국어 MASSIVE 49.0% · 같은 조건 영어판 11.0%, 개발사 보고텍스트용
laya-ko · 커뮤니티 추가학습로컬 실행: 호출료 없음 / 장비·전력 별도약 30 ms CPU라는 작성자 설명 · CPU 기종·분위수 불명KLUE-YNAT 83.4% (n=1,000), NLI 81.5% (n=1,000) · 작성자 평가한국어 특화. KLUE train으로 학습, validation에서 평가한 결과텍스트용
Kev · 공개 계열로컬 실행: 호출료 없음 / 장비·전력 별도현재 버전·장비를 맞춘 수치 미확인모델 크기와 체크포인트를 고정해야 비교 가능. 계열 전체의 단일 정확도 없음.한국어별 평가·지원 명세 미확인이번 조사에서 미확인
GLiNER2.5-Decide 340M로컬은 장비비; Fastino API $0.03 / 1M 입력38.3 ms p50 V100 / 167.3 ms p50 48-vCPU Xeon · 짧은 문서Fast Decisions 17데이터셋 평균 60.1% · Fastino 자체 평가공식 문서는 영어 분류용으로 안내. 다국어 GLiNER 추출 모델과 별개텍스트용
H2O-Lightning-4B로컬 실행: 호출료 없음 / 장비·전력 별도28.2 ms p50 · L40S, two-way, 텍스트 100–300토큰·1질문DI 0.3 text 63.21 / vision 69.87점 · H2O 자체 실행. 앞의 속도는 짧은 텍스트 조건.한국어별 평가·지원 명세 미확인지원 확인
vLLM-SR Decision 1.0 · Lux-9B로컬 실행: 호출료 없음 / 장비·전력 별도확인한 발표에서 비교 가능한 절대 수치 미확인54과제·3,766결정의 가중 점수 76.94 · 개발팀 측정. DI와 다른 척도.한국어별 평가·지원 명세 미확인텍스트용
Strands Decider · 2B로컬 실행: 호출료 없음 / 장비·전력 별도115 ms 중앙값 · RTX 3090, 프로젝트 설명; 이미지 속도로 일반화하지 않음JevBench 평가 제공. 릴리스별 모델 카드 확인, 다른 학습 실험의 점수를 대표값으로 사용하지 않음.한국어별 평가·지원 명세 미확인지원 확인

작은 MNIST 실험이면 API 비용은 어느 정도일까요?

가정: 10,000회 요청 × 요청당 청구 입력 1,000토큰 = 1,000만 토큰. 이때 입력 요금만 계산하면 아래와 같습니다. 실측 견적이 아니라 단가를 이해하기 위한 계산이며, 이미지 토큰·재시도·캐시·세금·결제 수수료에 따라 달라집니다.

$0.10pplx Flash v1.2
$0.20pplx v1.2 / d1
$0.38Clef-flash
$0.42Jev 1.14
$1.00OpenAI Decisions · 캐시 없음
$2.40Clef

가격 출처는 위 표의 모델별 링크입니다. Perplexity Flash는 한 요청에 여러 질문을 넣으면 state를 질문마다 다시 과금합니다. 단일 질문 기준 계산을 다중 질문 요청에 그대로 적용하지 마세요. 공식 과금 규칙 ↗

또한 ‘1,000장 × 현재값 10개’의 정적 행동 평가는 10,000개 판단이지만, 매 이동을 API로 다시 호출하는 실시간 rollout은 호출이 더 많아질 수 있습니다. 그림이 작아도 서비스가 내부적으로 확대해 토큰화할 수 있습니다.

추천 / 이 MNIST 실험에 적용하기

기준 모델을 유지하고, 작은 공개 모델과 API를 하나씩 비교하세요

추천 순서는 이 실험의 그림 + 현재 숫자 → −1 / 0 / +1이라는 목적에 맞춘 판단입니다. 아래 후보들의 MNIST 성능을 새로 측정한 것은 아닙니다.

먼저 현재 모델이 비교 기준입니다.

저장된 Qwen3.5-0.8B + 판단부·LoRA 실험은 공식 MNIST test의 첫 1,000장, 현재값 10개로 만든 10,000개 판단에서 행동 정확도 97.70%, 에피소드 성공률 93.62%를 기록했습니다. RTX 5070 Ti Laptop 12GB에서 단건 p50 93.33 ms, p95 97.97 ms입니다. 이미지를 미리 읽고 리사이즈했으며 모델 로딩·디스크·네트워크는 제외한 수치입니다. 한국어 조건은 측정하지 않았습니다.

저장된 평가 결과 · 속도 측정 조건 · 원래 장비·실행 환경

1순위 · 작은 공개 모델 비교

d1-3B

이미지를 직접 받고 공개 가중치가 있어, 현재 0.8B 모델과 ‘학습하지 않은 범용 판단 모델’을 비교하기 좋습니다. 개발사 자료에 이미지 입력 속도 조건까지 있어 측정 계획을 잡기 쉽습니다. 다만 4090의 17 ms를 현재 노트북의 예상 속도로 쓰면 안 됩니다.

먼저 공식 런타임으로 추론만 비교하고, 추가 학습은 별도 단계로 두세요. 기존 Unsloth 코드에서 이름만 바꿔 그대로 학습할 수 있다고 확인된 것은 아닙니다.

이미지 지원·공개 모델 자료 ↗
2순위 · 4B 공개 모델 비교

H2O-Lightning-4B

Qwen 기반 멀티모달 판단 모델이라는 점에서 현재 실험과 비교할 가치가 있습니다. Apache-2.0이며 이미지 판단 평가도 공개되어 있습니다. 다만 권장 실행은 전용 vLLM 빌드·shim을 사용하므로 현재 환경보다 설치와 검증 작업이 큽니다.

Windows·12GB에서 실행 가능 여부는 정밀도와 런타임까지 확인해야 합니다. 파라미터 수만으로 메모리에 들어간다고 단정하지 않습니다.

실행 조건·이미지 평가 ↗
3순위 · 설치 없이 API 비교

pplx-Decider Flash v1.2 → Clef-flash

둘 다 이미지 입력이 확인되어 있습니다. 요청당 행동 질문 하나라면 Flash v1.2의 입력 단가가 낮아 첫 API 비교 후보로 적합합니다. Clef-flash는 이 튜토리얼에서 다룬 계열과의 연결을 확인하는 비교군입니다.

복잡한 오답이 남으면 pplx 27B나 OpenAI Decisions를 추가해 보세요. 이것은 단가와 연결 편의에 따른 추천이며 정확도 우승 모델을 정한 것은 아닙니다.

Perplexity 이미지·요금 · Clef-flash 이미지·요금 ↗
추가 실험 · 학습 구조를 비교할 때

Strands Decider 2B, 그리고 CNN 기준선

Strands는 vision 옵션과 학습 코드가 있어 ‘판단부를 어떻게 학습하는가’를 비교하는 후보입니다. 이미지로 학습하지 않은 체크포인트의 시각 능력을 사용하는 방식이므로 전용 MNIST 학습과 구분하세요.

숫자 인식 자체만 평가하려면 작은 CNN으로 숫자를 예측하고 코드로 sign(예측 숫자 − 현재값)을 계산하는 기준선도 넣으세요. 이미지 인식에서 틀렸는지, 행동 규칙을 적용하다 틀렸는지 나눠 볼 수 있습니다. CNN 성능은 아직 측정하지 않았습니다.

Strands의 vision 지원 ↗

이번 이미지 실험에서 우선순위가 낮은 모델

Laya·laya-ko·GLiNER2.5-Decide는 텍스트 판단용이어서 이미지를 직접 넣는 비교군으로 적합하지 않습니다. OCR이나 다른 숫자 인식기를 앞에 붙이면 ‘인식기 + 판단 모델’이라는 다른 실험이 됩니다. Parallel의 웹 검색도 MNIST에는 필요하지 않습니다. Clef 27B·공개 pplx 27B는 비교용 API로는 쓸 수 있지만 현재 12GB 노트북에서 첫 로컬 후보로 삼기에는 부담이 큽니다.

한국어 비교는 이렇게 추가하면 됩니다

같은 이미지·현재값·선택지 ID를 두고 질문과 설명만 영어/한국어로 바꿉니다. 예: “현재 숫자는 3입니다. 그림의 숫자에 한 칸 가까워지도록 행동을 고르세요. 같을 때만 멈추세요.” 한국어로 보낸다고 정답 숫자를 state에 써 넣으면 안 됩니다.

  1. 같은 테스트를 사용합니다.

    저장된 1,000장과 현재값 0–9를 동일하게 쓰고, 추가학습은 test 그림과 분리합니다. 입력 리사이즈·선택지 순서·모델 버전을 기록합니다.

  2. 정확도와 종료 성공을 따로 측정합니다.

    행동 정확도, rollout 성공률, 잘못 멈춤·순환 비율을 함께 봅니다. 0.1의 확률을 붙여 틀리는 것과 0.99로 자신 있게 틀리는 것도 구별해 NLL/Brier 등을 기록합니다.

  3. 속도는 실제 사용 경로에서 잽니다.

    API는 이미지 인코딩과 네트워크를 포함한 p50/p95, 로컬은 전처리 포함 단건과 배치 처리량을 따로 기록합니다. 오류·재시도를 제외한 예쁜 수치만 보고하지 않습니다.

  4. 한국어의 영향을 수치로 봅니다.

    한국어 정확도 − 영어 정확도의 %p 차이와 두 언어의 행동 불일치율을 구합니다. 차이를 해석할 때 같은 그림의 10개 상태는 서로 연관되어 있으므로 신뢰구간은 이미지 단위로 묶어 계산합니다.

지금 추가한 것은 자료 기반 비교와 실험 추천입니다. 유료 API 호출, 새 모델 다운로드·학습, 한국어 성능 측정은 실행하지 않았습니다.

04 / Clef 이해하기

Clef는 ‘질문별 선택지에 점수를 매기는’ 공개 모델입니다

Clef는 Qwen 기반 모델이 입력을 읽은 뒤, joint schema head라는 판단부가 질문과 허용된 선택지의 점수를 계산하는 구조입니다. 각 질문의 점수를 확률로 바꿉니다. 자유로운 설명 문장을 먼저 생성할 필요가 없습니다.

상황 + 질문
텍스트·이미지 등
→
Qwen 기반 모델
입력의 표현 계산
→
판단부
선택지별 확률

확인한 모델 카드에서 Clef는 Qwen3.8-27B 기반이며, 가중치와 판단부 구현을 Apache-2.0으로 공개합니다. 더 작은 변형이 Clef-flash입니다. 사용 시점의 정확한 모델 구성과 조건은 각 모델 카드를 기준으로 확인하면 됩니다. 모델 카드 ↗

‘Clef 방식 head’와 ‘Cloudflare/Clef 완성 모델’을 구분하세요.

우리 실험은 더 작은 Qwen3.5-0.8B에 새 판단부를 붙였습니다. 구조를 활용했다고 해서 Cloudflare 모델의 사전학습 결과·성능·보정 특성이 그대로 옮겨오는 것은 아닙니다.

또한 ‘Jev API 호환’은 질문과 응답을 비슷한 형식으로 주고받을 수 있다는 뜻입니다. 서버 주소, 인증, 응답을 감싸는 구조와 실제 확률값까지 동일하다는 뜻은 아닙니다. Workers AI 사용 안내 ↗

05 / Unsloth 기능 지도

모델을 고르고, 학습하고, 저장하고, 실행하는 도구

Unsloth는 특정 모델 한 개의 이름이 아닙니다. Python 코드로 사용하는 학습 프레임워크가 있고, 화면에서 모델 실행과 학습을 다루는 Desktop 앱도 있습니다. 공식 소개 · Desktop 기능 ↗

기능무엇을 할 수 있나요?이 실험에서는?
모델 로딩·추론지원하는 언어·비전 모델을 불러와 로컬에서 실행Qwen VLM과 processor 로딩
LoRA / QLoRA일부 추가 가중치를 학습하고, 양자화 로딩으로 메모리 사용을 줄이는 방식 지원4bit 기반 모델 + LoRA 학습
전체 미세조정·사전학습지원 모델과 환경에서 더 넓은 범위의 가중치를 학습사용하지 않음
GRPO·DPO 등보상이나 선호 데이터로 학습하는 절차 지원사용하지 않음. 여기서는 정답 행동을 준 지도학습
Decision model 학습새 판단부 부착, 정답 데이터 변환, 학습, 평가와 확률 보정핵심 기능. 다음 API 절에서 설명
저장·내보내기어댑터 저장, 지원 경로에서 병합·GGUF 등의 배포 형식 활용LoRA와 판단부를 저장하고 다시 로딩
로컬 Decision APIDesktop에서 Laya·Clef 등으로 호환 HTTP API 제공본 실험에서는 직접 Python 호출

기능 근거: 프로젝트 README · RL 안내 · GGUF 저장 · Decision API

‘Unsloth가 지원한다’와 ‘모든 모델에서 모든 조합이 된다’는 다릅니다. 예를 들어 이 저장소에 보존된 decision API 구현은 8bit 로딩을 거부합니다. Laya와 Clef 계열도 4bit 지원 경로가 다릅니다. 일반 LLM용 내보내기 설명만 보고, 사용자 정의 판단부까지 아무 추론 엔진에서나 실행된다고 가정하면 안 됩니다. 실험 당시 구현 확인 ↗

06 / API 공통 언어

state는 판단할 자료, questions는 판단할 기준입니다

예를 들어 ‘비밀번호 재설정 메일이 도착하지 않는다’는 문의가 들어왔다고 합시다. 이것이 state입니다. 어느 팀이 맡을지, 장애 가능성이 있는지, 업무 영향이 얼마나 큰지를 questions에 담습니다. 질문의 ID는 직접 정합니다.

질문 타입질문의 모양응답에서 읽을 값
choice여러 선택지 중 하나. criteria는 선택지 ID → 설명choice, 선택지별 probabilities, confidence
noul‘이 문의는 계정 접근 문제인가?’ 같은 하나의 yes/no 질문noul: yes일 확률, 0~1
score낮음에서 높음 순으로 설명한 단계 목록score, 단계별 probabilities, legend, confidence

타입별 명세: Choice · Noul · Score

score 1.4는 ‘정답일 확률 140%’가 아닙니다

세 단계가 있으면 단계 번호는 0·1·2입니다. 확률이 0.1·0.4·0.5라면 점수는 0 × 0.1 + 1 × 0.4 + 2 × 0.5 = 1.4입니다. 단계 위치의 가중 평균이므로 소수가 될 수 있습니다. 등급 설명이 달라지면 같은 1.4의 의미도 달라집니다.

probability와 confidence도 같은 필드가 아닙니다

‘기술팀’ 선택지의 확률과 응답 전체의 confidence는 구분해서 읽습니다. 특히 Unsloth의 Laya 서빙과 Jev는 confidence 계산이 달라 기존 임계값을 그대로 옮기면 안 됩니다. 동일한 업무 자료에서 다시 평가해야 합니다. 호환 API의 차이 ↗

이미지와 Box 같은 타입도 있나요?

현재 TypeSafe 문서에는 이미지 입력과 이미지 안의 영역을 반환하는 Box 타입도 별도로 있습니다. 확인일 기준으로 둘 다 실험 기능이며, 사용하려면 TypeSafe-Danger-Zone-Images: true 헤더가 필요합니다. 위의 세 타입은 이 글의 공통 입문 범위입니다. 이미지 전송 형식과 지원 모델은 전용 문서를 확인해야 하며, Python의 PIL 객체를 HTTP JSON에 그대로 넣을 수는 없습니다. Images · Box

07 / 원격 모델 호출

Jev와 Clef에 같은 질문을 보내보는 코드

아래는 요청 형식을 설명하기 위해 새로 작성한 Python 예제입니다. requests 패키지와 해당 서비스의 API 키가 필요합니다. 이 페이지에서 실제 API를 실행하거나 키를 입력받지는 않습니다.

① 먼저 질문을 정의합니다

공통 예제 · Python
state = "I cannot sign in because the password reset email never arrives."
questions = {
    "route": {
        "type": "choice",
        "instructions": "Select the team best suited to resolve this request.",
        "criteria": {
            "account": "Sign-in, account access and password recovery",
            "payment": "Charges, receipts and payment methods",
            "other": "Requests outside account access and payments"
        }
    },
    "access_issue": {
        "type": "noul",
        "instructions": "The user is unable to access their account."
    },
    "impact": {
        "type": "score",
        "instructions": "Assess how much the issue blocks the user's work.",
        "criteria": [
            "Work can continue without any interruption",
            "Some work is blocked but an alternative is available",
            "The user cannot proceed and no alternative is stated"
        ]
    }
}

선택지 ID는 코드가 읽을 값이고, 설명은 모델이 의미를 판단할 기준입니다. ‘1, 2, 3’만 적기보다 각 단계가 어떤 상황인지 설명하는 편이 좋습니다. 위 영어는 예제 입력이며 한국어 설명문과는 별개입니다.

② Jev REST API로 보냅니다

앞의 state·questions에 이어서 실행
import os
import requests

response = requests.post(
    "https://api.typesafe.ai/v1/systemone",
    headers={"Authorization": "Bearer " + os.environ["TYPESAFE_API_KEY"]},
    json={"model": "jev-latest", "state": state, "questions": questions},
    timeout=30,
)
response.raise_for_status()
result = response.json()
route = result["answers"]["route"]
print(route["choice"], route["probabilities"])
print(result["answers"]["access_issue"]["noul"])
print(result["answers"]["impact"]["score"])

requests.post(..., json=...)가 JSON 직렬화와 Content-Type 설정을 처리합니다. 결과는 answers 아래에 요청한 질문 ID로 돌아옵니다. jev-latest는 바뀔 수 있는 별칭이므로 실험 기록에는 응답의 model 값도 남기고, 재현이 필요하면 계정에서 제공되는 고정 버전을 선택하세요. HTTP 요청·응답 출처 ↗

Python SDK를 쓰면 어떻게 달라지나요?
# 설치: pip install typesafe-sdk
# 위에서 정의한 state, questions를 재사용합니다.
from typesafe_sdk import TypeSafeClient

with TypeSafeClient(timeout=30) as client:
    result = client.system_one(
        model="jev-latest", state=state, questions=questions
    )
    print(result.answers["route"].choice)

SDK는 TYPESAFE_API_KEY 환경변수를 읽고 타입이 있는 응답 객체를 반환합니다. HTTP의 딕셔너리 접근과 SDK의 속성 접근을 섞지 마세요. 기본 재시도 정책도 제공합니다. 클라이언트 명세 ↗

③ Clef를 Cloudflare Workers AI로 호출합니다

같은 질문 · 다른 서비스 주소와 인증
import os
import requests

account_id = os.environ["CLOUDFLARE_ACCOUNT_ID"]
url = (
    "https://api.cloudflare.com/client/v4/accounts/"
    + account_id + "/ai/run/@cf/cloudflare/clef"
)
response = requests.post(
    url,
    headers={"Authorization": "Bearer " + os.environ["CLOUDFLARE_AUTH_TOKEN"]},
    json={"model": "clef", "state": state, "questions": questions},
    timeout=60,
)
response.raise_for_status()
body = response.json()
if not body.get("success", False):
    raise RuntimeError(body.get("errors"))
print(body["result"]["answers"]["route"]["choice"])

Cloudflare REST API는 바깥쪽에 success·errors·result를 둡니다. Workers 내부의 env.AI.run() 예제와 응답 접근 경로가 다릅니다. 모델 식별자와 해당 계정의 Workers AI 권한도 필요합니다. Clef 사용법 · REST 응답 형식 ↗

요청 실패는 어떻게 읽나요?

TypeSafe에서 401은 인증, 422는 질문 형식 등의 검증 오류입니다. 429는 호출량 제한, 529는 일시적 과부하이므로 간격을 늘리며 재시도합니다. 위 REST 예제는 최소 형태라 자동 재시도를 구현하지 않았습니다. 오류 코드와 재시도 ↗

08 / 직접 모델 학습하기

Unsloth에서는 Python 객체를 직접 다룹니다

여기부터는 웹 서버에 JSON을 보내는 API가 아닙니다. 내 컴퓨터 메모리에 모델을 올리고 학습하는 함수입니다. 아래 표와 코드는 최신 문서의 변화를 섞지 않도록, 이 저장소에 보존된 실험 당시 구현을 기준으로 설명합니다.

호출중요한 인자결과와 역할
FastDecisionModel.from_pretrained()model_name, max_seq_length, load_in_4bit, dtype(model, tokenizer 또는 processor). 로딩과 판단부 구성
get_peft_model()model, r, lora_alpha, lora_dropoutLoRA 학습을 준비한 모델
build_dataset()rows, processor, model(items, report). 입력 변환 및 누락·잘림 보고
DecisionTrainer()model, processing_class, train_dataset, args, head_learning_rate학습 관리자. train()으로 학습 시작
for_training() / for_inference()model학습·추론에 맞게 모델 모드 전환
evaluate()model, processor, items, batch_size현재 모델의 평가 지표 반환
calibrate()model, processor, items, batch_size온도 보정 설정 갱신과 지표 반환
predict()model, processor, state, questions, images질문 ID → 답. HTTP와 달리 바깥 answers가 없음
model.save_pretrained()저장 폴더학습 결과 저장. 재로딩 후 같은 예제에서 확인

구현 근거: 보존된 decision.py · 실험의 모델 래퍼 · 전체 학습 코드

학습 데이터 한 줄의 모양

images는 실제 PIL 이미지 객체 목록
from PIL import Image

image = Image.open("digit.png").convert("RGB").resize((112, 112))
move_questions = {
    "move": {
        "type": "choice",
        "instructions": "Move one step toward the handwritten digit. Stop only when equal.",
        "criteria": {
            "-1": "Decrease the current number by one",
            "0": "Stop at the current number",
            "+1": "Increase the current number by one"
        }
    }
}
row = {
    "images": [image],
    "state": "The current number is 3.",
    "questions": move_questions,
    "gold": {"move": "+1"}  # 예: digit.png의 정답 숫자가 7일 때
}

gold는 채점용 정답입니다. 실제 데이터에서는 이미지의 정답 숫자와 현재 숫자를 비교해 계산합니다. 위 한 줄만으로 일반화 성능을 학습할 수는 없습니다. 학습·검증·보정·테스트를 나눌 때는 같은 그림에서 만든 여러 현재 상태가 서로 다른 split으로 흩어지지 않도록 이미지 단위로 나눕니다.

학습 → 보정 → 저장의 순서

다음은 흐름을 보여주는 코드입니다. train_rows와 calibration_rows는 앞 형식으로 준비된 서로 다른 이미지의 목록이라고 가정합니다. CUDA·BF16을 지원하는 이 실험의 환경을 전제로 하며, 완전한 실행 절차와 패키지 버전은 재현 안내를 따릅니다.

설명용 학습 골격 · GPU 학습을 자동 실행하지 않습니다
from unsloth import FastDecisionModel, DecisionTrainer
import torch
from transformers import TrainingArguments

model, processor = FastDecisionModel.from_pretrained(
    model_name="unsloth/Qwen3.5-0.8B",
    max_seq_length=1024,
    load_in_4bit=True,
    dtype=torch.bfloat16,
)
model = FastDecisionModel.get_peft_model(
    model, r=16, lora_alpha=16, lora_dropout=0
)
items, report = FastDecisionModel.build_dataset(train_rows, processor, model)
cal_items, cal_report = FastDecisionModel.build_dataset(
    calibration_rows, processor, model
)
for check in (report, cal_report):
    if check["skipped"] or check["truncated"]:
        raise ValueError(check)
if not items or not cal_items:
    raise ValueError("학습·보정 자료가 비어 있습니다.")

FastDecisionModel.for_training(model)
trainer = DecisionTrainer(
    model=model,
    processing_class=processor,
    train_dataset=items,
    head_learning_rate=1e-3,
    args=TrainingArguments(
        output_dir="work/checkpoints",
        per_device_train_batch_size=32,
        gradient_accumulation_steps=1,
        max_steps=600,
        learning_rate=2e-4,
        bf16=True,
        report_to="none",
    ),
)
trainer.train()
FastDecisionModel.for_inference(model)
metrics = FastDecisionModel.calibrate(model, processor, cal_items, batch_size=1)
model.save_pretrained("work/mnist-adapter")

학습률 두 개가 보이죠. learning_rate는 기반 모델 쪽 학습 대상에, head_learning_rate는 판단부에 사용됩니다. 위 골격은 원문의 스케줄러·콜백·중간 검증 설정을 모두 복제하지는 않았습니다. 원문 수치를 재현하려면 train.py와 저장 설정을 함께 사용해야 합니다.

저장한 모델로 답 하나 얻기

앞에서 정의한 image·move_questions 재사용
loaded, processor = FastDecisionModel.from_pretrained(
    model_name="work/mnist-adapter",
    max_seq_length=1024,
    load_in_4bit=True,
    dtype=torch.bfloat16,
)
FastDecisionModel.for_inference(loaded)
answers = FastDecisionModel.predict(
    loaded, processor,
    state="The current number is 3.",
    questions=move_questions,
    images=[image],
)
move = answers["move"]
print(move["answer"], move["probabilities"])
헷갈리기 쉬운 세 가지 응답 접근법

Jev REST: result["answers"]["route"]["choice"]
Jev Python SDK: result.answers["route"].choice
이 실험의 Unsloth: answers["move"]["answer"]

이미지 입력은 멀티모달 기반 모델과 processor가 지원해야 합니다. images 인자만 넣으면 텍스트 전용 모델도 그림을 읽는 것은 아닙니다. 보정 뒤 저장된 온도는 구현에 따라 가중치에 반영될 수 있으므로, 재로딩 후 같은 온도를 임의로 한 번 더 적용하지 않습니다.

09 / 로컬 서비스 연결

Unsloth를 켜 두고, 내 프로그램에서 HTTP로 부를 수도 있습니다

Desktop의 Settings → API → Decision API → Serve requests에서 로컬 서빙을 준비합니다. 문서의 기본 주소는 http://localhost:8888/v1/systemone이며, 키는 같은 설정의 Access tokens에서 확인합니다. 실제 포트는 본인의 설정을 따릅니다. 공식 실행 절차 ↗

앞의 문의 예제 state·questions 재사용
import os
import requests

response = requests.post(
    "http://localhost:8888/v1/systemone",
    headers={"Authorization": "Bearer " + os.environ["UNSLOTH_API_KEY"]},
    json={"model": "laya", "state": state, "questions": questions},
    timeout=60,
)
response.raise_for_status()
print(response.json()["answers"]["route"]["choice"])

UNSLOTH_API_KEY는 이 예제에서 정한 환경변수 이름입니다. 여기에 Desktop에서 만든 토큰을 설정합니다. 로컬의 jev-latest 별칭은 설정에서 선택한 모델로 연결될 수 있습니다. 주소가 로컬이라면 Jev라는 문자열을 넣었다고 TypeSafe의 Jev가 실행되는 것은 아닙니다.

이 사이트의 미리보기 주소인 127.0.0.1:18765는 HTML을 보여주는 서버입니다. 위 Decision API 서버와는 별개이며, 이 페이지를 열었다고 모델 서버가 자동으로 켜지지는 않습니다.

10 / 이해에서 실험으로

벤치마크와 API를 읽을 때 기억할 것

  1. 속도는 무엇을 포함했는지 봅니다.

    모델 계산 시간, 네트워크 왕복, 웹페이지 가져오기까지 포함한 시간은 서로 다릅니다. 제조사별 숫자를 그대로 줄 세우면 비교가 어긋날 수 있습니다.

  2. 좋은 형식과 좋은 판단을 나눠 봅니다.

    항상 유효한 선택지가 나온다는 것은 연결하기 편하다는 장점입니다. 그 선택지가 맞는지, 틀렸을 때 확률도 낮은지는 별도로 확인합니다.

  3. 업무의 작은 결정부터 평가합니다.

    ‘모든 문의를 처리하라’보다 ‘세 팀 중 어디에 보낼까?’처럼 범위가 분명한 질문부터 시작합니다. 그 다음 실제 정답과 혼동 사례, 확률, 응답 시간을 함께 기록합니다.

이번 MNIST 실험은 그 작은 결정을 눈으로 확인하는 예제입니다. 그림 한 장과 현재 상태를 주고, 한 번의 선택과 반복 실행 결과가 어떻게 달라지는지 살펴볼 수 있습니다.

웹 자료 확인: 2026. 10. 30. / API 예제: 문서와 보존된 소스 대조, Python 문법 검사. 원격 유료 API 호출과 GPU 재학습은 실행하지 않았습니다. 모델·패키지 업데이트에 따라 사용 가능 기능과 인자가 달라질 수 있습니다.