15 AI-агентов, общая RAG-память и один VPS: система, которая закрыла 20 моих иллюзий
Я соло-разработчик. Этой весной я решил, что вместо очередного «бота на RSI» соберу нормальную систему: команду автономных AI-агентов с общей памятью, которые круглосуточно исследуют крипторынок, читают научные статьи, следят за новостями, проверяют «гуру» из телеграма и ищут торговое преимущество. Всё это — на одном дешёвом VPS, на Python, cron и OpenAI API.
Система получилась. Она работает месяцами без моего участия, стоит копейки и делает ровно то, для чего строилась.
А теперь спойлер, ради которого стоит дочитать: главный результат работы этой машины — строгое, статистически честное доказательство того, что торгового edge у моего ретейл-подхода нет. Два десятка проверенных гипотез — два десятка трупов. И я считаю это лучшим, что система могла для меня сделать.
Обо всём по порядку: сначала архитектура и грабли (они переносимы на любую предметную область), потом — главная глава про кладбище гипотез.
Архитектура: общий мозг и рабочие пчёлы
Идея простая: не один монолитный «бот», а команда узких агентов, каждый из которых делает одну вещь, плюс общая память, через которую они обмениваются знаниями.
[исследователь статей]──┐
[куратор новостей]──────┤
[скоринг сигнальщиков]──┼──► LightRAG (общий мозг) ──► [оркестратор gpt-4o]
[финансовый агент]──────┤ ▲ │
[риск-агент]────────────┘ └───── мета-бриф ◄─────────┘
[сигнальные движки] ──► Telegram
Общий мозг — LightRAG. Это граф-RAG: документы не просто нарезаются на чанки и складываются в векторную базу, а из них извлекаются сущности и связи, поверх строится граф знаний. Запрос «что мы знаем про фандинг-арбитраж» поднимает не три случайных абзаца, а связанный подграф. LLM-бэкенд — gpt-4o-mini, эмбеддинги — text-embedding-3-small. Дёшево настолько, что о стоимости индексации можно не думать.
Рабочие пчёлы — 15+ Python-агентов на cron. Никакого Kubernetes, никаких очередей сообщений, никакого LangChain. Каждый агент — отдельный скрипт со своим расписанием:
Исследователь — раз в сутки ищет свежие научные статьи и описания торговых подходов, суммаризирует и пишет выжимки в мозг.
Куратор новостей — собирает RSS и открытые Telegram-каналы, фильтрует шум, кладёт значимое в мозг с тегами.
Скоринг «гуру» — самый весёлый агент. Парсит публичные сигналы крипто-сигнальщиков и проверяет их по факту: сопоставляет с реальными свечами и считает winrate и net-return после комиссий. Забегая вперёд: почти все «гуру» оказались коинфлипом или стабильным минусом. Один агент окупил всю систему сэкономленными подписками.
Финансовый агент — раз в сутки сверяет журнал сделок с данными биржевого API: комиссии, фандинг, проскальзывание. Расхождение — алерт.
Риск-агент — сторожевой пёс против переразмера позиций. Не генерирует идеи, а бьёт по рукам.
Сигнальные движки — трёхъярусный конвейер: сканер контекста (каждые 30 минут) → предупреждение «цена у уровня» (каждые 5 минут) → подтверждённый сигнал в Telegram через несколько секунд после закрытия бара (fast-poll вместо тупого ожидания следующего крона — биржа, кстати, нигде не документирует, когда именно финализируется свеча, так что система замеряет это сама).
Замыкает контур оркестратор — агент на gpt-4o, который читает выходы всех остальных и пишет мета-бриф: что нового, что противоречит чему, что стоит проверить. Бриф отправляется мне в Telegram и — важно — записывается обратно в мозг. Система читает собственные выводы недельной давности и опирается на них. Замкнутый контур с памятью.
Всё это живёт на VPS за несколько долларов в месяц. Общие расходы на API — единицы долларов в месяц. Это важная часть истории: такая система доступна одному человеку без бюджета.
Теперь — инженерные главы. Каждая — про грабли, на которые я наступил за вас.
Глава 1. LightRAG и восемь писателей: flock или гонки
LightRAG хранит граф и векторные индексы в файлах. Когда писатель один — всё прекрасно. Когда по cron одновременно просыпаются восемь агентов и каждый хочет записать свою порцию знаний — начинаются гонки: битые JSON, потерянные вставки, изредка — тихо покорёженный индекс, который вы заметите через неделю по странным ответам.
Решение скучное и потому надёжное — один файловый lock на всю запись:
import fcntl, contextlib
@contextlib.contextmanager
def rag_write_lock(path="/var/lock/rag_writer.lock"): with open(path, "w") as f: fcntl.flock(f, fcntl.LOCK_EX) # блокируемся, пока пишет другой try: yield finally: fcntl.flock(f, fcntl.LOCK_UN)
# в каждом агенте-писателе:
with rag_write_lock(): rag.insert(doc)
Да, писатели выстраиваются в очередь. Для системы, где вставка занимает секунды, а агенты просыпаются раз в час, это не проблема вообще. Проблема — убедить себя, что «ну наверное же там внутри есть блокировки». Нет. Проверяйте, что внутри у вашего RAG-фреймворка, прежде чем пускать к нему больше одного процесса.
Глава 2. Тихая смерть по крону
Cron — прекрасный оркестратор ровно до момента, когда процесс умирает молча. У меня коллектор рыночных данных однажды упал из-за изменения формата ответа API — и просто перестал писать файлы. Никаких исключений в мой Telegram, никаких следов. Cron честно запускал его дальше, скрипт честно падал на первой же строке парсинга. Я обнаружил дыру через две недели — двух недель данных нет и не будет.
После этого появился watchdog. Принцип: каждый агент в конце успешного прогона трогает свой heartbeat-файл, а отдельный скрипт раз в 10 минут проверяет mtime всех heartbeat’ов:
CHECKS = {"collector": 900, "news": 7200, "scorer": 90000} # сек
for name, max_age in CHECKS.items(): age = time.time() - os.path.getmtime(f"/run/hb/{name}") if age > max_age and not recently_alerted(name): # дебаунс! tg_alert(f"{name} молчит {age/60:.0f} мин") mark_alerted(name, ttl=3600)
Две неочевидные детали. Первая: проверять надо именно результат работы (mtime выходного файла или heartbeat, который трогается после успешной записи), а не «жив ли процесс» — зомби-процесс, который крутится, но ничего не пишет, пройдёт проверку по PID. Вторая: дебаунс алертов обязателен, иначе в первый же ночной инцидент вы получите 40 одинаковых сообщений и приучите себя их игнорировать. Алерт, который игнорируют, хуже отсутствия алерта.
Глава 3. Грабли имени root
Классика, о которую я ударился со всей силы. Отлаживал агент под root — быстро, удобно, всё работает. В процессе отладки агент создал выходной файл. Владелец файла, разумеется, root.
Дальше cron запускает агента уже под обычным пользователем. Агент пытается перезаписать файл — PermissionError. Часами. Молча (см. главу 2: watchdog тогда ещё не родился). Логи выглядели нормально, потому что падение происходило после основной работы, на последней записи.
Правило, которое я с тех пор соблюдаю религиозно: никогда не отлаживать под root то, что в проде бегает под юзером. Одна сессия отладки «по-быстрому из-под рута» оставляет за собой минное поле из файлов с неправильным владельцем, и подрываешься на нём не сразу, а в самый неожиданный момент.
Глава 4. Оркестратор: gpt-4o за три цента
Оркестратор — единственное место, где я использую большую модель. Он получает свежие выходы всех агентов и пишет мета-бриф. Главная опасность такого агента — он очень хочет быть полезным и находить закономерности там, где их нет. LLM — машина по производству правдоподобных нарративов, а в трейдинге правдоподобный нарратив без статистики — это яд.
Поэтому дисциплина вшита прямо в system-промпт:
SYSTEM = """Ты аналитик-скептик. Правила:
1. НЕ выдумывай альфу. Нет статистики — пиши «данных недостаточно».
2. Любое утверждение — со ссылкой на выход конкретного агента.
3. Противоречия между агентами выделяй, а не сглаживай.
4. Твоя ценность — в убийстве слабых гипотез, а не в генерации новых."""
resp = client.chat.completions.create( model="gpt-4o", temperature=0.3, messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": digest}],
)
Температура 0.3 — чтобы бриф был воспроизводимым и сухим. Один прогон стоит около $0.03. Пункт 4 промпта — самый важный, и позже вы поймёте почему.
Глава 5. Телеграм-мелочи, которые решают
Три маленькие вещи, которые сделали жизнь с ботом сильно приятнее:
Tap-to-copy. Цены и уровни оборачиваются в
<code>...</code>(parse_mode=HTML) — по тапу значение копируется в буфер. Мелочь, а пользуешься сто раз в день.Дебаунс уведомлений. Тот же принцип, что и у watchdog: одинаковые сообщения схлопываются в одно с TTL. Без этого любой шумный рынок превращает чат в водопад.
NOTG-флаг. Каждый агент понимает переменную окружения, при которой все отправки в Telegram заменяются на print. Тестовый прогон никогда не должен спамить в боевой чат — правило, которое выучиваешь ровно после одного нарушения.
Главная глава. Как система доказала, что edge нет
А теперь — то, ради чего всё затевалось, и то, что получилось вместо этого.
Изначальный план был наивен и прекрасен: агенты перелопачивают статьи, новости и данные, находят неэффективности, я их торгую. Вместо этого система превратилась в конвейер по проверке гипотез — и конвейер этот сработал как машина правды. Каждая гипотеза проходила один и тот же путь: бэктест с честной моделью издержек → out-of-sample проверка → поправка на множественные сравнения. Итог по ~16 дорогам:
22 технических индикатора. Проверка предсказательной силы на исторических данных: AUC = 0.516. Для справки: подбрасывание монетки даёт 0.5. Полсотни лет технического анализа — на толщину волоса от монетки.
5 таймфреймов. Может, дело в масштабе? Нет. Картина одинаково унылая на всех.
Календарные паттерны. Вот тут было больно, потому что сначала сработало: эффект дня недели с t-статистикой около 8! Я уже мысленно писал другую статью. Потом я вспомнил, что альткоины коррелированы с биткоином почти как один актив, и кластеризовал коррелированные монеты — эффективный размер выборки схлопнулся, t-статистика упала с 8 до 1.3. Не сигнал, а одна и та же монета, посчитанная тридцать раз.
Стакан и тики. Дисбаланс заявок, всплески объёма — на моём горизонте это шум. Возможно, на миллисекундах там что-то есть, но это игра HFT-фирм с колокацией, а не парня с VPS.
Свечные паттерны. Мой любимый экспонат. 4971 сделка по классическим паттернам: без комиссий −48%, а с учётом тейкер-комиссий −744%. Молоты и поглощения не просто не работают — они работают наоборот, и издержки превращают проигрыш в катастрофу.
Интрадэй вообще. Чем короче таймфрейм, тем больше сделок, тем больше комиссий и проскальзывания при том же (нулевом) сигнале. Sub-hour скальпинг для ретейла — ловушка издержек, эмпирически.
Комбинаторный перебор 32 фильтров. «А может, edge в комбинации?» Система честно перебрала тысячи комбинаций поверх базовой стратегии. Лучшая найденная комбинация оказалась… той, что уже была. А главное: Deflated Sharpe Ratio с поправкой на число проб понизил итоговую оценку — перебор не добавил информации, он добавил только штраф за подглядывание.
Фандинг и открытый интерес. Как фильтры режима — статистически неотличимы от нуля на форвард-периоде.
Mean-reversion («шорти хаи, лонгуй лои» — внутридневной возврат к среднему): −49% на out-of-sample.
Cross-sectional momentum (лонг лидеров, шорт аутсайдеров корзины): −44%. Академическая классика, которая на моих данных и с моими издержками не выжила.
Ранний вход по младшему таймфрейму (тренд старших ТФ + пробой младшего, вход до подтверждения бара): DSR 0.0. Ранний вход стабильно хуже подтверждённого — «задержка» подтверждения оказалась не издержкой, а единственным работающим фильтром.
Геометрия стопов и тейков. Сетка из 24 комбинаций стоп×тейк: winrate гулял от 18% до 61%, а матожидание на сделку не сдвинулось с места. Живая иллюстрация теоремы об опциональной остановке: геометрия меняет форму распределения исходов, но не его центр. «Подберу правильные стопы» — самая живучая иллюзия из всех.
Вход по откату (дождаться отката и войти по лучшей цене) — единственная гипотеза, дожившая до живого форвард-теста в параллель с базовой. Итог: строго хуже. Лучшая цена ↔ меньше исполнений, и пропускаются ровно те движения, которые кормят статистику.
Фандинг-carry — особый экспонат. Дельта-нейтральный сбор фандинга (лонг спот + шорт перп) — единственная стратегия, чьё преимущество существует по построению, а не по предсказанию: ты собираешь платежи маржинальных лонгистов, а не угадываешь цену. И тем не менее: 877 сделок бэктеста, Sharpe −1.11. Причина не в идее, а в масштабе — на маленьком депозите комиссии двух ног съедают фандинг целиком. Математика начинает сходиться примерно от $20k капитала. Единственная могила с табличкой «вернуться, когда вырастешь».
Двадцать дорог. Ни одна не прошла статистический порог — а единственная структурно honest-дорога упёрлась не в статистику, а в порог капитала.
Инструменты честности
Почему я верю этим результатам больше, чем очередному скриншоту «+300% за месяц»? Потому что каждый тест проходил через четыре фильтра:
Deflated Sharpe Ratio (Bailey, López de Prado). Если вы проверили N стратегий и показываете лучшую — её Sharpe надо дефлировать с учётом N. Формула наказывает за перебор: чем больше вы искали, тем выше порог. Это математическое оформление простой мысли: из тысячи обезьян с печатными машинками одна напечатает «эквити вверх».
Out-of-sample расколы. Параметры подбираются на одном куске истории, оцениваются на другом, который стратегия «не видела». Всё, что не выживает на OOS, — оверфит по определению.
Cost-modeling. Каждая сделка в бэктесте платит тейкер-комиссию, спред и проскальзывание. Пример со свечными паттернами (−48% → −744%) показывает, зачем: издержки не «немного портят» результат, они меняют знак вселенной.
Форвард-тест как единственный судья. Что бы ни показал бэктест, финальный вердикт выносит только живой рынок на данных, которых не существовало в момент постройки стратегии. Бэктест — это фильтр от заведомого мусора, не доказательство.
Забавная рекурсия: мульти-агентная система с общей памятью — модный AI-стек 2026 года — самым полезным своим выходом произвела вывод, который квантовая литература твердит лет двадцать. Но есть разница между «прочитал в книге» и «проверил своими руками на своих данных со своими издержками». Второе — выжигает иллюзии навсегда.
Что осталось после кладбища
Не пепел. Осталось три вещи:
Машина, убивающая ложные надежды за часы и доллары. Раньше проверка идеи «а что если торговать по фандингу» заняла бы у меня недели ручной возни и, скорее всего, закончилась бы самообманом. Теперь это конвейер: данные уже собраны, модель издержек написана, дефляция за перебор автоматическая. Гипотеза умирает за вечер и почти бесплатно. Я перестал носить в голове зоопарк «а вдруг сработает» — и это освобождает лучше любой медитации.
Понимание, где на самом деле рычаг ретейла. Не в сигнале. Сигнальную часть у вас всегда выиграют те, у кого данных больше, задержки меньше и математиков — этажами. Рычаг ретейла — размер позиции, контроль риска и выживание. Скучно? Да. Зато это единственные переменные, которые вы контролируете на 100% и которые не может арбитрировать никакой HFT.
Переносимая архитектура. Об этом — последняя глава.
Мораль. Двойная
Первая: мульти-агентные системы с общей RAG-памятью — это рабочая технология, доступная одному человеку. Не демо из твиттера, а система, которая месяцами автономно собирает, индексирует, перекрёстно проверяет и суммаризирует информацию за единицы долларов в месяц. Cron + Python + файловый lock + watchdog покрывают 95% того, для чего продают тяжёлые оркестраторы. Ценность — не в отдельном агенте, а в замкнутом контуре: агенты пишут в общую память, оркестратор читает всех и пишет выводы обратно, и система наращивает контекст, который не влезет ни в один промпт.
Вторая: в трейдинге ретейлу на сигнальном поле ловить нечего — и это доказуемо своими руками. Если вы читаете это и думаете «а соберу-ка я трейдинг-бота» — соберите. Серьёзно. Только договоритесь с собой заранее: Deflated Sharpe, out-of-sample, полные издержки, форвард-тест. С этими четырьмя фильтрами вы за пару месяцев получите либо настоящий edge (напишите мне, я хочу это видеть), либо — что вероятнее — прививку, которая сэкономит вам депозит и годы жизни. Мой самый ценный торговый инструмент не открыл ни одной сделки. Он закрыл двадцать иллюзий.
Куда это переносится
Отвяжите архитектуру от крипты — и останется универсальный каркас: общая граф-RAG-память + узкие агенты-сборщики + агент-критик + оркестратор с вшитым скепсисом. На него натягивается почти любая предметная область:
База знаний по документам компании — агенты индексируют документацию, переписку и регламенты в граф-RAG, сотрудники задают вопросы человеческим языком и получают ответы со ссылками на источники;
Мониторинг конкурентов — куратор новостей и скоринг источников работают для цен, релизов и вакансий конкурентов ровно так же, как работали для крипто-сигнальщиков;
Автоматическая отчётность — оркестратор, который еженедельно читает выходы всех систем и пишет человеческий бриф с противоречиями и аномалиями, нужен вообще любому бизнесу с больше чем одним источником данных.
Я делаю такие системы под заказ — от аудита задачи до работающего контура на вашей инфраструктуре. Если у вас есть гора неструктурированной информации и желание, чтобы она отвечала на вопросы, а не пылилась, — контакты в профиле.
А если вы всё-таки пришли сюда за граалем для трейдинга — перечитайте главную главу. Она и есть грааль, просто не тот, который вы искали.