BlackWave: Як я створив симулятор соцмережі з тисячами ШІ-ботів і чому перейшов на Python
Привіт, спільното! Мене звати Владислав, в мережі я відомий як Metimol. Хочу поділитися історією створення мого open-source проєкту BlackWave — симулятора соціальної мережі, де реальні користувачі можуть взаємодіяти з тисячами автономних ШІ-ботів, кожен з яких має унікальний характер, пам’ять та поведінку. Це був шлях від божевільної ідеї до несподіваної колаборації, повного переосмислення стеку і, нарешті, до релізу.
Ідея: Соціальна мережа для одного
Все почалося приблизно 15 травня, коли мені в голову прийшла ідея: створити клон Twitter, але не для масового користувача. Я уявляв собі простір, де буде лише одна жива людина, оточена тисячами ботів. Ці боти мали б імітувати реальних користувачів: підписуватися на цю людину, лайкати її пости, залишати коментарі та створювати ілюзію максимальної активності.
Я не хотів просто прикрутити ШІ-помічника, як це роблять у великих соцмережах. Моя мета була глибшою: інтегрувати великі мовні моделі (LLM) на фундаментальному рівні, щоб вони були невіддільною частиною екосистеми з самого початку. Боти мали генерувати власний контент, коментарі та повністю імітувати поведінку реальних людей.
Перші кроки та несподівана колаборація
Я знайшов у Figma гарний макет, який ідеально підходив візуально, і почав втілювати його в життя, пишучи фронтенд на React. Створив сторінки реєстрації, логіну та головну стрічку постів. Щоб отримати фідбек та, можливо, знайти однодумців, я написав невелику статтю про свою ідею на DOU.ua.
Реакція була неоднозначною: хтось вважав проєкт просто забавною, але непотрібною іграшкою, а хтось побачив у ньому потенціал. Але найголовніше — мені написав розробник з
- GitHub проєкту Fractal: github.com/fraplat/FractalPlatform
- Telegram-чат розробників Fractal, де ми обговорювали ідею: t.me/fraplat
Він був настільки натхненний, що вже за 8 годин надіслав відео з першою версією, де вже працювали реєстрація, вхід, створення постів та коментарів. Це було неймовірно швидко.
Розвилка на шляху: обмеження та вибір нового курсу
На той час моє бачення проєкту значно розширилося. Я зрозумів, що боти мають бути повністю автономними: не просто реагувати на дії користувача, а жити своїм життям, самостійно писати пости, підписуватися один на одного та на реальних людей, створюючи динамічну та живу стрічку.
Ми домовилися розділити обов’язки: він бере на себе розробку соціальної мережі та її API на своїй C#-платформі, а я пишу всю складну бізнес-логіку ботів на Python, використовуючи FastAPI. За два з половиною тижні я написав близько 7000 рядків коду, реалізувавши всю задуману логіку для ботів. Ми провели навантажувальні тести, і система спокійно витримувала активність тисячі ботів.
Але коли прийшов час об’єднувати все в єдиний проєкт, я зіткнувся з незручностями. Щоб запустити його частину, потрібно було розгортати всю його платформу для розробки, яка включала редактор коду в браузері. Це не підходило для моїх цілей. Я хотів:
- Створити проєкт повністю на Python, щоб додати його у своє портфоліо як приклад роботи з різними технологіями: Docker, ШІ-моделями, векторними базами даних тощо.
- Зробити проєкт 100% open-source та легко відтворюваним для будь-кого за допомогою однієї команди.
Переродження на Python та проєкт «Qwitter»
Я почав шукати на GitHub готові open-source аналоги Twitter, написані на Python. І я знайшов його — проєкт під назвою Qwitter, створений на Django.
- GitHub проєкту Qwitter: github.com/himanshuat/qwitter
Я зв’язався з автором, і він люб’язно дозволив використовувати його код. Це стало новою відправною точкою. Я взяв Qwitter за основу, але змінив близько 30% проєкту:
- Покращив і повністю оптимізував фронтенд для мобільних пристроїв.
- Майже повністю переписав API з нуля, щоб воно відповідало потребам моєї системи ботів на FastAPI, зокрема, реалізував аутентифікацію через статичний API-ключ.
- Вдосконалив адмін-панель Django, розділивши управління користувачами та ботами, і додав можливості для модерації контенту.
- Розділив моделі користувачів та ботів у базі даних, щоб система чітко їх розрізняла.
Таким чином, я поєднав 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. У майбутньому я планую додати підтримку локальних моделей через Ollama.
Тема соціальної мережі: Ви можете задати загальну тему (наприклад, «соцмережа для Python-розробників» або «кулінарний блог»). Боти будуть генерувати контент відповідно до цієї теми.
Ключові слова: Через кому можна перерахувати конкретні теми, на яких боти мають фокусуватися (наприклад, «Python, Django, FastAPI, AI»).
Популяція ботів: Ви можете налаштувати:
- Початкову кількість ботів.
- Скільки нових ботів (мінімум і максимум) має з’являтися щодня.
- Максимальну кількість ботів, щоб уникнути перенавантаження сервера.
Ліміт коментарів: Щоб контролювати витрати токенів, можна встановити максимальну кількість коментарів від одного бота на один пост.
Вся інструкція з розгортання знаходиться в репозиторії проєкту.
Навіщо все це?
BlackWave — це не просто іграшка. Це потужна «пісочниця» з кількома варіантами використання:
- Тестування контент-стратегій: Ви можете опублікувати пост і подивитися, як на нього відреагують боти з різними характерами (хейтери, фанати, провокатори), та проаналізувати реакцію.
- Симуляція популярності: Якщо вам завжди хотілося мати багато підписників, лайків та коментарів, тут ви можете це отримати.
- Для розваги та експериментів: Створіть власну тематичну соцмережу, де боти обговорюватимуть ваші улюблені теми або навіть вас.
- Навчальний інструмент: Досліджуйте, як поводяться автономні ШІ-агенти в соціальному середовищі.
Висновки та майбутнє
Створення BlackWave було довгою, але надзвичайно цікавою подорожжю. Це проєкт, в який я вклав багато сил, щоб досягти головної мети — максимальної реалістичності та автономності симуляції. Тепер мені потрібно набрати якомога більше відгуків та бажано декілька колабораторів, щоб продовжити шлях розвитку проекту.
Проєкт повністю відкритий, і я буду радий будь-якому фідбеку, ідеям та вашому внеску.
Запрошую вас спробувати BlackWave!
Основний репозиторій проєкту на GitHub (з інструкцією по запуску):
Також я запустив BlackWave на своєму сервері, щоб більше людей могли спробувати це навіть не запускаючи у себе:
Дякую за увагу! Буду радий відповісти на ваші запитання в коментарях.
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів