← Все материалы

Гайд

Jev: зачем большая нейросеть, если нужно выбрать один вариант?

Jev от TypeSafe для классификации и решений: пример диспетчера обращений в Чатиуме, короткий код Decisions API и отличия от Jev Router.

Обновлено

Сортировка карточек по категориям: данные превращаются в понятную структуру

В поддержку приходит сообщение: «После оплаты курс не открылся». Чтобы отправить его нужному сотруднику, приложению не требуется сочинение на полстраницы. Ему нужен один понятный результат: проблема с оплатой, доступом или что-то другое. Именно для таких задач существует Jev — модель принятия решений от TypeSafe.

В Чатиуме на этой основе можно собрать небольшой диспетчер обращений: форма принимает сообщение, Jev предлагает категорию, а оператор видит очередь и исправляет спорные назначения. Интерфейс, хранение истории и серверная обработка находятся в одном приложении. Начать можно с такого промпта:

Промпт

Создай в Чатиуме диспетчер обращений с Jev. Пусть он предлагает категорию: оплата, доступ или другое. Показывай исходное сообщение и оценку уверенности, а спорные случаи оставляй оператору. Добавь ручное исправление категории и историю решений. Клиентам ничего автоматически не отправляй.

Что именно делает Jev

Вы передаёте состояние задачи — например, текст обращения — и формулируете вопросы. Модель возвращает структурированные ответы, которые программа может использовать в следующем шаге. Для начала полезно различать три типа вопросов:

Тип Что спрашиваем Что получаем
Choice К какой категории относится обращение? Один вариант из заданного набора и вероятности вариантов
Noul Клиент просит восстановить доступ? Вероятность ответа «да»
Score Насколько срочное обращение по нашей шкале? Положение на шкале с заранее описанными уровнями

Это разные операции. «Вероятность срочности» и «степень срочности» нельзя показывать оператору как одно и то же число. В первом случае мы проверяем утверждение, во втором — оцениваем обращение по шкале.

На 24 октября 2026 года актуальная версия в каталоге OpenRouter — typesafe/jev-1.14. В этой статье разбираем её применение к текстовым обращениям. Для рабочего сценария удобно закрепить версию: тогда смена модели станет отдельным проверяемым изменением.

Когда Jev полезнее обычного чат-бота

Представьте три задачи с одним письмом. Первая — выбрать очередь для обработки. Вторая — написать вежливый ответ. Третья — проверить, упоминается ли в письме конкретная проблема. Первая и третья подходят для модели решений; для второй нужен генератор текста.

Задача приложения Что попробовать
Выбрать одну из пяти категорий Jev с понятными критериями Choice
Отметить несколько независимых признаков Несколько вопросов Noul
Написать ответ клиенту Текстовую модель, которой переданы факты и правила
Проверить точную дату, сумму или наличие доступа Обычный код и данные системы
Разобрать неоднозначное обращение Проверку оператором с исходным сообщением

Обычная языковая модель тоже может классифицировать текст и выдавать JSON. Разница здесь в контракте: Jev сразу получает вопросы с ограниченным набором ответов. Но удобный формат ещё не доказывает лучшую точность. Выбор стоит делать по ошибкам на ваших обращениях, задержке и стоимости всего процесса.

Если категории определяются точными правилами — например, по номеру формы или выбранному пользователем продукту, — сначала используйте эти правила. Модель нужна там, где приходится понимать свободный текст.

Пример в Чатиуме: очередь, которую можно исправить

Для первой версии диспетчера достаточно трёх категорий: «оплата», «доступ», «другое». Заранее договоритесь, куда относить пограничные сообщения. Например: если деньги списались, но урок не открылся, обращение сначала получает команда доступа; если списание продублировалось — команда оплаты.

В интерфейсе полезно показывать исходный текст, предложенную категорию, итоговую категорию оператора и время обработки. Отдельно сохраняйте версию модели и версию правил. Иначе через месяц будет трудно понять, почему одинаковые сообщения стали попадать в разные очереди.

Начните с режима рекомендаций: Jev предлагает, оператор подтверждает. История исправлений даст материал для проверки. Если большинство промахов связано с одной парой категорий, перепишите их определения, а не добавляйте ещё десять общих требований в промпт.

Связь с текстовой моделью можно добавить позже. После выбора очереди приложение передаст обращение и подходящую инструкцию генератору черновика ответа. Такой сценарий мы отдельно разбираем в материале про черновики для поддержки.

Почему здесь не подходит обычный startCompletion

У Jev есть важная особенность интеграции: модель решений вызывается через Decisions API с полями state и questions. Это другой формат, чем сообщения чата. Поэтому просто указать typesafe/jev-1.14 в обычном вызове startCompletion недостаточно.

Для доступа через OpenRouter нужен серверный API-ключ OpenRouter. Адрес HTTP API — https://openrouter.ai/api/alpha/decisions. Если среде выполнения нужен сетевой прокси, серверный адрес запроса настраивается с учётом этого маршрута. Ключ и адрес берутся из серверной конфигурации, а не из полей, которые прислал посетитель.

Ниже короткий серверный фрагмент для Чатиума. decisionUrl — настроенный адрес запроса к Decisions API, apiKey — секрет из серверных настроек. Функция показывает сам вызов и проверку выбранной категории; подключение формы и сохранение истории остаются в обработчике приложения.

TypeScript
import { post } from '@app/request'
type Result = { answers?: { topic?: { choice: string; confidence?: number } } }
export async function classify(text: string, decisionUrl: string, apiKey: string) {
  const response = await post<Result>(decisionUrl, {
    model: 'typesafe/jev-1.14', state: text,
    questions: { topic: {
      type: 'choice', instructions: 'Выбери очередь для обращения.',
      criteria: {
        billing: 'Списание, возврат или ошибка оплаты.',
        access: 'Не открывается аккаунт или оплаченный материал.',
        other: 'Другая тема или недостаточно данных.',
      },
    } },
  }, { headers: { Authorization: `Bearer ${apiKey}` }, responseType: 'json', timeout: 8000 })
  const topic = response.body.answers?.topic
  if (!topic || !['billing', 'access', 'other'].includes(topic.choice)) throw new Error('Нет категории')
  return topic
}

Полученный вариант остаётся рекомендацией. При сетевой ошибке обращение сохраняется в общей очереди; при спорном результате его проверяет оператор. В рабочем обработчике также нужны ограничение длины сообщения и проверка прав на просмотр истории.

Jev и Jev Router — в чём разница

Похожие названия легко перепутать. Jev отвечает на заданные вопросы о ваших данных. Jev Router выбирает модель и уровень рассуждения для запроса, после чего вы получаете ответ выбранной текстовой модели.

Поэтому пример классификации выше нельзя механически перенести на typesafe/jev-router. У Router другая задача и другой формат взаимодействия. Его стоимость зависит от модели, которая фактически обработала запрос. Общую схему работы посредника между приложением и моделями разбираем в статье про OpenRouter.

Как проверить, стоит ли его подключать

Возьмите небольшую размеченную выборку реальных обращений. Для первого прогона подойдут, например, 60–100 сообщений: простые случаи, опечатки, короткие реплики и пограничные темы. Это стартовая проверка, а не доказательство качества на любом потоке.

Разделите примеры на две части. На первой уточняйте категории и формулировки вопросов, вторую оставьте для проверки после настройки. Иначе легко получить прекрасный результат на сообщениях, под которые вы уже подстроили правила.

Смотрите не только на долю верных категорий. Важно, сколько сообщений ушло не той команде, сколько осталось оператору и сколько исправлений потребовалось. Отдельно измеряйте задержку и стоимость с учётом повторных запросов. Если меняете версию Jev, прогоните ту же проверочную выборку снова.

Не назначайте универсальный порог уверенности на глаз. Высокая оценка не гарантирует правильность отдельного решения. Для русскоязычного потока особенно полезна собственная проверка: TypeSafe указывает английский как основной язык обучения с наилучшей точностью.

Частые вопросы

Jev умеет писать статьи и код?

Модель решений возвращает ответы на заданные вопросы. Для свободного текста или кода выбирайте генеративную модель. В одном приложении можно использовать обе: Jev выбирает дальнейший шаг, другая модель готовит текст.

Jev бесплатный?

На 24 октября 2026 года карточка Jev 1.14 в OpenRouter указывает $0,042 за миллион входных токенов и нулевую цену выходных. Это не означает бесплатный запрос: входные данные оплачиваются. Итоговую стоимость своего сценария проверяйте по фактическому использованию, включая повторы.

Можно ли отправлять сообщения на русском?

Да, но качество нужно оценить на собственных русскоязычных данных. Включите в проверку сокращения, ошибки и сообщения, в которых несколько проблем смешаны в одной фразе.

Нужно ли вручную писать всю интеграцию в Чатиуме?

Можно начать с промпта в начале статьи и поручить Чатиуму создать интерфейс и серверную часть. Подключение секретного ключа и проверка результата всё равно остаются частью настройки приложения. Сам короткий запрос к API ещё не создаёт очередь и историю.

С чего лучше начать?

С одной задачи с проверяемым результатом: например, предложения категории для входящего обращения. Когда появится история ошибок и исправлений, станет понятно, какие решения можно автоматизировать, а какие лучше оставить оператору.