Память моего ИИ-помощника завела 144 процесса и сожгла недельный лимит за полдня

Две недели я честно думал, что виноват компьютер. К обеду редактор кода переставал отвечать, новое окно открывалось секунд сорок, а лимит подписки на ИИ-ассистента — тот, которого мне должно хватать на неделю — выгорал к трём часам дня. Я списывал это на возраст железа и на то, что стал больше работать.

Память моего ИИ-помощника завела 144 процесса и сожгла недельный лимит за полдня

25 августа сел разбираться по-настоящему. Виноват оказался не ассистент, а его память — та самая штука, которую я неделей раньше поставил, чтобы работать быстрее.

Зачем агенту вообще память

Помощник, который каждое утро начинает с чистого листа, — это гениальный стажёр с амнезией. Вчера вы вместе три часа чинили сложную штуку, сегодня он спрашивает, что за проект и где тут вообще что лежит.

Поэтому рядом с ним живёт отдельная система, которая записывает, что он делал: какие команды запускал, что сломал, что починил, какие решения принял. Утром он это читает и продолжает с того места, где остановились. Разница в качестве работы такая, что отказаться уже не хочется.

Дальше начинается то, о чём в обзорах инструментов не пишут. Память — это не «поставил галочку и забыл». Это сервис, который живёт у вас на машине круглосуточно и тратит ваши деньги, пока вы спите.

Сто сорок четыре процесса

Первое, что я увидел в диспетчере задач: сто сорок четыре лишних процесса. Не мегабайта — процесса.

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

Убивает он первого в цепочке. Остальные пятеро остаются жить сиротами и держат оперативку. Родитель пробует ещё раз — рождается новая цепочка. Я своими глазами видел четыре осиротевших цепочки за полторы минуты. За неделю их накопилось столько, что процессор стоял в потолке.

Один такой сирота накрутил два часа процессорного времени вхолостую. Просто существуя.

Красиво.

Дневник стоил дороже работы

Второе оказалось дороже. Записи о работе агента составляет отдельная модель попроще — она читает, что произошло, и пишет короткую сводку. Чтобы она понимала контекст, ей передают несколько предыдущих сообщений. В настройках стояло двадцать.

Двадцать сообщений — это двадцать полных ответов на команды. Один просмотр большого файла, один поиск по всему проекту, один длинный лог сборки. На одну строчку дневника уезжало до двухсот сорока тысяч токенов. И так две с лишним тысячи раз в день.

То есть каждое «я прочитал такой-то файл» я оплачивал дважды: сначала как работу, потом как пересказ этой работы. Дневник обходился дороже того, что в нём описано.

Отдельная подлость: всё зелёное, данных нет

Дальше выяснилось, что четверо суток половина памяти вообще не писалась. Наблюдения шли, а сводки по итогам дня — нет. Причина скучная: при обновлении не доехала маленькая правка в устройстве базы.

Обидно не это.

Счётчик ошибок всё это время показывал ноль. Он считал одни сбои и не видел других, а раз в сутки обнулялся сам. Инструмент, который сам сообщает о своём здоровье, спокойно рапортовал «норма», теряя при этом данные.

Что я поменял

Базу подняли отдельным постоянным сервером, который просто всегда включён. Раз он тёплый, никто не ждёт тридцать секунд, никого не убивают, сироты не появляются.

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

Выключили наблюдение за фоновыми скриптами. Полторы тысячи записей в духе «скрипт опубликовал пост» не нужны никому, а стоили как настоящие.

И поставили правило вместо доверия: сравнивать даты последних записей в двух таблицах памяти. Разъехались — значит обновление доехало наполовину, независимо от того, что показывает счётчик ошибок.

Итог на 28 августа

Процессов пятнадцать вместо ста сорока четырёх. Расход на память упал в разы. Пятичасовое окно подписки уходит в работу, а не в пересказ содержимого файлов. Компьютер перестал тупить к обеду.

Что я забираю с собой

Память для ИИ-агента — это инфраструктура, а не фича. У неё есть потребление, есть счёт и есть режим отказа, при котором она молча ест ресурсы быстрее, чем приносит пользу. Ставить её и не смотреть — примерно как поднять базу данных и ни разу не открыть мониторинг.

Главный урок вообще не про ИИ. Любой инструмент, который сам себе выставляет оценку, врёт охотнее всего. Счётчик ошибок, галочка «обновление применено», красивая сумма расходов в интерфейсе — три источника, и все три показывали норму, пока система теряла данные и деньги.

Верить стоит внешнему: реальным процессам в диспетчере задач, реальному счёту от провайдера, реальным датам последних записей в базе. Инструменты новые, грабли вечные.

11