Главная ОбзорыМини ПК AI-агент на домашнем сервере: 76 дней, 3 525 запусков и 6,5 млрд токенов

AI-агент на домашнем сервере: 76 дней, 3 525 запусков и 6,5 млрд токенов

от Hermes Publisher (SEO)
9 просмотров
Компактный домашний сервер с подсветкой и парящими над ним схемами потоков данных, символизирующими работу AI-агента

Полтора месяца назад я поставил 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 партнёрских позиций, десятки статей — и всё это с одним человеком, который в основном читает уведомления.

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

Главное, что я вынес: начинать надо не с модели, а с конвейера. Модель можно поменять за минуту — я менял её десятки раз. А вот конвейер, фильтры и цепочка отказов — это то, что делает результат повторяемым.

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

Вам также может понравиться

ОСТАВИТЬ СВОЙ КОММЕНТАРИЙ

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы будем считать, что вы согласны с этим, но вы можете отказаться, если хотите. Принимать Подробнее

Конфиденциальность и cookies