Дешевле всего обходится то, что до модели не доехало
Два наших сборщика перемалывают 62 миллиона знаков чужого текста. Разбор счёта показал, что расходы держит не цена за токен, а фильтр перед моделью.
Обновлено:
У нас два сборщика, которые каждый день читают чужой текст и выносят по нему суждение. Один следит за новостями об ИИ и криптоинфраструктуре, второй — за обсуждениями инди-предпринимателей. На 2 сентября 2026 года в их базах лежит 62,2 миллиона знаков сырого материала: 33,2 миллиона в первом, 29,0 миллиона во втором.
Это ровно та нагрузка, на которой обычно и обнаруживают, что счёт за модель вырос втрое. У нас он не вырос, и дело не в том, что мы что-то умное сделали с промптами. Ниже — решения, которые действительно держат расходы, и одно место, где наш собственный контроль расходов врёт.
Перед моделью стоит фильтр, который ничего не стоит
В сборщике обсуждений сейчас 19 264 треда. До разбора смыслом доехало 2 558 — тринадцать процентов. Остальное сняли детерминированные правила, не обращающиеся к модели вообще:
| Причина отсева | Записей |
|---|---|
| SEO-простыни про IPTV | 13 298 |
| нелатинский слаг в адресе | 2 340 |
| автор в списке спамеров | 675 |
| слишком короткий текст | 186 |
| протухло | 105 |
| остальные правила: язык, нелатиница, ссылочный спам, без метки | 102 |
Главное здесь не проценты, а то, что часть правил работает по адресу страницы, то есть до её забора. У SEO-спама поисковый запрос обязан лежать в URL, иначе вся затея не работает, — и это делает его опознаваемым бесплатно, ещё до сети.
Второе, что стоит перенять: причина отсева пишется в базу строкой. Не флаг «отсеяно», а «iptv-spam», «spam-author». Когда через месяц спрашиваешь, не выкидываем ли мы лишнее, ответ достаётся запросом, а не пересборкой.
Отсечка по свежести стоит перед классификацией, а не после
В сборщике новостей записи старше трёх дней до модели не доходят. Отсечка стоит именно перед разбором, и это не косметика: настоящая дата публикации известна только после того, как страница забрана. У части сайтов в карте сайта проставлен свежий lastmod на старых страницах — так к нам однажды приехали статьи 2023 года. Без отсечки мы бы за них заплатили, а в выдачу они бы всё равно не попали.
Шаг, выведенный из тарифицируемого API
За полтора месяца по 2 сентября в базе накопилось 3 550 оценок. Через платный API прошли 240 из них; остальные сделаны сессией — с 30 июля шаг классификации из ежедневного прогона убран, вместо него сессия читает неоценённое и возвращает вердикты, которые импортируются в ту же базу. Во втором сборщике так с самого начала: все 1 607 заметок сделаны сессией, через API — ни одной. (Заметок меньше, чем прошедших фильтр тредов: 951 ещё ждёт разбора.)
Это не универсальный совет: у такой схемы есть цена, и она в том, что шаг перестаёт быть автономным. Прогон по расписанию собирает и чистит, а суждение выносится, когда садишься работать. Для дайджеста, который выходит раз в неделю, это подходит; для продукта, который отвечает пользователю в реальном времени, — нет.
Где наш собственный контроль расходов врёт
Ограничение длины входа — первое, что ставят ради экономии. У нас их два, и ведут они себя по-разному.
Первый стоит на пути через платный API: текст обрезается на 40 000 знаков, одной строкой кода. Здесь важно быть точным. В базе тексты лежат целиком — те самые 33,2 миллиона знаков; обрезка происходит по дороге к модели. Прогони мы сегодня через этот лимит весь корпус, до модели не доехало бы 9,45 миллиона знаков — 28,5 % объёма, и всё это хвосты 115 самых длинных материалов, то есть 2,7 % записей. Под нож попадает самое длинное, а оно же обычно и самое содержательное. И нигде — ни в логе, ни в карточке записи — об этом не было ни слова.
Второй стоит на пути через сессию: в выгрузку идут только первые четыреста знаков. Но рядом, в шапке записи, стоит настоящая длина текста, а обрыв помечен многоточием.
Эта пометка появилась не из аккуратности, а по счёту. 9 августа 2026 года верхнюю оценку пачки — 85 из 100 — получил обрубок статьи CoinDesk на 265 знаков: сайт отдал заголовок с подзаголовком, а саму статью спрятал за JS-стеной. В выгрузке начало длинной статьи и короткий обрубок целиком выглядели одинаково — у обоих видно четыреста знаков. Оценили обещание заголовка, приняв его за материал.
Разница между двумя лимитами не в размере, а в том, что один себя объявляет, а второй нет. Это тот же класс дефекта, который мы разбирали на своём сканере: экономия, которую не видно, перестаёт быть решением и становится искажением. Лимиты мы не снимаем — они на месте по делу; мы приводим первый ко второму: с сегодняшнего дня обрезка пишется в лог прогона строкой — сколько знаков срезано и из скольких.
Ретраи считать своим классом отказа, а не чужим
Повторы в SDK покрывают ошибки HTTP: 429, пятисотые. У нас наблюдался другой сбой — HTTP 200 с пустым текстом, на котором разбор ответа падает. Для клиента это успешный ответ, и штатный ретрай на него не срабатывает. Пришлось завести свой: три попытки с нарастающей паузой, и повтор того же запроса проходил нормально.
Мораль общая для любой интеграции: список того, что считается отказом, у вашего поставщика и у вас разный. Совпадение проверяется на своих логах, а не по документации.
Чего мы не измерили — и не будем утверждать
Тут положено писать «экономия составила N процентов». У нас этих цифр нет, и придумывать их мы не станем.
- Долларов мы не считали. Счётчика стоимости прогона в наших сборщиках нет — ни лога, ни отчёта. Всё, что выше, меряется в записях и знаках.
- Сравнить дешёвую модель с дорогой на своих данных мы не можем. Двумя разными моделями у нас оценены ровно два материала из 3 550. Пересечение в две записи — это не выборка, и вывода о том, где дешёвая справилась бы, из него не сделать.
- Про кеширование промпта нам сказать нечего. Ни одного замера кеша у нас не снято.
Правило
Самая дешёвая обработка — та, которой не было. Прежде чем подбирать модель подешевле и резать промпт, стоит посмотреть, какая доля входа вообще заслуживает модели. У нас это оказалось тринадцать процентов, и вытащил их не ИИ, а пара десятков детерминированных правил, которые таблица выше сводит к шести причинам.
И второе, ровно такой же важности: любое сокращение расходов обязано быть видимым в выходе. Обрезанный текст, пропущенная запись, отсечённый по возрасту материал — всё это должно оставлять след, иначе экономия однажды предъявит счёт не деньгами, а неверным выводом. Мы этот счёт себе уже выписали — 28,5 % корпуса, о которых отчёт молчит.
Если вы собираете такой контур у себя и не уверены, где в нём деньги, — это ровно та работа, которую мы делаем.
Читать дальше
В резолюции ломается момент, а не факт
Два разбора 2026 года — снимок цены, который покупали на секунды, и спор о продаже биткоина Strategy. Факт был известен, а рынок закрыли против него.
Shopify вернулся на native: агенты изменили цену второй кодовой базы
Shopify уходит с React Native на Swift и Kotlin. Самое полезное в посте — не выбор стека, а признание: одним прогоном агента миграция не делается.
Стабильная скорость №1: даже Карпатый чувствует себя отставшим
Ускорение от ИИ реально, но пришло полосами. METR замерил разрыв в 39 пунктов между тем, насколько быстрыми разработчики себя чувствовали и были.