API ВЕГА
Jev — модель, которая отвечает вероятностями, а не текстом
Открыть галерею
24 сентября 2026 г.

Jev — модель, которая отвечает вероятностями, а не текстом

Кодинг-агенты вроде Claude Code или OpenCode спрашивают разрешение на каждую команду: bun test, git status, ls src. За сессию набираются десятки таких запросов, и почти все — про безобидные команды. Выключите проверку, и агент получит дорогу к git push --force. Оставите — будете кликать «разрешить» весь день.

Такой вопрос можно делегировать модели Jev от TypeSafe. Но она вообще устроена не так, как привычные LLM: Jev ничего не генерирует, а отвечает на заранее заданные вопросы вероятностями от 0 до 1. И пригодна она не только для кнопки «Approve».

Как это устроено

В запросе к Jev две части. state — данные для оценки: текст тикета, заказ, политика возвратов, команда из терминала. questions — вопросы трёх типов:

  • noul — вопрос «да или нет». Ответ — вероятность «да», число от 0 до 1.
  • choice — выбор одного варианта из вашего списка. В ответе сам вариант, уверенность и вероятность каждого варианта.
  • score — позиция на упорядоченной шкале, которую вы описываете в criteria.

Ответ типизированный, поэтому код ветвится по числу напрямую: if (verdict.confidence >= 0.8). Парсить свободный текст не нужно.

Формулировки вопросов имеют значение. Хороший вопрос — это утверждение, которое либо истинно, либо ложно для данного state: «клиент просит вернуть деньги», «ситуация покрывается политикой». Плохой вопрос — «стоит ли одобрить возврат»: это уже решение, и его должен принимать ваш код по нескольким ответам, а не модель за один раз.

Пример: один запрос, три ответа

В поддержку пришёл тикет: «My checkout page shows a blank screen after I click Pay. I have tried two browsers». Одним запросом спрашиваем у Jev, баг ли это, какой команде отдать и насколько срочно:

Bash
curl https://api.vega.chat/api/v1/decisions \
  -H "Authorization: Bearer $VEGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "typesafe/jev-1.13",
    "state": {
      "customer_tier": "enterprise",
      "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers."
    },
    "questions": {
      "is_bug": {
        "type": "noul",
        "instructions": "Is the customer reporting a software defect?"
      },
      "team": {
        "type": "choice",
        "instructions": "Which team should own this ticket?",
        "criteria": {
          "payments": "Checkout, billing, or payment processing issues.",
          "frontend": "Rendering, layout, or browser compatibility issues.",
          "account": "Login, permissions, or profile issues."
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "How urgent is this ticket?",
        "criteria": [
          "Can wait for the next release",
          "Should be fixed this week",
          "Blocking revenue right now"
        ]
      }
    }
  }'

Ответ из документированного примера:

JSON
{
  "id": "gen-dec-1790015143-AIaTutprXsJ5EwohRSjb",
  "model": "typesafe/jev-1.13-20260917",
  "provider": "TypeSafe",
  "answers": {
    "is_bug": { "type": "noul", "noul": 0.96 },
    "team": {
      "type": "choice",
      "choice": "payments",
      "confidence": 0.67,
      "probabilities": { "payments": 0.78, "frontend": 0.22, "account": 0 }
    },
    "urgency": {
      "type": "score",
      "score": 1.99,
      "confidence": 0.99,
      "probabilities": { "0": 0, "1": 0, "2": 1 },
      "legend": {
        "0": "Can wait for the next release",
        "1": "Should be fixed this week",
        "2": "Blocking revenue right now"
      }
    }
  },
  "usage": { "input_tokens": 476, "output_tokens": 70 }
}

Как это читать. is_bug: 0.96 — почти наверняка дефект; значение около 0.5 значило бы «и так, и так с равной вероятностью», а не «баг средней тяжести». В team.probabilities видно расклад по вариантам: payments 0.78, frontend 0.22. urgency: 1.99 на шкале из трёх пунктов прижалось почти вплотную к «блокирует выручку прямо сейчас». В usage видно, сколько токенов ушло на запрос — здесь меньше пятисот входных.

Обратите внимание на поле model: отправляли typesafe/jev-1.13, а ответил датированный снапшот typesafe/jev-1.13-20260917. Так и задумано — версия резолвится в конкретный релиз в момент запроса.

Почему не обычная LLM

Чат-модельJev
ОтветСвободный текст, нужно парситьТипизированное значение
УверенностьЧисла нетprobability и confidence от 0 до 1
Решение в кодеЗависит от промптаПорог на числе

Поэтому её вызывают на каждый элемент потока: каждый комментарий, каждый вызов инструмента, каждый черновик ответа.

Где применяют

Автоодобрение команд в агентах

Хук отправляет Jev команду, задачу и путь к проекту с двумя вопросами: «команда обратима и не выходит за пределы проекта?» и «это разумный шаг к задаче?». Автоодобрение — только если обе вероятности выше 0.9. До модели срабатывает статический список опасного: rm -rf, форс-пуши, деплои, файлы с креденшелами — такие команды к Jev вообще не доходят. Любая ошибка или таймаут означают «оставить обычный промпт», так что сбой превращается в лишний вопрос пользователю, а не в выполненную команду. Рецепт описан для OpenCode, Claude Code, Codex CLI и Cursor; для OpenCode есть готовый плагин Jevvy.

Каскад с проверкой ответа

Схема для RAG-поддержки: дешёвая модель пишет черновик по выдержкам из базы знаний, Jev сверяет черновик с этими выдержками и выносит вердикт — supported, unsupported или declined. Дорогая модель переписывает ответ только при провале проверки. На бенчмарке из 50 вопросов каскад дал те же ноль ошибок, что и прогон всего потока через топовую модель, при этом большинство вопросов до эскалации вообще не дошло.

Контроль вызовов инструментов

Вместо правила «каждый вызов refund показать человеку» Jev смотрит тикет, заказы и текст политики и отвечает на три вопроса: клиент просил возврат? речь о том заказе? ситуация покрывается политикой? Дальше пороги в коде: approve — инструмент выполняется, block — агент получает отказ с причиной, review — пауза для человека. Человек видит только спорные вызовы, а каждое решение остаётся в аудит-логе с объяснением.

Пакетная классификация

Один запрос возвращает категорию (вопрос choice) и вероятность каждого тега (по noul на тег). Пороги по тегам подбирают на небольшой размеченной вручную выборке, а не из круглого числа. В документированном примере так размечали датасет TweetTopic из 550 твитов. Та же схема работает для триажа комментариев с Reddit и YouTube: вероятность релевантности теме плюс тональность, и на выходе решение — записать, отдать человеку или игнорировать.

Как попробовать через API ВЕГА

  1. Получите ключ в личном кабинете.
  2. Отправляйте запросы на POST https://api.vega.chat/api/v1/decisions. Работает и https://api.vega.chat/api/alpha/decisions — этот путь повторяет оригинальный адрес метода, поэтому если код уже рассчитан на такой base URL, достаточно поменять домен и ключ.
  3. Если у вас код на TypeSafe SDK (@typesafe-ai/sdk или typesafe_sdk), укажите baseURL: 'https://api.vega.chat/api' — SDK сам добавит /v1/systemone. Либо задайте переменные TYPESAFE_BASE_URL и TYPESAFE_API_KEY с ключом VEGA.

В запросах указывайте typesafe/jev-1.13, а если нужна всегда свежая версия — алиас ~typesafe/jev-latest. В TypeSafe SDK можно писать короткие id: jev-1.13 или jev-latest. Страница модели в нашем каталоге: api.vega.chat/aimodels/jev-1.13.

[!NOTE] Jev — не чат-модель. Если отправить её в /chat/completions, API вернёт ошибку wrong_endpoint с подсказкой использовать /api/v1/decisions.

Где можно ошибиться

  • Jev видит только state. Команда cat ~/.aws/credentials выглядит для неё как обычный cat, если имя файла не попало в ваш список рисков. Граница безопасности — статические правила до модели, а не её порог.
  • Confidence — не гарантия. Это мера концентрации распределения ответов, а не оценка «безопасно ли выполнить действие». Порог выбирайте исходя из цены ошибки на размеченных примерах, а не из круглого числа.
  • Deny-правила важнее хуков. Во всех четырёх агентах deny-список хоста нельзя переопределить из хука — оставьте там всё, что не должно выполняться никогда.

Комментарии

0/5000

Поддержка Markdown