«6 − 2 = 3»: как мы проверяем кодом задания, которые пишет языковая модель
Мы делаем учебную игру: человек пишет цель своими словами («таблица умножения», «дроби за 5 класс», «английский для поездки»), а игра строит под неё путь из локаций. В каждой локации — порция из пяти заданий. Готовых курсов нет: тема может быть любой, поэтому задания пишет языковая модель (Claude от Anthropic) — под цель, уровень и последние ответы игрока.Придумывает задания модель хорошо, а считает плохо. В октябре мы разобрали 68 жалоб «Задание с ошибкой?» — игроки отправляют их кнопкой прямо из урока. Типичные случаи:«6 − 2 = 3»;«7,4 + 2,65 = 10,05» помечено как неверное;«после 8 идёт 10»;«28 меньше 25»;
mAP50 = 0,99 за 22 минуты на CPU. Жаль, что цифра ничего не значит
Я дообучил YOLO11n на датасете medical‑pills из документации Ultralytics: 60 эпох, 22 минуты на ноутбучном Ryzen 7, mAP50 = 0,991 на валидации. По всем признакам — успех: можно делать скриншот и рассказывать, как легко сегодня учить детекторы.Потом я прогнал тот же датасет через dataset‑doctor — свою проверялку датасетов — и узнал, что у каждого из 23 валидационных кадров есть почти точная копия в train. Валидация измеряла не «как модель справится с новыми таблетками», а «как хорошо модель помнит то, что уже видела».
Одно имя метрики, разные эксперименты: почему состав выборки надо хешировать
Рядом с метрикой принято хранить версию модели и версию данных. Этого мало. Между двумя запусками может смениться правило, по которому объекты попадают в оценку, и тогда одно и то же имя метрики описывает два разных эксперимента.У меня это вылезло на прогнозе загруженности парковок. Часть датчиков молчит: вместо занятости они круглосуточно отдают одно и то же число. Такие парковки надо выкидывать и из обучения, и из замера, иначе модель учится предсказывать константу, а метрика выходит красивее заслуженного.
Почему JSON Schema не делает ответ LLM надёжным
После того как LLM начинает возвращать structured output, интеграция внезапно становится очень похожей на обычный backend.Больше не нужно вырезать JSON из Markdown, надеяться, что модель не добавит перед ним «Конечно, вот результат», чинить потерянные кавычки и повторять запрос из-за случайной запятой.Мы описываем схему, модель возвращает объект, десериализуем его в Go-структуру — и кажется, что самая неприятная часть интеграции закончилась.Например:type Invoice struct { Number string `json:"number"` Currency string `json:"currency"` Total int64 `json:"total"` }На выходе получаем:{ "number": "INV-2026-1842", "currency": "USD", "total": 148000 }JSON валиден.
Сопротивление воздуха: почему дешевый ИИ обходится так дорого
Привет, Хабр.Я Алексей Арустамов, директор компании‑разработчика low-code платформы продвинутой аналитики.Когда я смотрю очередной ролик с удачной генерацией ИИ, не могу не заметить, что в кадре нет: ни одного юриста, ни одного бизнес-процесса, ни одного клиента, который уйдет в результате ошибок генерации. Только модель и аплодисменты.
Отдал сайт ИИ‑агентам: из 111 находок аудита 25 пошли в мусор, 4 оказались выдумкой
Мой сайт ведут ИИ‑агенты. Они пишут код, правят тексты, проводят ревью, собирают и выкатывают. 207 коммитов.Я не буду рассказывать, как это ускорило работу — ускорило, это скучно и все уже слышали. Расскажу про то, о чём говорят реже: узкое место переехало с написания кода на его проверку. Агент производит правки быстрее, чем человек успевает их прочитать, и если не встроить проверку в конвейер, разница между «работает» и «выглядит как работает» перестаёт быть заметной.Две цифры для затравки:
Промпт — не контракт: замерил, как часто модель нарушает жёсткие правила, и вынес их в код
У меня в проде работает ИИ-консультант на сайте. У него есть два правила, которые нарушать нельзя вообще: не называть цены и не называть клиентов, которые под NDA. Оба правила были написаны в системном промпте капслоком, с объяснением почему.Я замерил, как они соблюдаются. Получилось так:правило «не называй цен» модель срывает примерно раз на восемь прогонов;имя клиента под NDA проскакивало раз на пять.
Визуализация изменений при помощи LLM, стопки листов и графа между ними
Первая практическая статья. На примере анализа двух редакций Правил продажи.Долго выбирал что взять в первый практический разбор/демонстрацию возможностей своего инструмента. Решил остановиться на разборе изменений Правил продажи.С 1 сентября действуют новые Правила продажи товаров - ПП № 657. Прежние, ПП № 2463, утратили силу. Это не поправки, а новый документ: в начало добавили три пункта, и дальше вся нумерация сдвинулась на три.Наверняка его уже всесторонне разобрали, но я решил показать возможный новый способ.Почему ответ модели нельзя проверить чтением
Как сравнить две версии регламента за 15 минут: LLM строит карту изменений, а вы проверяете её глазами
Первая практическая статья. На примере анализа двух редакций Правил продажи.Долго выбирал что взять в первый практический разбор/демонстрацию возможностей своего инструмента. Решил остановиться на разборе изменений Правил продажи.С 1 сентября действуют новые Правила продажи товаров - ПП № 657. Прежние, ПП № 2463, утратили силу. Это не поправки, а новый документ: в начало добавили три пункта, и дальше вся нумерация сдвинулась на три.Наверняка его уже всесторонне разобрали, но я решил показать возможный новый способ.Почему ответ модели нельзя проверить чтением
Агент написал себе навык и соврал, что тот работает
Я делаю агента, который умеет дописывать себе навыки. Не в смысле «подключает плагины из маркетплейса», а буквально: упёрся в то, чего не умеет — сгенерировал код, собрал, установил, пользуется.Первый раз это сработало примерно так, как я и мечтал. Агент сказал «у меня нет такого навыка», спросил разрешения, минуту пыхтел компилятором и отчитался: готово, метод доступен.Метода не было.

