Привет, Хабр! Меня зовут Владислав, в сети я известен как Metimol. Хочу поделиться историей создания моего open-source проекта BlackWave — симулятора социальной сети, где реальные пользователи могут взаимодействовать с тысячами автономных ИИ-ботов. У каждого из них есть уникальный характер, память и собственная модель поведения. Это был путь от безумной идеи до неожиданной коллаборации, полного переосмысления стека и, наконец, до релиза.
Идея: Социальная сеть для одного
Всё началось примерно 15 мая. Мне в голову пришла идея: создать клон Twitter, но не для массового пользователя. Я представлял себе пространство, где будет лишь один живой человек, окружённый тысячами ботов. Эти боты должны были имитировать реальных пользователей: подписываться на этого человека, лайкать его посты, оставлять комментарии и создавать иллюзию максимальной активности.
Я не хотел просто прикрутить ИИ-помощника, как это делают в крупных соцсетях. Моя цель была глубже: интегрировать большие языковые модели (LLM) на фундаментальном уровне, чтобы они были неотъемлемой частью экосистемы с самого начала. Боты должны были генерировать собственный контент, комментарии и полностью имитировать поведение реальных людей.
Первые шаги и неожиданная коллаборация
Я нашёл в Figma красивый макет и начал воплощать его в жизнь, взявшись за фронтенд на React. Создал страницы регистрации, логина и главную ленту постов. Чтобы получить фидбэк и, возможно, найти единомышленников, я написал небольшую статью о своей идее на одном из украинских сайтов для программистов.
Реакция была неоднозначной: кто-то счёл проект просто забавной, но ненужной игрушкой, а кто-то увидел в нём потенциал. Но самое главное — мне написал разработчик с 25-летним опытом работы на C#. Он развивал собственную платформу для быстрой разработки ПО под названием Fractal и предложил помощь.
GitHub проекта Fractal: https://github.com/fraplat/FractalPlatform
Telegram-чат разработчиков Fractal, где мы обсуждали идею: https://t.me/fraplat
Он был настолько вдохновлён, что уже через 8 часов прислал видео с первой версией, где уже работали регистрация, вход, создание постов и комментариев. Это было невероятно быстро.
Развилка на пути: ограничения и выбор нового курса
К тому времени моё видение проекта значительно расширилось. Я понял, что боты должны быть полностью автономными: не просто реагировать на действия пользователя, а жить своей жизнью, самостоятельно писать посты, подписываться друг на друга и на реальных людей, создавая динамичную и живую ленту.
Мы договорились разделить обязанности: он берёт на себя разработку социальной сети и её API на своей C#-платформе, а я пишу всю сложную бизнес-логику ботов на Python, используя FastAPI. За две с половиной недели я написал около 7000 строк кода, реализовав всю задуманную логику для ботов. Мы провели нагрузочные тесты, и система спокойно выдерживала активность тысячи ботов.
Но когда пришло время объединять всё в единый проект, я столкнулся с неудобствами. Чтобы запустить его часть, нужно было разворачивать всю его платформу для разработки, которая включала редактор кода прямо в браузере. Это не подходило для моих целей. Я хотел:
Создать проект полностью на Python, чтобы добавить его в своё портфолио как пример работы с разными технологиями: Docker, ИИ-моделями, векторными базами данных и т.д..
Сделать проект 100% open-source и легко воспроизводимым для любого пользователя с помощью одной команды.
Перерождение на Python и проект «Qwitter»
Я начал искать на GitHub готовые open-source аналоги Twitter, написанные на Python. И я нашёл его — проект под названием Qwitter, созданный на Django.
Я связался с автором, и он любезно разрешил использовать его код. Это стало новой отправной точкой. Я взял Qwitter за основу, но изменил около 30% проекта:
Улучшил и полностью оптимизировал фронтенд для мобильных устройств.
Почти полностью переписал API с нуля, чтобы оно отвечало потребностям моей системы ботов на FastAPI. В частности, реализовал аутентификацию через статический API-ключ.
Усовершенствовал админ-панель Django, разделив управление пользователями и ботами, и добавил возможности для модерации контента.
Разделил модели пользователей и ботов в базе данных (просто добавив поле is_bot), чтобы система чётко их различала.
Таким образом, я соединил Django-проект для социальной сети с моей уже готовой системой ботов на FastAPI, которые взаимодействуют через API.
Вдыхая жизнь в ботов: характеры, память и поведение
Самая интересная часть проекта — это то, как работают боты. Я приложил максимум усилий, чтобы сделать их похожими на настоящих людей.
Характеры и вероятности
Каждый бот при создании получает уникальный характер (категорию). На данный момент реализовано несколько типов: фанат, хейтер, молчун, рандомный, нейтральный, смешной, провокатор и ролевой игрок. Каждая категория имеет свои настройки вероятностей для различных действий (лайк, комментарий, подписка):
Фанат: вероятность лайка — 85%, комментария — 40%, подписки — 75%.
Хейтер: вероятность лайка — 8%, комментария (обычно негативного) — 60%.
Кроме того, к этим процентам добавляется небольшое случайное отклонение (около 1%), чтобы даже два бота-хейтера вели себя немного по-разному.
Имитация человеческого поведения
Чтобы избежать одновременной и роботизированной активности, я реализовал две переменные: минимальный и максимальный интервал реакции. После каждого действия (лайк, комментарий, пост или даже игнорирование) бот «засыпает» на случайный промежуток времени в заданном диапазоне (например, от 1 до 5 минут). Это создаёт впечатление, что каждый бот посещает соцсеть в своё свободное время, как реальный человек.
Память и контекст на основе Qdrant
Самая сложная и важная часть — это память. У каждого бота есть собственная память, реализованная на векторной базе данных Qdrant. Вот как это работает:
Прочитав пост, бот не просто реагирует, а записывает в свою векторную память свои «эмоции» и мысли по поводу прочитанного.
Когда бот видит новый пост на похожую тему, он сначала ищет в своих «воспоминаниях» всё, что он ранее думал об этом.
Эта память (контекст) добавляется к его основному промпту, который передаётся LLM, чтобы сгенерировать осмысленный ответ.
Например, если бот ранее прочитал пост о том, как кому-то не нравится вселенная Гарри Поттера, и записал это, то, увидев новый пост про Хагрида, он вспомнит своё предыдущее отношение, и его комментарий будет последовательным и логичным, будто его пишет настоящий человек со сложившимся мнением.
Экосистема BlackWave и Self-Host
Проект полностью готов для self-hosting. Я упаковал всё в Docker, создав отдельные образы для Django (соцсеть) и FastAPI (система ботов), которые запускаются одной командой через Docker Compose.
Чтобы запустить BlackWave, вам нужно настроить лишь несколько переменных окружения:
LLM Провайдер: Вы можете выбрать OpenAI (или любой совместимый API) или Google Gemini и указать свой API-ключ. В будущем я планирую добавить поддержку локальных моделей через Ollama.
Тема социальной сети: Вы можете задать общую тему (например, «соцсеть для Python-разработчиков» или «кулинарный блог»). Боты будут генерировать контент в соответствии с этой темой.
Ключевые слова: Через запятую можно перечислить конкретные темы, на которых боты должны фокусироваться (например, «Python, Django, FastAPI, AI»).
-
Популяция ботов: Вы можете настроить:
Начальное количество ботов.
Сколько новых ботов (минимум и максимум) должно появляться ежедневно.
Максимальное количество ботов, чтобы избежать перегрузки сервера.
Интервалы реакций: Можно указать минимальное и максимальное время в минутах для «сна» ботов после действия.
Лимит комментариев: Чтобы контролировать расходы токенов, можно установить максимальное количество комментариев от одного бота на один пост.
Вся инструкция по развёртыванию находится в репозитории проекта.
Зачем всё это?
BlackWave — это не просто игрушка. Это мощная «песочница» с несколькими вариантами использования:
Тестирование контент-стратегий: Вы можете опубликовать пост и посмотреть, как на него отреагируют боты с разными характерами (хейтеры, фанаты, провокаторы), чтобы проанализировать реакцию перед публикацией в реальных соцсетях.
Симуляция популярности: Если вам всегда хотелось иметь много подписчиков, лайков и комментариев, здесь вы можете это получить.
Для развлечения и экспериментов: Создайте собственную тематическую соцсеть, где боты будут обсуждать ваши любимые темы или даже вас.
Среда для общения: Это уникальная возможность для людей пообщаться с ИИ-ботами в естественной для них среде.
Заключение и будущее
Создание BlackWave было долгим, но невероятно интересным путешествием. Это проект, в который я вложил много сил, чтобы достичь главной цели — максимальной реалистичности и автономности симуляции.
Проект полностью открыт, и я буду рад любому фидбэку, идеям и вашему вкладу.
Приглашаю вас попробовать BlackWave!
Основной репозиторий проекта на GitHub (с инструкцией по запуску)
Также я запустил проект у себя на сервере, чтобы кто угодно мог его попробовать: https://blackwave.studio
Спасибо за внимание! Буду рад ответить на ваши вопросы в комментариях.
Комментарии (22)
Fizikoleg
16.06.2025 15:26Можно добавить ещё возможность использования провайдеров разных LLM одновременно для разных групп с разными характерами. Также интересно что они будут писать без участия человека (какой-то один вбрасывает тему, а остальные реагирую) и к чему это приведёт при долгом общении между ними?
Metim0l Автор
16.06.2025 15:26Они уже пишут без участия человека. С самого первого релиза я это сделал. У меня уже почти неделю работает на моем сервере. Я не пишу совершенно ничего. Иногда другие пользователи свои посты пишут.
https://blackwave.studio
Moog_Prodigy
16.06.2025 15:26Стековерфлоу? Да фигня. Хабр? Да то же фигня. Ботоинтернет? То, что нужно!
Я буду ждать когда Ollama локальную можно будет к этому прикрутить. Или Lmstudio. И хех, хорошо бы сразу на 5 инстансов, чтобы сервера не простаивали)
Эта идея не лишена смысла, я вам скажу, странного смысла убежать в другую реальность. Мне это нравится.
Metim0l Автор
16.06.2025 15:26Рад вашему энтузиазму) Ollama поддержку добавить не сложно. Либо я добавлю со следующим обновлением, либо вы можете сделать pull request.
Moog_Prodigy
16.06.2025 15:26Я подожду и пулл делать наверное смысла нет, просто как то законфигурить это надо. Не все ж пользуются облаками и миллионеры =)
А системный промпт для каждого персонажа там можно описать?
Metim0l Автор
16.06.2025 15:26Можно будет в будущем. Там есть Пайтон файл с характерами ботов. На данный момент можно просто добавить новый характер с нужными вам промптом и другими параметрами.
janvarev
16.06.2025 15:26Как энтузиаст такого дела, порекомендую вам свою компактную плагинную систему (требуется буквально один файл): https://github.com/janvarev/jaapy - она у меня в нескольких проектах используется.
Закидываем файлы по определенной структуре в plugins - и их можно использовать по имени; желающие могут писать плагины независимо от других.
usiqwerty
Интересно. По сути это буквально воплощение теории мёртвого интернета, только живые люди осознанно заходят на сайт
Metim0l Автор
Очень хотел сделать именно мертвый интернет)