Почему Jev не галлюцинирует — и где всё равно ошибается

Обновлено

TypeSafe утверждает, что Jev не может галлюцинировать. Это правда, но в узком смысле — модель соблюдает форму ответа, а не гарантирует его правильность. Разбираем, какие ошибки исключены, какие остались и как их ловить.

Что TypeSafe называет галлюцинацией

У LLM галлюцинацией называют разные сбои: выдуманные факты, несуществующие категории, сломанный JSON, вызов инструмента с неверными аргументами. В анонсе Jev TypeSafe связывает галлюцинации с типобезопасностью. Выдуманный вызов инструмента в агенте просто раздражает, но в системе с гарантиями задержки или глубоко в цепочке зависимостей такой сбой недопустим.

У Jev возможные ответы и их структура заданы заранее, поэтому модель, по словам компании, не ошибается в типах. На графиках TypeSafe у Jev стоит 0% таких ошибок. Компания сама оговаривает, что это число не измерено: совпадение со схемой гарантировано устройством API.

Для сравнения TypeSafe приводит данные по LLM, собранные через OpenRouter. По пересказу DataCamp, в тесте на структурированный вывод модели OpenAI Luna и Terra ошибались в 0,58% случаев, Claude Opus 5 — в 5,73%, Claude Haiku 4.5 — в 45,5%. В вызовах инструментов хуже всех оказалась GPT-5.6 Sol — 17%. Компания признаёт возможный перекос: через OpenRouter сложные запросы могли чаще уходить к более сильным моделям.

Как такие сбои выглядят на практике, видно в одном из cookbook’ов TypeSafe. Claude Haiku 4.5 вопреки инструкции вернуть только JSON почти каждый ответ оборачивала в markdown-блок, который строгий парсер отвергает. Авторам пришлось писать код, снимающий эту обёртку. С Jev этого класса проблем нет.

Что гарантирует схема

Контракт API исключает целый класс сбоев:

  • ответ на Noul — число от 0 до 1, на Choice — один из ваших ключей, на Score — позиция на вашей шкале;
  • варианта, которого нет в списке, не будет. Если вы задали billing, technical и sales, модель не вернёт legal;
  • не будет текста, объяснений, отказов и сломанного JSON;
  • вероятности вариантов в сумме дают 1;
  • ответ на каждый вопрос приходит под тем же ключом, под которым вы его задали.

Для разработчика это значит, что код разбора, валидации и повторных запросов из-за формата больше не нужен. Как устроены сами типы ответов, рассказываем в статье о примитивах Jev.

Чего схема не гарантирует

Главное — правильности. Jev может уверенно выбрать sales там, где нужен billing. Автор разбора на Хабре формулирует это так: типобезопасность гарантирует форму и множество допустимых ответов, но не фактическую верность. Энтони Майо говорит короче: Jev ограничивает форму вывода, но не суждение.

Отсюда ошибки, которые остаются:

  • Нет правильного варианта. Если верного ответа нет в списке, вероятность всё равно распределится между оставшимися вариантами.
  • Буквальное прочтение. Модель отвечает на то, что написано в инструкции, а не на то, что вы имели в виду.
  • Слабые зоны версии. Для Jev 1.13 TypeSafe сама перечисляет арифметику, подсчёты, сравнение дат, многоступенчатые вопросы и большой state с лишними данными.
  • Враждебный текст. State для модели — данные, но текст, написанный, чтобы подтолкнуть её к нужному ответу, может сдвинуть результат.
  • Знания из весов. TypeSafe советует не полагаться на то, что модель «знает» сама, если актуальные сведения можно передать в state из вашей базы.
  • Завышенная уверенность. Высокий confidence не означает верный ответ: это характеристика формы распределения.
  • Несогласованность между вопросами. Один и тот же вопрос в форме Noul и в форме Choice может получить разные числа — в документации к версии 1.13 это 0,22 и 0,01. Инварианты вроде «да + нет = 1» проверяйте в коде, а не ждите от модели.

Технический директор компании Earendil Армин Ронахер в интервью TechCrunch заметил, что Jev отчасти перекладывает проблему галлюцинаций на пользователя. Решать, что делать с ответом при вероятности 50% и при 95%, должен ваш код.

Ошибки видны и в тестах

Даже во внутренних тестах TypeSafe Jev не безошибочна. Компания проверяла модель на четырёх рабочих сценариях: реагирование на инциденты безопасности, наблюдаемость агентов, обработка счетов и поддержка клиентов. По пересказу Энтони Майо, ответы Jev в среднем совпали с эталоном в 67,8% случаев, у GPT-5.6 Sol — в 74,1%, у Claude Opus 5 — в 73,1%. Самый большой разрыв — на счетах: 61,8% у Jev против 79,1% у Sol.

Эталоном служили усреднённые ответы двух крупных моделей, а не проверенная людьми разметка. Независимые проверки тоже нашли задачи, где LLM точнее, — например, деловые письма и фишинг. Подробности — в сравнении Jev с ChatGPT, Claude и Gemini.

Пример: агент, который не может выдумать кнопку

Границы гарантий хорошо видны на браузерном агенте jev-ultrafast, который разбирает автор статьи на Хабре. Код агента делает снимок страницы и строит список разрешённых действий: клик, ввод текста, выбор из списка, прокрутка, ожидание, завершение. Jev не придумывает CSS-селектор, координаты или команду — она выбирает номер действия из готового списка. Перед исполнением код ещё раз проверяет элемент на странице.

Выдуманного действия в такой схеме быть не может. Но список обрезается до первых 250 элементов, и если нужной кнопки в снимке нет, Jev не выберет её даже при идеальной точности. Модель вернёт валидный ответ — просто не тот, который нужен. За полноту вариантов отвечает ваш код, а не модель.

Как проверять ответы Jev

  1. Размеченная выборка. Прогоните Jev и текущее решение на одних и тех же примерах. Сравните точность, задержку и стоимость всей цепочки, а не одного вызова.
  2. Теневой режим. Сначала логируйте ответы Jev рядом с текущей логикой и ничего не автоматизируйте. Так, например, планирует внедрять модель разработчик Флавио Копес.
  3. Выход для модели. Добавляйте «другое», «ничего не подходит» или «не указано» в каждый Choice, который может не покрыть все входы.
  4. Атомарные вопросы. Один вопрос — одно суждение. Составные условия собирайте в коде.
  5. Пороги по риску. Автоматически действуйте только при высокой уверенности, серую зону отдавайте человеку или LLM. Как подобрать пороги, рассказываем в статье об уверенности Jev.
  6. Проверки в коде. Модель предлагает действие, код решает, можно ли его выполнить: существует ли объект, разрешена ли операция, совпадают ли суммы.
  7. Враждебные тесты. Перед запуском подайте на вход тексты, которые пытаются склонить модель к выгодному их автору ответу.
  8. Версии вместе. Фиксируйте модель, вопросы, критерии и пороги как одно целое и прогоняйте контрольные примеры при любом изменении. Подробнее — в статье о Jev 1.13.

Пункты 3 и 5 в коде выглядят так:

from typesafe_sdk import Choice, TypeSafeClient

with TypeSafeClient() as client:
    r = client.system_one(
        state={"ticket": "Не приходит код подтверждения при входе"},
        questions={
            "team": Choice(
                instructions="Какой команде передать обращение из `ticket`?",
                criteria={
                    "billing": "Оплата, счета, возвраты",
                    "account": "Вход, пароль, доступ к аккаунту",
                    "delivery": "Доставка и статус заказа",
                    "other": "Ни один вариант не подходит",
                },
            )
        },
    )

team = r.choices["team"]
if team.choice == "other" or team.confidence < 0.7:
    send_to_operator()      # вариантов не хватило или модель не уверена
else:
    route_to(team.choice)

Порог 0,7 условный: подберите свой на размеченных данных. Полный список известных слабых мест модели и её технических ограничений собран в статье «Ограничения и минусы Jev».

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

Может ли Jev выдумать ответ, которого нет в списке?

Нет. Ответ всегда один из вариантов, которые вы задали, или число в допустимом диапазоне. Это свойство контракта API, а не статистика.

Значит, Jev всегда отвечает правильно?

Нет. Модель может выбрать неверный вариант из допустимых. Даже во внутренних тестах TypeSafe ответы Jev совпали с эталоном примерно в двух третях случаев.

Как уменьшить число ошибок Jev?

Задавайте атомарные вопросы с чёткими критериями, добавляйте вариант «другое», передавайте в state только нужные данные, считайте арифметику в коде, а ответы с низкой уверенностью отправляйте на проверку.

Источники