Полтора месяца назад я поставил AI-агента на домашний сервер и отдал ему три рутинные задачи: обновления приложений, партнёрские публикации и статьи для двух сайтов. Ниже — что из этого получилось, с цифрами из собственных логов агента, включая неудачные запуски и то, что пришлось переделывать.
Три задачи, которые надо было отдать
Все три — про повторяющиеся действия, где человек ошибается не от незнания, а от усталости.
Первая. Каждое утро проверить, не вышло ли обновление приложения для Android TV: скачать, отсеять мусор, опубликовать пост. Полчаса, но каждый день.
Вторая. Партнёрские ссылки. Взять пост, найти в нём ссылку, убедиться, что она живая, сделать свою, переписать текст так, чтобы он не был копией, прикрепить картинку товара, выложить. Пять-семь минут на позицию.
Третья. Статьи на сайты про технику: найти источники, проверить цифры, собрать структуру, расставить метатеги, проследить, чтобы кэш обновился.
Первое подключение: один ключ вместо пяти
Агент — это Hermes, поставлен на обычный домашний сервер под Ubuntu. Дальше нужен провайдер моделей.
Стандартный путь — завести аккаунты у Anthropic, OpenAI, Google и DeepSeek: пять ключей, пять биллингов, пять наборов лимитов, пять мест, где что-то может отвалиться. Я пошёл другим путём и подключил PlusVibeAPI как один OpenAI-совместимый эндпоинт.
Технически это заняло минут пятнадцать. Провайдер описывается в конфиге четырьмя полями: базовый URL, режим API (chat_completions), имя переменной окружения с ключом и список моделей. Дальше агент общается с ним ровно так же, как с официальным API OpenAI — тот же формат запроса /v1/chat/completions, тот же формат ответа, никаких адаптеров.
Что это дало на практике — один ключ и один баланс на весь стек. В каталоге провайдера больше сотни моделей: Claude, GPT, Gemini, DeepSeek, Qwen, GLM, Grok, Kimi, Mistral, MiniMax, Perplexity. Переключение между ними — правка одной строки в конфиге, а не новый договор с новым вендором.
Ссылка выше реферальная: если оформите подписку по ней, автор получит бонус от сервиса. Цена для вас от этого не меняется.
Разные модели под разные задачи
Это то, что я понял не сразу: разные задачи должны идти на разные модели. Дорогая нужна там, где она действительно думает. Дешёвая — там, где она переписывает текст по шаблону.
- Основная работа агента — диалог, планирование, разбор ошибок, написание статей — идёт на DeepSeek V4 Flash. Не самая умная модель в каталоге, но для большинства задач её хватает, а стоит она на порядок меньше флагманов.
- Служебные мелочи — сжатие длинного контекста, генерация заголовков сессий — вынесены на самые дешёвые модели. Вызовов там много, денег почти нет. Если этого не разделить, служебные задачи незаметно съедают бюджет.
- Сложные случаи — нестандартные ошибки, длинные тексты с жёсткими требованиями — включаю Opus или старшие GPT вручную. Это редкие точечные включения, а не режим по умолчанию.
- Картинки — отдельный плагин через медиа-API того же провайдера, модель GPT Image 2. Работает асинхронно: запрос в очередь, опрос статуса каждые три секунды, таймаут 90 секунд, до 16 референсных изображений. Обложки для статей делает он же.
Что сломалось на второй неделе
В логах появилось HTTP 503: Сервис временно перегружен. Не каждый день, но регулярно, обычно в часы пик. По стандарту RFC 9110 это «сервер временно не может обработать запрос» — штатная ситуация, которую положено пережидать.
Для чата это «нажми ещё раз». Для конвейера, который должен отработать в 10:00 без меня, — провал задачи: пост не вышел, статья не опубликовалась, а я узнал об этом вечером.
Решение — цепочка резервных моделей. Основная, за ней ещё четыре на разных моделях и провайдерах. Если первая отвечает 503 или таймаутом, агент молча переключается на следующую и доводит работу до конца. Я вижу это в логе, но не вижу в результате.
Урок, который стоил нескольких сорванных публикаций: надёжность системы — это не самая умная модель, а самая скучная цепочка отказов. Один провайдер — одна точка отказа. Пять в цепочке — уже нет.
Цифры за 76 дней
Всё ниже — из логов самого агента, а не из ощущений.
Показатель |
Значение |
|---|---|
Период работы |
76 дней |
Запусков агента |
3 525 |
В среднем в день |
46 запусков |
Пиковый день |
74 запуска |
Обработано токенов всего |
6,54 млрд |
Из них через модели PlusVibeAPI |
801,6 млн |
В среднем в день |
86 млн токенов |
Задач по расписанию |
21 |
Постов в Telegram-канал |
345 |
Обработано партнёрских позиций |
945 |
Запусков с ошибкой |
241 (6,8%) |
Здесь нужна честная оговорка, иначе цифры врут.
«6,5 млрд токенов» звучит громко, но это не 6,5 млрд слов. Каждый ход агента отправляет модели всю историю диалога заново — поэтому входных токенов в разы больше выходных, и тарифицируются они по разной цене (прайс провайдера). У меня соотношение примерно 91 к 1: 6,46 млрд на вход, 70,8 млн на выход. Вот второе число — это реальный объём написанного текста. Первое — объём перечитанного.
И ещё одна честная цифра: 6,8% запусков завершились ошибкой. Это не сбой сервиса — это сумма всего: перегруженных ответов, таймаутов, кривых промптов, битых файлов и одного случая, когда служебный кэш положил сразу все задачи. Система, которая заявляет 100% успеха, просто не логирует ошибки.
Конвейер обновлений: 345 постов без моего участия
Логика простая. В 9 утра задача по расписанию обходит источники, скачивает найденные сборки и прогоняет их через фильтр. Фильтр отсекает всё не по теме: телефоны, VPN, файлы больше 50 мегабайт, мусорные сборки. Остальное складывается в очередь. С 10 до 17 часов публикатор берёт позиции из очереди и выкладывает — по одной, с проверкой, что файл на месте и версия совпадает.
Самое полезное здесь — не публикация, а фильтр. Публиковать агент умеет и без меня, а вот не публиковать лишнее — это то, что отличает рабочий конвейер от ленты мусора.
Партнёрские публикации: 945 позиций
Каждая — это пять-семь минут ручной работы. Что делает агент: разворачивает короткую партнёрскую ссылку в канонический адрес и проверяет, что товар ещё продаётся; создаёт новую ссылку со своей маркировкой; переписывает текст так, чтобы он не совпадал с исходником; вытаскивает из медиаблока фотографию именно товара, а не аватарку канала; публикует. Дедупликация по идентификатору исходного сообщения — чтобы один пост не ушёл дважды.
Отдельно про маркировку. Партнёрская ссылка возвращает рекламный идентификатор вместе с адресом, и он попадает в текст поста сразу, а не «добавим потом». Это требование закона, и такие вещи лучше один раз зашить в код, чем помнить про них каждый вечер.
Статьи: конвейер, который пишет, но не выдумывает
Два сайта про технику, по три статьи в неделю на каждом. Тему выбирает не модель, а скрипт: он читает контент-план, сверяет адреса с уже опубликованным и отдаёт агенту первую свободную тему. Модель не может «забыть» тему или взять ту, что уже вышла.
Редполитика зашита жёстко: минимум два источника, из них хотя бы один первичный — стандарт, документация, спецификация; проверка на дубликат перед публикацией; никаких заявлений о личных испытаниях, если испытаний не было; цифры только из источников.
Автоматизация вскрыла два дефекта, которые глазами я бы не нашёл никогда. Первый: тема сайта выводила заголовок дважды, а на мобильных не выводила вообще — ноль H1, то есть для поисковика статья без заголовка. Второй: плагин «защиты внешних ссылок» оборачивал все адреса в служебный редирект, а тот отдавал 404 — то есть все ссылки на источники были битыми.
Что я бы сделал иначе
- Начал бы с логирования, а не с функций. Первые две недели я не понимал, куда уходят токены и почему задачи иногда падают. Потом собрал аудит по каждому запуску — и картина появилась сама.
- Сразу сделал бы health-check для служебных файлов. Один битый кэш длины контекста однажды положил все задачи разом: они падали не с ошибкой модели, а на этапе чтения файла.
- Не давал бы агенту права удалять файлы в рабочих папках. Сканер однажды удалил две сборки, уже поставленные в очередь на публикацию, — просто потому, что счёл их дублями по хешу. Пришлось вводить список защищённых путей.
- Разделил бы модели по задачам с первого дня. Пока всё шло на одной дорогой модели, счёт рос быстрее, чем результат.
Вывод
За 76 дней агент отработал 3 525 запусков: 345 постов, 945 партнёрских позиций, десятки статей — и всё это с одним человеком, который в основном читает уведомления.
Это не «ИИ заменил команду». Это «ИИ забрал ту часть работы, которую человек делает хуже машины»: не забыть, не пропустить, не перепутать версию, не выложить дважды, поставить маркировку в нужное поле. Всё, что требует вкуса и решения, осталось за мной — редполитика, выбор тем, что публиковать, а что нет.
Главное, что я вынес: начинать надо не с модели, а с конвейера. Модель можно поменять за минуту — я менял её десятки раз. А вот конвейер, фильтры и цепочка отказов — это то, что делает результат повторяемым.
Кстати, для домашнего сервера под такие задачи не нужна отдельная стойка: подойдёт обычный компактный мини-ПК — мощности в нём с запасом, а потребление и шум в разы ниже.

