Сборщик знает, что у Skillbox сменился платёж в месяц. Но владельцу «Кодиума» мало строки «было одно число, стало другое». Ему нужно понять, что это значит для его школы. Это работа языковой модели. В прогоне курса на этом шаге случилась тихая неприятность: агент поменял модель, никому не сказав. Разберём, как такое замечать.
Чему научишься в этом уроке:
• подключить модель через CloseRouter с основной и запасной;
• держать названия моделей в .env и видеть в журнале, какая ответила и сколько токенов ушло;
• посчитать, сколько стоит разбор в месяц;
• выложить мониторинг на сервер с таймером на 8:00 по Москве.
Код считает, модель объясняет
Разделение ролей ты видел в уроке 4.2. Код сравнил снимки и нашёл отличия. Модель получает только эти отличия вместе с фрагментами страниц и пишет 5–7 строк «что это значит для Кодиума», к каждому выводу цитату из снимка. Цитата нужна, чтобы владелец мог проверить вывод, а модель не придумывала причин. Если изменений нет, модель не зовём совсем, приходит «Конкуренты: без изменений».
CloseRouter: основная и запасная модель
Модель вызываем через CloseRouter, как в уроке 1.8: адрес https://api.closerouter.dev/v1, ключ в .env под именем CLOSEROUTER_API_KEY. Модели для разбора (цены на 09.10.2026, доллары за 1 млн токенов, вход / выход):
- google/gemini-3.6-flash: 0,03 / 0,15, основная;
- openai/gpt-5.4-mini: 0,0225 / 0,135, запасная.
Запасная модель от другого поставщика выбрана нарочно: две модели одной компании могут упасть вместе. Порядок при сбое такой: ждём ответа с таймаутом, две попытки с паузой, потом запасная модель, а если не ответила и она, владелец получает «разбор не удался» и сырые изменения без вывода. Тишины быть не должно. Как устроены повторы и запасная модель, подробно разобрано в треке 2: урок 3.5 «Надёжность». Список моделей и цены меняются, актуальные смотри в кабинете CloseRouter.
Выкладка на сервер и будильник на 8:00
Мониторинг живёт на том же сервере, что бот и приём формы. Будильник уже знаком по отчёту в 9:00 из урока 3.5: таймер systemd с часовым поясом в OnCalendar. Если в П2 ты шёл через n8n, таймер systemd тебе новый: его сделает агент по заданию ниже, а проверка одна — команда systemctl list-timers (как в уроке 3.5). Задание из прогона (адрес сервера заменён):
Выложи мониторинг на тот же сервер <адрес сервера> (вход ssh root@<адрес сервера>, ключ настроен): папка /opt/monitoring-kodium, пользователь bot, своё .venv, .env с правами 600 (без копирования локальной snapshots.db и логов). Служба kodium-monitor + таймер kodium-monitor.timer: каждый день в 8:00 по Москве (часы сервера в UTC — укажи часовой пояс в OnCalendar), Persistent=true. Бот и форму на сервере не трогай.
Затем проверь разбор моделью: запусти сбор на сервере один раз (первый снимок), потом вручную измени в базе на сервере платёж в месяц у Skillbox на другое число (тестовое изменение, пометь в журнале) и запусти ещё раз — модель должна прислать в Telegram сводку «что изменилось и что это значит для Кодиума» с цитатой. Покажи: list-timers по kodium-monitor, журнал второго запуска (без токенов), какая модель ответила и сколько токенов ушло. После проверки верни тестовое значение назад.
Значение в базе меняет сам агент по этому заданию, руками в базу лезть не нужно. Тестовое изменение нужно, чтобы не ждать, пока конкурент сам поменяет цену. Подменили платёж, запустили, увидели сводку, вернули значение назад. Агент работал 19,3 минуты: таймер на 05:00 UTC, это 8:00 по Москве, Persistent=true, модель ответила примерно за 6,5 секунды, сводка пришла в Telegram.

Кейс: агент молча сменил модель
В журнале шага выше была строка: ответила anthropic/claude-haiku-4.5. А в задании основной была gemini-3.6-flash, запасной gpt-5.4-mini. Агент поменял модель сам и в отчёте об этом не сказал. Заодно он не писал в журнал расход токенов и сравнивал не то поле. Работает? Работает. Но цена, скорость и качество разбора теперь не те, о которых ты договорился с заказчиком, и ты бы об этом не узнал.
Задание на починку:
В журнале ответила модель anthropic/claude-haiku-4.5, а в задаче основной была google/gemini-3.6-flash, запасной — openai/gpt-5.4-mini. Почему модель поменялась без моего ведома? Верни модели из задачи, вынеси их в .env (MODEL_MAIN, MODEL_FALLBACK) и пиши в журнал после каждого ответа: какая модель ответила и usage (prompt_tokens, completion_tokens). Обнови на сервере <адрес сервера>, повтори тест с временным изменением платежа в месяц у Skillbox (сравнение должно идти по тому же полю — monthly_payment), покажи журнал с моделью и токенами, верни значение назад.
После 11,8 минуты работы ответила google/gemini-3.6-flash. Названия моделей теперь лежат в .env: MODEL_MAIN и MODEL_FALLBACK. Поменять модель можно правкой одной строки и перезапуском, без правки кода, и сделать это может только тот, у кого есть доступ к серверу. А журнал после каждого ответа пишет, какая модель ответила и сколько токенов ушло.
Правило: всё, о чём ты договорился с заказчиком (модель, расписание, источники), должно быть видно в настройках и в журнале. Тогда подмену заметишь в первый же день.
Сколько стоит разбор
Токен здесь — кусочек текста, который читает или пишет модель, не путай с токеном бота. Журнал тестового запуска показал usage (расход токенов): prompt 98, completion 214, total 1447. Сумма первых двух меньше итога, разница около 1 135 токенов это «размышления» модели, они оплачиваются как выход. Посчитаем по ценам gemini-3.6-flash: около 0,0002 $ за один разбор. Даже если изменения находятся каждый день, это около 0,5 ₽ в месяц. Это расчёт по замеру одного запуска, а не счёт за месяц.
Сборка всего П3 агентом в прогоне (шаги из уроков 4.3 и 4.4) стоила около 0,23 $ по кабинету CloseRouter, это около 20 ₽ при условном курсе 90 ₽ за доллар; подставь свой курс. Сервер уже оплачен в П1. Выходит, что почти вся себестоимость сводки это твоё время на присмотр и починку. Это пригодится в следующем уроке, где считаем подписку.
Проверка на сервере
systemctl list-timers kodium-monitor
journalctl -u kodium-monitor
В списке таймеров NEXT должен показывать 05:00 UTC. В журнале ищи строку с названием модели и usage, и убедись, что в нём нет токена бота и ключа: их прячет уровень WARNING для httpx из задания урока 4.3, грабля из урока 3.6.
Если не получилось
- В журнале ответила не та модель → агент заменил модель; верни её, вынеси в .env (MODEL_MAIN, MODEL_FALLBACK), задание выше.
- В журнале нет usage → попроси писать после каждого ответа модель и prompt_tokens, completion_tokens.
- Тестовое изменение есть, а сводка «без изменений» → сравнение идёт не по тому полю; укажи поле явно (monthly_payment).
- NEXT в list-timers показывает 08:00 UTC → в OnCalendar нет пояса Europe/Moscow, сводка придёт в 11:00 по Москве.
- Сводка пришла с тестовым числом и на следующий день → тестовое значение не вернули в базу; попроси вернуть.
- В журнале виден токен бота → нет строки уровня WARNING для httpx/httpcore; добавь и смени токен, как в уроке 3.6.
- Сломал основную модель, а сводки нет и пометки «разбор не удался» тоже нет → повторы или запасная модель не подключены; задание агенту: «покажи в журнале попытки 1 и 2 и вызов MODEL_FALLBACK; если не ответила и запасная, владелец должен получить „разбор не удался“ с сырыми изменениями».
Контрольный вопрос. В журнале мониторинга ты видишь «model: anthropic/claude-haiku-4.5», а договаривался о gemini-3.6-flash. Что делаешь?
Подсказка: О какой модели и цене ты договорился с заказчиком?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Журнал показал usage: prompt 98, completion 214, total 1447. Откуда разница?
Подсказка: Что модель делает до того, как написать ответ?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Контрольный вопрос. Основная модель и запасная не ответили. Что должен получить владелец?
Подсказка: Почему тишина хуже плохой новости?
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Задание. МИССИЯ «Сводка в 8:00». 1. Дай агенту задание выкладки (шаг из урока) для своего сервера и проекта. 2. Сразу проверь журнал: какая модель ответила и есть ли usage. Если нет, дай задание на починку из урока. 3. Сделай тестовое изменение, получи сводку в Telegram, верни значение назад. 4. Сломай и почини: дай агенту задание «на сервере в .env поставь MODEL_MAIN=несуществующая-модель, запусти сбор с тестовым изменением (systemctl start kodium-monitor), покажи журнал: какие были попытки и какая модель ответила; потом верни прежнее значение MODEL_MAIN и тестовое значение в базе». Сам .env на сервере руками не правь. В прогоне курса этот случай в коде не проверяли (в треке 2 так проверяли n8n), так что результат важен. Принято, если: приложены снимок сводки в Telegram, снимок вывода list-timers с NEXT в 05:00 UTC (или своё время с поясом), кусок журнала с названием модели и usage без токенов, и кусок журнала «сломай и почини»: какая модель ответила, когда основная была сломана.
Подсказка: Если при сломанной основной ничего не пришло, проверь, что в журнале есть попытка запасной.
✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.
На курсе задания проверяются автоматически. Решить первое задание бесплатно → · Подобрать курс
Читайте также: Мониторинг цен конкурентов с нейросетью: как сделать сводку, которой можно верить · AI-агент говорит «готово», а тесты упали: как проверять работу Claude Code
Частые вопросы
Можно ли доверить нейросети сбор цен конкурентов?
Только с проверкой: сборщик врёт уверенно. 10.10.2026 агент придумал 3 адреса из 5, взял телефон за дату старта и ежемесячный платёж по акции за цену курса — и каждый раз писал «ложных данных нет».
Сколько стоит ежедневная AI-сводка по конкурентам?
В нашем замере 10.10.2026 разбор одной сводки на gemini-3.6-flash (пример на дату) стоил ≈ 0,0002 $ — около 0,5 ₽ в месяц при ежедневном запуске. Главные расходы — сервер и время на поддержку.
Законно ли парсить сайты конкурентов?
Отдельного закона о парсинге нет; риски — право изготовителя базы данных (ст. 1334 ГК РФ), персональные данные и условия сайта. Правило курса: только открытые страницы, разрешённые robots.txt, редкие запросы и никаких персональных данных. Не юридическая консультация.
Что дальше
Сводка работает каждое утро и стоит копейки. Дальше разговор о деньгах: как упаковать мониторинг в подписку и сколько за неё просить.
Итог:
• код находит изменения, модель объясняет их с цитатой;
• основная и запасная модели от разных поставщиков, названия в .env;
• журнал пишет, какая модель ответила и сколько токенов ушло;
• разбор стоит около 0,5 ₽ в месяц по расчёту, главная себестоимость это твоё время;
• таймер 8:00 по Москве виден как 05:00 UTC.
