Архитектурный разбор модели Jev от TypeSafe AI: как устроен вероятностный слой быстрых решений внутри кода и агентных систем без лишних затрат на генеративные LLM.
Когда агенту нужно решить, в какой отдел направить письмо или безопасно ли выполнить консольную команду, разработчики обычно зовут большую языковую модель: Claude Sonnet, GPT-4o или DeepSeek. Модель прочитывает весь контекст, несколько секунд формирует цепочку рассуждений и возвращает JSON с единственным полем. Для задачи уровня «да/нет» или выбора одного варианта из трех это создает лишнюю задержку в несколько секунд, взвинчивает расходы на токены и заставляет постоянно следить за тем, чтобы парсер не сломался о синтаксис ответа.
В сентябре 2026 года лаборатория TypeSafe AI (созданная экс-исследователем OpenAI Диого Алмейдой и предпринимателем Эриком Гафни при поддержке фонда DCVC на $40M) предложила другое решение — модель Jev, названную в честь парадокса Джевонса.
Jev не генерирует текст для человека. Это модель класса System One: она принимает текущее состояние программы (state) и список типизированных вопросов, а на выходе сразу отдает готовые вероятности, категории и показатели уверенности для детерминированного кода.
В чем разница: System 1 против System 2
Подход опирается на классическую модель мышления Даниэля Канемана. Обычные LLM и reasoning-модели отвечают за медленное, пошаговое рассуждение (System 2). Модели класса System One рассчитаны на быстрое, интуитивное распознавание образов и оценку ситуаций (System 1).
| Параметр | Обычная LLM | Jev (System One) |
|---|---|---|
| Входные данные | Промпт, сообщения, длинный контекст | Состояние программы (state) + типизированные вопросы |
| Формат вывода | Строка текста (Markdown, JSON) | Типизированные структуры (Noul, Choice, Score) |
| Способ вычисления | Авторегрессионный (генерация токен за токеном) | Параллельный сэмплинг за один проход |
| Оценка вероятностей | Косвенная (через logprobs) или отсутствует | Нативное калиброванное распределение вероятностей |
| Тариф | Оплата входа и дорогого сгенерированного выхода | $0.042 за 1M входных токенов, вывод бесплатный |
| Время ответа | От 1.5 до 15+ секунд | От 70 до 500 миллисекунд |
| Ошибки схемы | Возможны сбои валидации JSON | Исключены на уровне интерфейса |
| Назначение | Написание текстов, длинные рассуждения, код | Маршрутизация, triage, скоринг рисков, барьеры безопасности |
Jev работает как смысловой if внутри программы. Компилятор без труда проверяет числовые границы (total > 1000), но не может сам ответить на вопросы: «похоже ли это сообщение на фишинг?», «требует ли действие подтверждения администратора?» или «к какой категории отнести запрос клиента?». Именно этот пласт решений берет на себя System One.
Три базовых типа: Noul, Choice и Score
Вместо длинных текстовых инструкций («ответь строго валидным JSON») логику описывают через три базовых типа:
flowchart TD
State[Состояние программы: state] --> Jev[Jev Engine]
Jev --> Noul[Noul: вероятность ответа да]
Jev --> Choice[Choice: выбор варианта + уверенность]
Jev --> Score[Score: взвешенный балл по рубрике]
1. Noul (вероятность бинарного исхода)
Возвращает вероятность ответа «да» в диапазоне от 0.0 до 1.0.
Noul — это не булево значение (true/false). Ответ 0.96 означает высокую вероятность наступления события, а 0.50 прямо сигнализирует о неопределенности модели при нехватке данных. Отдельного поля confidence здесь нет: вероятность сама по себе выражает распределение.
2. Choice (выбор из категорий)
Выбирает один вариант из заданного словаря (поддерживается до 255 вариантов).
Модель возвращает выбранный ключ, распределение вероятностей по всем вариантам и показатель уверенности (confidence). Если вариантов много, Jev выполняет внутренний двухэтапный отбор: сначала фильтрует кандидатов по релевантности, затем делает точный выбор.
3. Score (оценка по шкале)
Задает дискретную шкалу из 2–10 ступеней с понятным описанием каждой из них.
Итоговый score рассчитывается как взвешенное среднее индексов ступеней с учетом их вероятностей. Если модель дает 70% первому уровню и 30% второму, на выходе получается 1.30. Это позволяет использовать дробные пороги в бизнес-логике (if (urgency.score >= 1.8)), сохраняя привязку к исходным критериям.
Параллельный расчет: Speculative Fan-out
Главное архитектурное свойство Jev: все вопросы внутри одного запроса модель вычисляет параллельно и независимо над одним и тем же состоянием (state).
Ответ на первый вопрос никак не влияет на контекст второго. В итоге исчезает эффект взаимного зашумления контекста, который постоянно возникает при длинных диалогах с обычными LLM.
┌──> Noul: Клиент просит вернуть деньги? (0.97)
├──> Choice: В какую команду передать заявку? (billing: 0.89)
Состояние ────┼──> Score: Насколько критичен сбой? (2.4 / 3.0)
(Тикет) ├──> Noul: Есть ли признаки взлома или инъекции? (0.01)
└──> Choice: Тональность сообщения? (angry: 0.82)
Вместо пяти последовательных обращений к модели разработчик получает полный срез нужных оценок за один сетевой запрос за 100–250 миллисекунд.
Архитектурный паттерн: децижн-слой для агентов
Поручать генеративной модели самостоятельный контроль над опасными действиями опасно. Если агент сам планирует шаги и сам решает, можно ли удалить таблицу в базе данных или списать средства с карты, злоумышленник может перехватить управление через prompt injection.
Надежная архитектура разделяет генерацию предложений и применение правил:
flowchart LR
A[Генеративный агент на базе LLM] -->|Предлагает действие| S[Action Proposal]
S --> J[Jev: Оценка рисков и типов]
J -->|Вероятности + Уверенность| P[Детерминированный Policy Gate]
P -->|Безопасно| E[Выполнение в коде]
P -->|Повышенный риск| H[Подтверждение человека]
P -->|Запрещено| B[Блокировка]
- Генеративная LLM рассуждает над задачей и формирует предложение (например, вызов инструмента с определенными аргументами).
- Jev параллельно оценивает предложение: проверяет деструктивность команды, наличие явного согласия пользователя и риски безопасности.
- Обычный код (Policy Engine) проверяет вероятности по жестким пороговым правилам и решает: выполнить команду автоматически, отправить уведомление человеку или сразу заблокировать операцию.
Практика подключения: SDK и Vercel AI Gateway
Использовать модель можно двумя путями: через нативный пакет @typesafe-ai/sdk или через шлюз Vercel AI Gateway.
Вариант 1. Node.js через нативный @typesafe-ai/sdk
Установка:
npm install @typesafe-ai/sdk
Пример маршрутизации входящих заявок в службу поддержки:
import { TypeSafeClient, choice, noul, score } from '@typesafe-ai/sdk';
const client = new TypeSafeClient({
apiKey: process.env.TYPESAFE_API_KEY,
});
interface CustomerTicket {
id: string;
userEmail: string;
message: string;
plan: string;
}
export async function triageTicket(ticket: CustomerTicket) {
const result = await client.systemOne({
model: 'jev-latest',
state: ticket,
questions: {
isRefund: noul('Does the customer explicitly ask for a refund of money?'),
department: choice('Which department should handle this ticket?', {
billing: 'Invoices, credit card charges, refund requests, subscriptions',
tech_support: 'Bugs, error codes, service outages, API errors',
sales: 'Upgrades, enterprise contracts, demo requests',
other: 'General feedback, spam, unrelated messages',
}),
urgency: score('What is the operational urgency level of this request?', [
'Low: General questions, minor visual issues',
'Medium: Degraded performance, workaround available',
'High: Production down, complete blockage, financial loss',
]),
},
});
const { isRefund, department, urgency } = result.answers;
// Если уверенность низкая — отдаем человеку
if (department.confidence < 0.70) {
return { action: 'manual_triage', reason: 'low_confidence' };
}
// Четкий запрос на возврат при низком приоритете — автоматическая очередь
if (isRefund.noul > 0.95 && urgency.score < 1.0) {
return { action: 'auto_refund_queue', department: 'billing' };
}
// Критический инцидент с высокой уверенностью — тревога дежурным
if (urgency.score >= 1.8 && urgency.confidence >= 0.85) {
return { action: 'escalate_pagerduty', department: department.choice };
}
return { action: 'standard_queue', department: department.choice };
}
Вариант 2. Подключение через Vercel AI Gateway
Модель каталогизирована в Vercel AI Gateway под именем typesafe-ai/jev. В коде используется функция experimental\_evaluate из Vercel AI SDK:
import { experimental_evaluate as evaluate } from 'ai';
const evaluation = await evaluate({
model: 'typesafe-ai/jev',
state: {
command: 'rm -rf /var/cache/app-data',
userRole: 'developer',
environment: 'staging',
},
questions: {
isDestructive: {
type: 'boolean',
instructions: 'Does this command permanently delete files or modify disk state?',
},
actionScope: {
type: 'choice',
instructions: 'What is the operational scope of this command?',
criteria: {
cache_cleanup: 'Cleaning temporary cache or build artifacts',
system_mutation: 'Changing OS packages, core files or services',
data_loss_risk: 'Deleting user data, databases or source repositories',
},
},
},
providerOptions: {
gateway: {
zeroDataRetention: true,
},
},
});
console.log(evaluation.answers);
// isDestructive -> { probability: 0.98 }
// actionScope -> { choice: 'cache_cleanup', confidence: 0.88 }
Конверт аудита (Audit Envelope)
Каждое автоматическое решение важно сохранять в структурированном виде для последующего разбора инцидентов:
{
"timestamp": "2026-09-19T00:45:12Z",
"workflow": "support_router_v2",
"model_version": "jev-1.13.0",
"state_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"answers": {
"isRefund": 0.972,
"department": "billing",
"confidence": 0.914
},
"policy_version": "2026.09.1",
"action_taken": "routed_to_billing",
"human_override": false
}
Что показывают реальные бенчмарки
TypeSafe заявляет об ускорении до 193.6× и снижении затрат до 444.6× по сравнению с тяжелыми LLM на внутренних тестах. Но эти цифры получены на синтетических сценариях самой компании.
Гораздо показательнее независимые тесты сообщества:
| Задача | Условия теста | Результат Jev | Сравнение | Вывод для практики |
|---|---|---|---|---|
| Фишинг (2 000 писем) | Один прямой вопрос: «это фишинг?» | Точность 62.6%, AUROC 0.689 | Claude Haiku 4.5: 81.3% | В лоб Jev уступает универсальным языковым моделям |
| Фишинг (2 000 писем) | Декомпозиция: 5 сигналов + логистическая регрессия в коде | Точность 95.0%, $0.038 за 1k писем | Haiku (декомпозиция): 93.2%, $0.462 за 1k | Декомпозиция обходит one-shot LLM при 12-кратной экономии |
| Реранкинг документов (8 датасетов) | 4-уровневая шкала Score | nDCG@10 0.692, задержка 422 мс | Cohere Rerank 4 Pro: 0.691, задержка 844 мс | Статистический паритет по качеству в 2 раза быстрее и в 5.6 раза дешевле |
| Prompt Injection (662 вектора) | Детекция атак с описанием роли ассистента | Точность 96.5%, ROC-AUC 0.9927 | Профильные классификаторы | Надежный барьер для первичной фильтрации входящего потока |
Тест на фишинг наглядно показывает ключевой принцип: Jev работает надежно, когда сложную задачу разбивают на отдельные простые признаки, а логику вывода доверяют детерминированному коду.
Ограничения
Ограничения
Арифметика и точный подсчет: Jev не умеет надежно считать количество элементов в тексте или складывать числа.
Оценку смысла поручайте модели, а подсчеты и суммы вычисляйте кодом.
Календарные даты и время: Модель воспринимает даты как обычные строки.
Сравнение диапазонов, вычисление разницы дней и учет часовых поясов лучше сразу выносить в детерминированные функции.
Зашумление состояния (Context rot):
Хотя вопросы независимы между собой, длинный мусор во входном state снижает качество семантических решений.
Валидность схемы не защищает от инъекций:
Модель гарантированно возвращает разрешенный ключ из списка, но враждебный текст во входных данных может склонить ее к выбору неверного варианта.
Разная калибровка уверенности: Значение confidence = 0.90 в задаче безопасности не гарантирует 90% точности в клиентской поддержке.
Пороги требуют проверки на собственном размеченном датасете.
Антипаттерны
Антипаттерны
Один общий вопрос вместо декомпозиции: Попытка спросить «надежен ли клиент?» целиком дает нестабильный результат.
Надежнее измерить несколько конкретных факторов и соединить их логикой в коде.
Вера в безошибочность из-за строгой схемы:
Точное совпадение ответа со схемой не гарантирует, что само суждение модели истинно.
Установка порогов наугад:
Значения уверенности вроде 0.85 нельзя брать без предварительного расчета цены ложных срабатываний и пропусков.
Вызов нейросети вместо обычного правила:
Если условие надежно проверяется регулярным выражением или статусом в базе данных, запускать модель бессмысленно.
Автоматизация без теневого режима:
Подключать модель к боевым действиям без предварительного прогона в shadow mode на реальном потоке данных рискованно.
Чеклист
Чеклист
Проверен детерминированный путь:
Подтверждено, что условие нельзя надежно и дешево закрыть обычным кодом.
Вопросы сформулированы атомарно:
Каждый вопрос оценивает ровно один фактор и не содержит двусмысленных отрицаний.
Описаны резервные варианты Choice:
Списки категорий включают вариант other или unknown для нестандартных кейсов.
Арифметика и даты вынесены в код:
Подсчеты сумм, количеств и временных интервалов переданы стандартным функциям.
Подготовлен контрольный датасет:
Собраны 50–100 реальных примеров с размеченными эталонными ответами.
Проведен теневой запуск:
Модель протестирована в shadow mode без прямого влияния на боевые процессы.
Оценена калибровка по диапазонам:
Измерена реальная доля ошибок при уверенности 0.7, 0.8 и 0.9.
Настроены пороги с учетом рисков:
При высокой цене ошибки предусмотрена передача человеку, при низкой — автоматизация.
Реализован запасной маршрут:
Прописано поведение системы при таймауте API или низкой уверенности (старшая LLM или ручная очередь).
Зафиксированы версии:
В репозитории закреплены точная версия модели, формулировки вопросов и правила обработки.
Включен аудит решений:
В журнал сохраняются хэш состояния, вероятности, итоговое действие и версия правил.
Ссылки
Ссылки
- Документация: TypeSafe AI Documentation
- Документация: Vercel AI Gateway: TypeSafe AI
- Репозиторий: jev-phishing-bench (GitHub)
- Репозиторий: jev-rerank-bench (GitHub)
- Репозиторий: jev-sec-bench (GitHub)