В эпоху генеративных LLM, где модели выдают свободный текст, часто возникает проблема неопределённости формата и галлюцинаций. TypeSafe представила Jev (System One model) — специализированную модель для принятия решений. В отличие от LLM, Jev не генерирует текст. Она принимает контекст и возвращает строго типизированный ответ из заранее заданного набора вариантов, сопровождая его калиброванной вероятностью.
Это инструмент для инженеров, которым нужно маршрутизировать тикеты, классифицировать инциденты или проверять условия, не тратя ресурсы на парсинг JSON и обработку ошибок формата. Jev работает по принципу «быстрого мышления» (System 1 по Канеману): мгновенное сопоставление паттернов.
01Jev против LLM: когда что использовать
Главное различие кроется в выходе (output). LLM идеальны для генерации контента, Jev — для действий.
| Параметр | Генеративная LLM | TypeSafe Jev |
|---|---|---|
| Выход | Токены: текст, код, JSON | Типизированный выбор + распределение вероятностей |
| Гарантия формы | Только с Structured Outputs, но контент может быть неверным | Всегда один из ваших вариантов или yes/no |
| Неопределённость | Скрыта внутри текста | Числа, которые можно использовать для порогов (thresholds) |
| Цена (OpenRouter) | Зависит от модели | $0.042 за 1 млн входных токенов, выход бесплатный |
02Три примитива Jev: Choice, Score, Noul
Запрос к Jev состоит из state (контекст) и объекта questions. Модель обрабатывает все вопросы за один проход. Существует три типа вопросов:
1. Choice (Выбор из фиксированного набора)
Идеально для маршрутизации. Вы задаёте варианты и критерии. Jev вернёт выбранный вариант, вероятность для каждого варианта и общую уверенность (confidence).
Пример маршрутизации тикета в поддержку:
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "My invoice for September shows two charges for the Pro plan. I only have one workspace.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"billing": "Charges, invoices, and refunds",
"technical": "Bugs, outages, and broken features",
"account": "Login, password, and profile changes"
}
}
}
}'Ответ будет содержать поле choice: "billing" и probabilities для всех вариантов. Важно: ID вопроса (ключ team) не передаётся модели, вся семантика должна быть в описаниях критериев.
2. Score (Оценка по упорядоченному уровню)
Используется для оценки severity или приоритета. Вы задаёте массив уровней от низкого к высокому. Jev возвращает взвешенное среднее (score) и вероятности для каждого уровня.
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "Export to CSV fails with a 500 error... We can still download JSON...",
"questions": {
"severity": {
"type": "score",
"instructions": "How severe is this bug report?",
"criteria": [
"Cosmetic; no impact to functionality",
"Broken or degraded feature, but a workaround exists",
"Blocking issue; no workaround exists"
]
}
}
}'В примере выше Jev вернула score 1.15. Это расчёт: 0.85 (вероятность уровня 1) * 1 + 0.15 (вероятность уровня 2) * 2. Максимум уровней — 10.
3. Noul (Вероятность Yes/No)
Самый простой тип. Проверяет истинность утверждения. Возвращает вероятность того, что ответ «Да».
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "I was charged twice for September. Please refund the duplicate charge.",
"questions": {
"refund": {
"type": "noul",
"instructions": "Is the customer asking for money back?"
}
}
}'Ответ: noul: 0.99. У Noul нет отдельного поля confidence, так как вероятность сама по себе является мерой уверенности.
03Как читать вероятности и уверенность
Jev калибрована. Это не просто логиты, а реальные вероятности. Однако:
- Choice: Используйте
confidenceдля фильтрации. Если уверенность низкая, отправляйте тикет на ручной обзор или запускайте LLM для анализа. - Score: Используйте дробные значения для сортировки. Score 1.15 выше, чем 0.9, что позволяет гибко настраивать триггеры эскалации.
- Noul: Порог 0.5 обычно означает «Да», но для бизнес-логики лучше ставить порог выше (например, 0.9) для действий с высокими рисками.
04Доступ, цены и ограничения
Jev доступна через OpenRouter API по эндпоинту /api/alpha/decisions. Модель typesafe/jev-1.13 (актуальная на момент публикации) поддерживает контекстное окно, достаточное для большинства задач классификации документов.
- Стоимость: $0.042 за 1 млн входных токенов. Выходные токены бесплатны.
- Пример стоимости: Запрос с 357 входными токенами обошёлся примерно в $0.000015.
- Open Source: Нет, модель проприетарная.
- Входные данные: Только текст (строки, JSON-объекты, массивы). Изображения и аудио не поддерживаются.
05Кому подойдёт / что запустится
Идеальные сценарии для Jev:
- Автоматическая маршрутизация тикетов в поддержку (Billing vs Tech vs Sales).
- Классификация инцидентов по severity (P0-P4) с учётом обходных путей.
- Проверка соответствия документов политикам (Noul: «Есть ли здесь PII?»).
- Предварительная фильтрация перед отправкой в LLM для экономии токенов.
Что запустится: Любой проект с доступом к OpenRouter API. Требуется только настройка переменной окружения OPENROUTER_API_KEY. Jev не требует специфического железа, так как работает через облачный API, но для локального хостинга она недоступна (не open source).
Источник: OpenRouter ↗