ИИ-мониторинг, который врёт: 5 приёмов ловли тихих поломок в 2026

· ·

ИИ-мониторинг, который врёт: 5 приёмов ловли тихих поломок в 2026

PrimeCoder · 2026 · формат: tech

Разбор новинки простыми словами: что это, кому нужно и брать ли.

Молчаливые сбои скриптов и ИИ-агентов опаснее падений — нужны подставные параметры, сверка источников и надзор над дозорами.

Связанные услуги: каталог, AI Boost Team, стать клиентом.

Тридцать статей каждое утро. Полгода подряд

Скрипт, который падает, приносит подарок. Крон пишет в лог, телеграм приносит ошибку, вы идёте чинить. Неприятно. Зато видно.

Хуже, когда каждое утро приходит бодрое «статей к проверке: 30». Тридцать и тридцать, всё сходится. А внутри месяцами крутится чужая лента.

Об этом написал на Хабре автор медиапроекта на VPS под ником igbering52. Полгода наблюдений, 31 задача в кроне: дозоры за комментариями и статьями на чужих площадках, спрос в Вордстате, новые законы, бэкапы, напоминалки. Скрипты пишет и правит ИИ-агент, человек ставит задачу и смотрит на результат.

Общее у всех поломок одно. Ни одна ничего не уронила. Лог здоровый, отчёт по расписанию, внутри пусто или мусор.

Упавший скрипт меня не пугает. Он падает, крон пишет в лог, в телеграм прилетает ошибка, я иду чинить. Неприятно, но честно.

Для бизнеса перемена вот в чём. Раньше автоматика ломалась громко: сервис лежал, клиенты звонили. Теперь код пишет агент, отчёты генерируются сами, а сбой не оставляет следа. Он оставляет уверенность. На уверенности строят закупку контента, ставки, бюджет. Это дороже падения.

Пять приёмов: что в наборе

Ни один приём не требует отдельного сервиса, денег или DevOps-команды. Три строки кода, привычка сверять, один надзиратель над дозорами.

  • подставной параметр: проверка, что источник вообще слушает запрос;
  • два источника вместо одного: сверка полноты;
  • третье состояние: «не проверили» отдельно от «проверили, нет»;
  • запрет молчаливых ошибок: любая пойманная ошибка оставляет строку;
  • надзор над дозорами: кто-то должен сторожить сторожей.

Приём 1. Подставной ключ

Дозор следил за свежими комментариями в нескольких разделах большого медиасайта. Списки статей брал из RSS вида /rss/flows/<раздел>/, шёл по статьям, искал новое. В логе ежедневно тридцать статей. Сходится.

Пока автор не открыл глазами, что именно проверяется в разделе коротких заметок. Кроссворды. Материал про Выборг. Ни того, ни другого в разделе нет.

Сервер не смотрел на название раздела. На любой адрес отдавал общую ленту журнала. Ответ побайтово одинаковый, 38 156 байт, для security, short, avto и для потока, которого не существует. Двести, OK, вот вам лента. Тот же баг жил во втором дозоре: код скопировали из первого.

Лечится тремя строками. Запрос на настоящий адрес, запрос на заведомо несуществующий, сравнение. Совпали ответы, значит параметр игнорируется. Проверку ставят до того, как строить на источнике что-то серьёзное. Месяцы в кроссвордах не вернуть, следующие месяцы закрыты.

Вне HTTP приём тоже работает. Дозор за новыми законами: модель читает ленту документов и отбирает касающиеся тем проекта. Первый промпт просил «отбери только касающиеся» и стабильно отдавал пустой список. Ноль новых законов, красота. В ленту подложили пару документов, которые касаются заведомо. Ответ тот же: пусто. Фильтр слепой. Заработал, когда модель стала выносить решение по каждому документу отдельно, полем «касается: да/нет», а не выбирать из кучи.

Ноль надо проверять подставным ненулём. Иначе ты не знаешь, пусто там или ты не видишь.

Приём 2. Сверка двух источников

Один источник сверять не с чем. После истории с RSS списки статей раздела стали брать двумя путями: HTML-лента с пагинацией и карта сайта раздела.

Ждать логично, что официальная карта полнее. Вышло наоборот. Глубокая пагинация ленты дала 594 статьи, карта 387. «Пропавшие» живы, отвечают 200, в карте их нет. Обратное расхождение составило одну статью.

Вывод записали в код: полнота у ленты, карта годится для дат обновления и как страховка. Модуль сбора списков при расхождении сам пишет предупреждение в лог. Без сверки выбрали бы карту, она «официальная», и треть статей выпала бы незаметно.

Сюда же кодировка. Дозор по тегам развлекательной площадки фильтровал посты по ключевым словам и честно приносил ноль. Фильтр в порядке. Страницы тегов отдавались в windows-1251, скрипт слепо делал decode в utf-8. Русские слова превращались в кашу, ключевые в каше не находились. Ошибка сидела на два шага раньше места, где её искали.

Приём 3. Третье состояние

Пайплайн проверял, проиндексированы ли страницы проекта в поиске. Смысл один: выдать приоритетный список «в индексе точно нет, надо что-то делать». За семь отчётов список не наполнился ни разу.

Причин две. Проверка «в ответе поиска есть хоть один документ» засчитывала нестрогие совпадения и записывала в индекс всё подряд. А упавший запрос возвращал None, и дальше по коду он попадал в ту же ветку, что «да». Python не видит разницы между None и False в условии. «Не проверили» молча становилось утверждением.

Лечится явным третьим состоянием: приоритет, бэкап, неизвестно. Три значения вместо двух, и отчёт перестаёт врать.

Читайте также

Комментарии (1)

  • PrimeCoder Team · Официальный ответ · PrimeCoder

    Опишите, кто сейчас обрабатывает заявки и какие SLA по факту — предложим поэтапный сценарий без остановки операционки.

Обсудить на сайте