Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизРазбор · На радарHabr AI→ оригинал

Учитель сделал бота для проверки ЕГЭ: модель размечает, а баллы считает код

Эксперт ЕГЭ два года делает Telegram-бота для проверки развёрнутых ответов по обществознанию. Главный вывод: модель честно размечает ответ по схеме, но завышает баллы, если доверить ей итог. Поэтому баллы пересчитывает обычный код, а перепроверки могут оценку только снизить. Средняя проверка обходится в 2,3 цента и 9 секунд.

AI-обработка оригинала Habr AI; редакция Hamidun News
Учитель сделал бота для проверки ЕГЭ: модель размечает, а баллы считает код
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Модель заполняет JSON-схему через tool_use, балл считает код
Ключевой факт #2Отклонение примера только при двух согласных негативных сигналах
Ключевой факт #3При сбое ИИ балл не показывается, а попытка не списывается

Что будет, если доверить языковой модели поставить школьнику балл за развёрнутый ответ? Она оценит щедро: «в целом понимает обществознание», а критерии ФИПИ жёсткие. Пример про «государство Z» вместо России даёт ноль, а план без трёх обязательных пунктов теряет весь критерий. Учитель и эксперт ЕГЭ рассказал, как два года строил бота, который это учитывает.

Модель размечает, код считает

Главный принцип: модель не пишет «ставлю 2 балла, потому что…». Она заполняет JSON-схему через tool_use: какие примеры конкретны, какие суждения верны, какие пункты плана ключевые. Дальше работает обычный код: пересчитывает баллы по критериям, проверяет всё, что можно проверить без модели, и запускает перепроверки, которые способны только понизить оценку.

У каждого задания свой плагин: хендлер, эвалуатор и спецификация. Универсального промпта нет. Закономерность видна по объёму кода: задание 17 занимает 942 строки, а задания 24 и 25 по 6,8–7,2 тысячи. Чем сложнее критерии, тем больше кода вокруг модели, а не длиннее промпт.

Как не наказать невиновного

В задании 19 модель засчитывала пересказ функции органа как пример его действия. Автор добавил второй вызов с отдельной схемой, но первая версия срабатывала везде и снимала баллы у семей и граждан, где органа по условию нет. Теперь перепроверка включается только по явным маркерам в тексте задания. Кроме того, пример отклоняется, лишь если совпали минимум два из четырёх негативных флагов. Урок: защита от завышений сама рождает занижения, и область её срабатывания важна не меньше самой проверки.

В задании 24 баллы за первый и второй критерии целиком считает код: леммы через pymorphy2 и сверка с 185 эталонными планами. Синонимы заголовков («признаки» и «особенности») приводятся к одной форме. Проверка простая: все эталонные планы должны получать максимум. До правки синонимов так было у 147 из 185, теперь у всех.

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

Честный отказ вместо выдуманного нуля

Самая коварная ошибка — тихий ноль, когда модель не ответила, а код подставил ноль, и ученик видит обычный разбор. В задании 25 было 16 таких нулей на 110 кейсов, и половина совпадала с эталоном, попадая в метрики как точное попадание. Теперь любой сбой сводится к флагу ai_unavailable: балл не показывается, попытка не списывается, администратор получает алерт. Бесплатная попытка списывается только после доставки результата.

Автор честно признаёт недоделки: в заданиях 21 и 23 при сбое ещё ставится упрощённый балл, а резервный YandexGPT включается вручную.

Цена и практический вывод

Ноябрьский прогон на 393 ответах дал 497 вызовов и 8,87 доллара: в среднем 1,26 вызова, 2,3 цента и 9 секунд на проверку. Дороже всего обходятся не длинные оценки, а перепроверки. Кэш промпта даёт до 66% входа, но на коротких промптах заданий 17, 21 и 22 не срабатывает.

Для тех, кто строит оценивание с LLM: заставляйте модель отвечать структурой с явными флагами, держите арифметику в коде, делайте перепроверки односторонними, требуйте независимости прогонов и отличайте сбой от нуля. А на новых версиях Claude принудительный tool_choice возвращает ошибку 400, поэтому передавайте auto и просите вызвать инструмент в конце запроса.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: модель размечает, код считает?

Главный принцип: модель не пишет «ставлю 2 балла, потому что…». Она заполняет JSON-схему через tool_use: какие примеры конкретны, какие суждения верны, какие пункты плана ключевые. Дальше работает обычный код: пересчитывает баллы по критериям, проверяет всё, что можно проверить без модели, и запускает перепроверки, которые способны только понизить оценку. У каждого задания свой плагин: хендлер, эвалуатор и спецификация. Универсального промпта нет.

Что известно по теме: как не наказать невиновного?

В задании 19 модель засчитывала пересказ функции органа как пример его действия. Автор добавил второй вызов с отдельной схемой, но первая версия срабатывала везде и снимала баллы у семей и граждан, где органа по условию нет. Теперь перепроверка включается только по явным маркерам в тексте задания. Кроме того, пример отклоняется, лишь если совпали минимум два из четырёх негативных флагов. Урок: защита от завышений сама рождает занижения, и область её срабатывания важна не меньше самой проверки.

Что известно по теме: честный отказ вместо выдуманного нуля?

Самая коварная ошибка — тихий ноль, когда модель не ответила, а код подставил ноль, и ученик видит обычный разбор. В задании 25 было 16 таких нулей на 110 кейсов, и половина совпадала с эталоном, попадая в метрики как точное попадание. Теперь любой сбой сводится к флагу ai_unavailable: балл не показывается, попытка не списывается, администратор получает алерт. Бесплатная попытка списывается только после доставки результата.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…