Классификация вместо генерации: System One-примитивы в AI-агентах
Мы заставляем модель за $15 за миллион токенов генерировать текст там, где коду нужно бинарное решение. Надо ли выполнять rm -rf, пропускать ли чанк в контекст, в каком порядке обходить граф зависимостей: на все эти вопросы агент отвечает генерацией, потому что так устроен стандартный пайплайн. Примерно в 90% вызовов генерация не нужна, но оплачивается полностью.
Мы на этом спотыкаемся каждый день. Задержка, стоимость токенов и валидация JSON-схем ломаются в одном месте: попытка заставить LLM выдать строгое «Да» или «Нет». Structured output задаёт форму ответа, но не отменяет регрессию при генерации, и модель по-прежнему предсказывает токены по одному, платя за каждое предсказание.
Инженерия решений заменяет инженерию генерации.
System One-модели вроде Jev от TypeSafe AI делят агента на два контура. Простые и критичные операции уходят в быстрые вероятностные примитивы, посчитанные на одном forward pass, а медленное рассуждение остаётся там, где нужно семантическое. Ниже разбираем анатомию Jev, его базовые типы (Choice, Score, Noul) и четыре кейса, где каскад из System One и System Two срезает до 80% бюджета на API.
Отсюда и практический вывод: хороший агент отличается от плохого не длиной промпта, а тем, сколько вычислений он тратит впустую.
Анатомия примитивов Jev
Текстовый инференс избыточен для задач управления логикой. Обычная LLM генерирует токен за токеном, пересчитывая матрицу внимания на каждом шаге. Вопрос «безопасен ли этот SQL-запрос» превращается в строку {"safe": true}, которую бэкенд потом разбирает регулярным выражением или валидатором Zod. Терафлопсы тратятся на предсказание текстовых символов, а не на смысл ответа.
Ограничение. Jev бесполезен там, где нужна генерация: написать текст, код или реплику диалога он не может, механизма вывода токенов у него нет. Семантический синтез и многошаговый вывод остаются за классическими LLM и reasoning-моделями уровня o1 или DeepSeek-V3.
Jev классифицирует по распределению логитов за один прямой проход. Модель берёт контекст (промпт плюс состояние системы) и возвращает вектор вероятностей для заранее описанных примитивов, а не текст. Дальше с ними работает код. Пороги и примитивы нужно версионировать, логировать и катить как код. Разработка MLOps-платформ.
Три типа покрывают почти все решения в агенте:
- Noul (вероятностный boolean). Число от 0.0 до 1.0 для бинарной развилки в коде (if / else).
- Choice (категориальный выбор). Один вариант из N, до 255 опций. Модель не может придумать свой вариант: на выходе индекс массива и confidence score.
- Score (порядковая шкала). Оценка по заданной шкале, например от 1 до 5. Фильтрация, скоринг токсичности, ранжирование по релевантности.
// Концептуальный пример интеграции примитива Jev в TypeScript
import { JevClient, types } from "@typesafe-ai/jev";
const jev = new JevClient({ apiKey: process.env.JEV_API_KEY });
// Вызов за один forward pass (время выполнения ~45ms)
const securityDecision = await jev.classify({
input: "DROP TABLE users; --",
schema: types.Noul({
instruction: "Is this string a destructive database operation?",
}),
});
console.log(securityDecision.probability); // Выведет значение близкое к 0.998
Выходных токенов нет, поэтому, по данным вендора, инференс стоит фиксированные $0.042 за миллион входных токенов, в 400 раз дешевле GPT-4o. Задержка падает с типичных 1200–3000 мс до 40–70 мс. Ошибки формата уходят вместе с токенами: невалидный JSON, нарушенная схема и не предусмотренный кодом ответ — не те режимы, в которых модель вообще что-то пишет. Стоимость инференса считается и режется на уровне инфраструктуры: кэш, батчи, маршрутизация. Проектирование ИИ-инфраструктуры и RAG.
Четыре кейса и каскадная архитектура
Jev в пайплайне работает как первичный фильтр, а не основная модель. Сырой запрос сначала идёт через быстрый фильтр, ветвление остаётся в коде бэкенда, а генеративная модель подключается только там, где нужен синтез.
Ограничение. Jev чувствителен к структуре входного контекста и ошибается на «отравленном» или противоречивом тексте (adversarial prompt injection) внутри входных данных. Причинно-следственные связи он не разбирает. Его работа — поверхностная, зато мгновенная оценка паттернов, и проектировать под него систему глубокого понимания нельзя.
Четыре кейса, где это окупается.
Матрица архитектурных решений на базе Jev
| Применение | Что подается на вход (State) | Примитив Jev | Конечный выхлоп для системы (Next Action) |
|---|---|---|---|
| 1. Роутер моделей в каскадах | Запрос пользователя + метаданные текущего сеанса. | Choice (Категория сложности от 1 до 5) | Экономия токенов. Запросы 1–3 обрабатываются локальной быстрой моделью, запросы 4–5 уходят в System Two (o1/DeepSeek). |
| 2. Риск-гейт для CLI-команд | Сгенерированный воркером bash-скрипт + манифест безопасности. | Noul (Вероятность деструктивной мутации) | Защита инфраструктуры. При вероятности < 0.15 — автовыполнение. Серая зона 0.15–0.85 — пуш в Telegram-бот (HITL). Выше 0.85 — жёсткая блокировка. |
| 3. Защита от зацикливания (Stuck Checks) | Исходная цель + история последних 3-х итераций воркера + логи ошибок. | Noul (Находится ли агент в бесконечном цикле?) | Прерывание сессии. При true система принудительно останавливает агента, сбрасывает кеш и меняет стратегию планирования. |
| 4. Отсечение контекста RAG (Triage) | Поисковый запрос пользователя + сырой текстовый чанк из базы данных. | Score (Релевантность чанка по шкале 1–5) | Борьба с деградацией контекста. Мгновенное удаление мусорных чанков (оценка < 4) перед формированием дорогого финального промпта. |
Реализация риск-гейта на TypeScript
Кейс №2 в системе автоматического деплоя pi-deploy. Функция проверяет сгенерированный скрипт на критические и деструктивные сайд-эффекты до того, как он выполнится на сервере.
import { JevClient, types } from "@typesafe-ai/jev";
import { pingHumanInTelegram } from "@/shared/lib/telegram";
const jev = new JevClient({ apiKey: process.env.JEV_API_KEY });
interface ExecutionResult {
allowed: boolean;
requiresReview: boolean;
}
export async function validateCommandRisk(generatedScript: string): Promise<ExecutionResult> {
// Вызов Jev за один forward pass (время выполнения ~48ms)
const securityCheck = await jev.classify({
input: generatedScript,
schema: types.Noul({
instruction:
"Does this script contain irreversible or destructive mutations to the file system, database, or network routing?",
}),
});
const riskProbability = securityCheck.probability;
// Ветвление целиком в коде. Пороги задаёт инженер, сдвиг границы
// не требует переобучения модели.
if (riskProbability < 0.15) {
return { allowed: true, requiresReview: false };
}
if (riskProbability > 0.85) {
return { allowed: false, requiresReview: false };
}
// Серая зона: сомнения уходят человеку в Telegram
await pingHumanInTelegram({
script: generatedScript,
riskProbability,
});
return { allowed: false, requiresReview: true };
}
Рассуждения модели вроде «эта команда безопасна, потому что…» разбирать больше не нужно. На входе число, на выходе решение, которое принял код, за 45–50 мс. Задержка в 45–50 мс держится на профилировании рантайма под нагрузкой. Проектирование высоконагруженных бэкенд-систем.
Заключение
System One-контур отделяет быстрые решения от генерации. Jev и похожие модели закрывают бинарные проверки, роутинг и скоринг, генеративные LLM остаются для семантического синтеза и планирования.
Каскадный инференс отсекает простые запросы до дорогой модели; по оценке вендора, это до 80% бюджета на API. Ответ приходит в строгой схеме, Choice, Noul или Score, поэтому невалидный JSON и галлюцинации формата исключены. Семантические ошибки остаются, и управляют ими пороги с калибровкой. Задержка 40–70 мс вместо 1200–3000 мс, и автономный инструмент работает в темпе человека, а не в темпе чата.
Итоговый конвейер выглядит так: System One фильтрует, маршрутизирует и защищает инфраструктуру, System Two включается по запросу. Решение принимает код. Он получает вероятность, индекс или оценку и выбирает действие. Риск-гейт — часть периметра безопасности, а не разовая проверка. Аудит безопасности ИИ-систем.
Поговорите о задаче
Разберём вашу задачу и покажем, что уже работает у клиентов из вашей отрасли.
Оставить заявку