ДнД с ИИ: классификатор решений вместо текста - тест модели в 6 раз быстрее прода

Jev-1.13 - специализированная модель для решений вместо генерации текста. В тесте на классификации намерений игрока ИИ-мастера DnD она сравнялась по качеству с продовой связкой (gpt-oss-120b + flash-lite), но отвечала в 6,4 раза быстрее - медиана 401 мс против 2573 мс, а при коротких инструкциях вышла в 4 раза дешевле.
Хочешь попробовать это в игре прямо сейчас? Соло-ДнД с ИИ-мастером в Telegram · базовая игра бесплатная.
В прошлый раз я разбирал, почему ход ИИ-мастера оказался в 13 раз дороже, чем показывал счётчик, а потом срезал эту цену на 56%. Оба раза виновником был нарратор - тот, кто пишет тебе художественный текст сцены. Но у ИИ-мастера есть и другая работа, о которой я почти не рассказывал: узлы, где никакого текста писать не надо, надо просто выбрать один вариант из списка. И тут выяснилось, что для этой работы можно взять модель, которая вообще не умеет писать прозу - и получить всё в разы быстрее и дешевле.
Ребят, это ещё проба, не прод. Но цифры интересные, делюсь как есть.
Что такое узлы-решений в ИИ-мастере и зачем для них отдельная модель
Узел-решение - это место в ходе, где ИИ-мастеру не нужно ничего сочинять, а нужно рассортировать: что вообще сделал игрок (movement, атака, проверка навыка, диалог), не сменилась ли сцена, принял ли игрок квест. Разница с нарратором как между диспетчером и писателем: диспетчер не рассказывает историю, он просто раскладывает заявки по ящикам, и делает это быстро, не задумываясь о стиле.
Сейчас все три таких узла - тип действия игрока (intent), смена сцены и принятие квеста - держат обычные генеративные модели: gpt-oss-120b и flash-lite на извлечении сущностей. Работает, но это как сажать писателя-фантаста сортировать почту - справится, но не для этого учился, и берёт за это как за роман. Архитектурную дыру в этой связке узлов я уже однажды откапывал, и с тех пор поглядываю в сторону моделей, заточенных именно под выбор, а не под текст.
Такая модель нашлась - Jev-1.13 от TypeSafe AI, запущена 15 сентября 2026 года. Это не генеративная LLM: она читает состояние и отвечает на типизированные вопросы трёх видов - choice (выбор из вариантов, до 255 штук), score (оценка по шкале до 10 уровней) и noul (да/нет с вероятностью). Прозы на выходе нет вообще, только структурированный ответ с калиброванной уверенностью. Для intent-узла это ровно то, что нужно: игрок написал “бью гоблина мечом”, а на выходе нужен не рассказ, а один из вариантов - movement, атака, проверка навыка, диалог - с пониманием, насколько модель в этом варианте уверена.
Классификация намерений игрока: Jev-1.13 против прода
Проверил на 36 кейсах intent-классификации: 12 эталонных, снятых с живого прода, и 24 придуманных на грани правил - специально пограничные, чтобы модели помучились.
| Метрика | Jev-1.13 (decisions) | Прод (gpt-oss-120b + flash-lite) |
|---|---|---|
| Точность на 36 кейсах intent | 32 точно / 2 допустимо / 2 ошибка | 32 точно / 3 допустимо / 1 ошибка |
| Медиана времени ответа | 401 мс | 2573 мс |
| Цена на полном прод-промпте (~4600 токенов) | на ~60% дороже прода | база |
| Цена на коротких инструкциях (1167 токенов) | в 4 раза дешевле прода | база |
| Confidence у верных ответов (медиана) | 0.97 | - |
| Confidence у ошибочных ответов (медиана) | 0.55 | - |
| Смена сцены + квест, два noul-вопроса за вызов | 12/12 и 12/12, 382 мс | 12/12 и 9/12, 1116 мс |
По качеству - паритет, разница в одну ошибку туда-сюда на 36 кейсах не о чем говорить. А вот по скорости Jev-1.13 быстрее в 6,4 раза. Единственный подвох - цена зависит от того, сколько текста модель вообще читает на входе: на честном прод-промпте (~4600 токенов, вся простыня правил и контекста) Jev-1.13 выходит на 60% дороже прода, а если инструкции и критерии ужать до 1167 токенов - уже в 4 раза дешевле. Платишь за то, что модель прочитала, а не за то, что она написала, а писать ей и не надо - значит, экономить нужно именно на входе.
Confidence: когда доверять модели, а когда перепроверять
У choice-ответа Jev-1.13 есть встроенная уверенность, и она информативна не для галочки: у верных ответов медиана confidence - 0.97, у ошибочных - 0.55. Разрыв достаточный, чтобы построить простое правило: всё, что модель выдала с высокой уверенностью, идёт как есть, а мутные случаи с низким confidence роутятся на перепроверку в тяжёлую модель. На практике мутный случай - это когда модель почти пополам колеблется между двумя вариантами, например между skill_check и movement на том самом “крадусь к воротам”: низкая уверенность здесь честно сигналит “не уверена”, а не маскируется под правильный ответ. Получается не “заменили одну модель другой”, а фильтр - дешёвая модель разбирает основной поток, а на тяжёлую модель попадает только то, в чём она сама сомневается. Удобно? Удобно - если, конечно, порог отсечения по confidence подобрать аккуратно, а не на глаз.
Смена сцены и квест одним вызовом - экономия в 7 раз
Смену сцены и принятие квеста я проверил как два noul-вопроса (“да/нет”) за один вызов модели - вместо того, чтобы гонять их раздельно. Результат: 12 из 12 на обоих вопросах, против 12/12 и 9/12 у прода - то есть по смене сцены прод сам чаще ошибался. Медиана времени - 382 мс против 1116 мс у прода, а стоимость - примерно в 7 раз ниже. Тут выигрыш не только в модели, но и в том, что два вопроса объединили в один вызов: System One-модели вроде Jev считают их параллельно, а не по очереди, так что добавить второй вопрос почти не удлиняет ответ.
Где Jev и прод ошибаются одинаково
Интереснее всего то, что обе модели - и дорогой прод, и дешёвый Jev-1.13 - спотыкаются на одних и тех же кейсах. “Крадусь вдоль стены к воротам” обе классифицируют как movement, хотя по замыслу это должна быть проверка навыка (skill_check). “Соврать” обе тянут в quest_interact вместо skill_check. Это та же история, что я разбирал с проверками навыков: когда бот путает Обман с чем-то другим - дело не всегда в модели, иногда граница между категориями размыта в самих правилах классификации, и любая модель на ней спотыкается одинаково. Прежде чем менять модель, стоит сначала починить границу.
Стоит ли переводить интент в прод
Пока это не решено. Вариантов два: перевести классификацию намерений на Jev-1.13 целиком, раз качество на уровне, а скорость и цена (при коротких инструкциях) лучше - или использовать его точечно, как быстрый первый фильтр с роутингом по confidence в тяжёлую модель для мутных случаев. Второй вариант безопаснее для ОБТ: меньше риска, что новая модель незаметно потянет за собой баг, который сейчас ловит связка gpt-oss-120b и flash-lite.
Второй открытый вопрос - сколько вообще таких узлов-решений в пайплайне одного хода и какую долю его цены они дают. Я проверил три штуки - intent, смену сцены, квест - но не факт, что это все кандидаты на переезд, и я пока не считал, сколько в сумме набегает экономии, если снять с генеративных моделей вообще всю сортировочную работу, а оставить им только то, что реально нужно писать текстом.
Что я знаю точно - модель, которая только выбирает, а не пишет, к таким узлам подходит лучше, чем модель, которую заставили писать один и тот же короткий ответ по кругу. Скрипт оценки и сырой JSON с результатами (2315 строк) лежат в репозитории - это воспроизводимая проба, а не “попробовал разок в чате и понравилось”. Следите за новостями - если Jev поедет в прод, расскажу, что из этого вышло на живых игроках.
Частые вопросы
Сколько стоит классификация намерения по сравнению с обычным ходом ИИ-мастера?
Зависит от объёма промпта: на полном прод-промпте (~4600 токенов) Jev-1.13 выходит на 60% дороже прода, а если ужать инструкции и критерии до 1167 токенов - уже в 4 раза дешевле. Платишь за то, что модель прочитала, писать ей не надо.
Можно ли проверить результаты этого теста самостоятельно?
Да - скрипт оценки и сырой JSON с результатами (2315 строк) лежат в репозитории проекта. Это не "попробовал в чате разок", а воспроизводимая проба на 36 кейсах, из которых 12 сняты с живого прода.
Что если игрок пишет неоднозначное действие вроде "подкрасться к воротам" или "соврать"?
Обе модели - и Jev-1.13, и продовая связка - ошибаются на этих кейсах одинаково: тянут их в movement и quest_interact вместо skill_check. Граница между категориями размыта в самих правилах классификации, а не в конкретной модели.
Как готовился материал: черновик собирает мой ИИ-конвейер по темам из практики таверны, факты сверяются с первоисточниками и правилами, финальную версию я читаю и правлю руками перед публикацией. Обложку тоже рисует нейросеть. Про кухню — на странице о проекте.