Jev: решения вместо текста

Модель, которая не пишет ответы, а принимает решения - да или нет, выбор из вариантов, оценка по шкале - и возвращает вероятности

Jev: решения вместо текста

Jev (TypeSafe) - модель другого класса, чем чат-модели. Она не генерирует текст. Вы даёте ей текст и задаёте вопросы с заранее известными вариантами ответа, а она возвращает готовые значения: вероятность «да», выбранный вариант, оценку по шкале. Парсить ничего не нужно, ответ сразу ложится в if, сортировку или порог в вашем коде.

Быстро

Ответ приходит примерно за секунду, сколько бы вопросов вы ни задали: они обрабатываются параллельно

Дёшево

Тарифицируются только входные токены. Классифицировать обращение стоит доли копейки

Предсказуемо

Ответ всегда из ваших вариантов: модель не придумает значение, которого вы не предлагали

Честно про сомнения

Вместе с ответом приходят вероятности: видно, когда модель уверена, а когда решение лучше отдать человеку

Когда брать Jev, а когда чат-модель

ЗадачаЧто подойдёт
Определить тему, отдел, намерение, язык, тип документаJev
Проверить, есть ли в тексте признак: срочность, жалоба, персональные данные, попытка взлома промптаJev
Оценить по шкале: критичность бага, раздражение клиента, релевантность документа запросуJev
Выбрать, какой модели или обработчику отдать запросJev
Написать ответ клиенту, пересказать, перевести, сгенерировать кодЧат-модель (Chat Completions)
Посчитать, сравнить даты, решить многошаговую задачуОбычный код или модель с рассуждениями

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

Три типа вопросов

ТипВопросЧто возвращает
noulДа или нет?noul: вероятность «да» от 0 до 1
choiceКакой вариант из списка?choice: победивший вариант, probabilities: вероятность каждого, confidence: уверенность
scoreГде на шкале?score: положение на вашей шкале, probabilities по уровням, confidence

В одном запросе типы можно смешивать. Подробно: в гайде «Как задавать вопросы».

Первый запрос

  1. Получите API-ключ: ключ usellm создаётся в личном кабинете. Отдельный аккаунт TypeSafe не нужен.
  2. Отправьте текст и вопросы. В state - текст, который нужно оценить. В questions - ваши вопросы: имя вопроса придумываете сами, под ним же придёт ответ.
curl -X POST "https://api.usellm.ru/v1/systemone" \
  -H "Authorization: Bearer <USELLM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "typesafe/jev",
    "state": "Здравствуйте! Третий день не могу подключить оплату на сайте — платежи клиентов не проходят, мы теряем заказы. Помогите, пожалуйста, срочно.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Клиент сообщает о срочной проблеме?"
      },
      "department": {
        "type": "choice",
        "instructions": "Какая команда должна заняться обращением?",
        "criteria": {
          "billing": "Платежи, счета, возвраты, подписки",
          "technical": "Ошибки, сбои, интеграции, настройка",
          "sales": "Тарифы, покупка, вопросы до оплаты"
        }
      },
      "frustration": {
        "type": "score",
        "instructions": "Насколько раздражён клиент?",
        "criteria": [
          "Спокоен, просто описывает ситуацию",
          "Раздражён, но вежлив",
          "Очень зол, резкие выражения"
        ]
      }
    }
  }'

API совместим с официальными SDK TypeSafe: достаточно указать наш адрес (https://api.usellm.ru, без /v1) и ключ usellm. Вопросы и критерии можно писать по-русски.

  1. Прочитайте ответ:
{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": { "type": "noul", "noul": 0.98 },
    "department": {
      "type": "choice",
      "choice": "billing",
      "confidence": 0.62,
      "probabilities": { "billing": 0.74, "technical": 0.26, "sales": 0.0 }
    },
    "frustration": {
      "type": "score",
      "score": 0.9,
      "confidence": 0.84,
      "legend": {
        "0": "Спокоен, просто описывает ситуацию",
        "1": "Раздражён, но вежлив",
        "2": "Очень зол, резкие выражения"
      },
      "probabilities": { "0": 0.1, "1": 0.9, "2": 0.0 }
    }
  },
  "usage": { "input_tokens": 633, "output_tokens": 73, "cost_rub": 0.0133 }
}
  • is_urgent = 0,98: почти наверняка срочно. В коде это if (noul > 0.8).
  • department = billing, но technical получил 0,26: в обращении есть и оплата, и «не могу подключить». Поэтому confidence всего 0,62 - модель честно показывает, что вариантов два. Такое обращение разумно отдать в биллинг с копией техподдержке.
  • frustration = 0,9 - между «спокоен» (0) и «раздражён, но вежлив» (1), ближе ко второму.

Уверенность: когда действовать автоматически

Вероятности - главное отличие Jev от чат-модели, которая отвечает одинаково уверенным тоном и когда знает, и когда гадает. confidence у choice и score показывает, насколько ответ однозначен: вся вероятность на одном варианте - близко к 1, размазана по нескольким - близко к 0. У noul отдельного confidence нет: сама вероятность и есть сигнал, значение около 0,5 означает «не знаю».

Удобно делить на три зоны и ставить порог по цене ошибки:

УверенностьЧто делать
ВысокаяДействовать автоматически
СредняяДействовать осторожно: попросить подтверждение, пометить для проверки
НизкаяНе действовать: передать человеку или более сильной модели
intent = response.answers["intent"]

if intent.confidence < 0.5:
    route_to_human(message)            # модель сомневается — не угадываем
elif intent.choice == "check_balance":
    show_balance(account_id)           # ошибка дешёвая — хватит умеренной уверенности
elif intent.choice == "approve_transfer":
    if intent.confidence > 0.9:
        confirm_then_execute(account_id)
    else:
        ask_user_to_confirm(account_id)  # ошибка дорогая — переспрашиваем

Конкретные пороги зависят от ваших данных. Начните с осторожных значений, прогоните на своих примерах с известными ответами и подстройте.

Сколько это стоит

  • Тарифицируются только входные токены: ваш state и вопросы. Выходные токены бесплатны.
  • К каждому запросу провайдер добавляет около 280 служебных токенов. Поэтому десять вопросов одним запросом заметно дешевле десяти запросов по одному вопросу: текст и служебная часть оплачиваются один раз.
  • Русский текст занимает больше токенов, чем английский той же длины.
  • Стоимость каждого запроса приходит в usage.cost_rub и видна в истории запросов в личном кабинете. В Python SDK это поле недоступно (SDK его отбрасывает), в TypeScript SDK и при прямом HTTP-запросе - доступно.

Что дальше