BlackWave: Як я створив симулятор соцмережі з тисячами ШІ-ботів і чому перейшов на Python

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Привіт, спільното! Мене звати Владислав, в мережі я відомий як Metimol. Хочу поділитися історією створення мого open-source проєкту BlackWave — симулятора соціальної мережі, де реальні користувачі можуть взаємодіяти з тисячами автономних ШІ-ботів, кожен з яких має унікальний характер, пам’ять та поведінку. Це був шлях від божевільної ідеї до несподіваної колаборації, повного переосмислення стеку і, нарешті, до релізу.

Ідея: Соціальна мережа для одного

Все почалося приблизно 15 травня, коли мені в голову прийшла ідея: створити клон Twitter, але не для масового користувача. Я уявляв собі простір, де буде лише одна жива людина, оточена тисячами ботів. Ці боти мали б імітувати реальних користувачів: підписуватися на цю людину, лайкати її пости, залишати коментарі та створювати ілюзію максимальної активності.

Я не хотів просто прикрутити ШІ-помічника, як це роблять у великих соцмережах. Моя мета була глибшою: інтегрувати великі мовні моделі (LLM) на фундаментальному рівні, щоб вони були невіддільною частиною екосистеми з самого початку. Боти мали генерувати власний контент, коментарі та повністю імітувати поведінку реальних людей.

Перші кроки та несподівана колаборація

Я знайшов у Figma гарний макет, який ідеально підходив візуально, і почав втілювати його в життя, пишучи фронтенд на React. Створив сторінки реєстрації, логіну та головну стрічку постів. Щоб отримати фідбек та, можливо, знайти однодумців, я написав невелику статтю про свою ідею на DOU.ua.

Реакція була неоднозначною: хтось вважав проєкт просто забавною, але непотрібною іграшкою, а хтось побачив у ньому потенціал. Але найголовніше — мені написав розробник з 25-річним досвідом роботи на C#. Він розробив власну платформу для швидкого створення програмного забезпечення під назвою Fractal і запропонував допомогти.

Він був настільки натхненний, що вже за 8 годин надіслав відео з першою версією, де вже працювали реєстрація, вхід, створення постів та коментарів. Це було неймовірно швидко.

Розвилка на шляху: обмеження та вибір нового курсу

На той час моє бачення проєкту значно розширилося. Я зрозумів, що боти мають бути повністю автономними: не просто реагувати на дії користувача, а жити своїм життям, самостійно писати пости, підписуватися один на одного та на реальних людей, створюючи динамічну та живу стрічку.

Ми домовилися розділити обов’язки: він бере на себе розробку соціальної мережі та її API на своїй C#-платформі, а я пишу всю складну бізнес-логіку ботів на Python, використовуючи FastAPI. За два з половиною тижні я написав близько 7000 рядків коду, реалізувавши всю задуману логіку для ботів. Ми провели навантажувальні тести, і система спокійно витримувала активність тисячі ботів.

Але коли прийшов час об’єднувати все в єдиний проєкт, я зіткнувся з незручностями. Щоб запустити його частину, потрібно було розгортати всю його платформу для розробки, яка включала редактор коду в браузері. Це не підходило для моїх цілей. Я хотів:

  1. Створити проєкт повністю на Python, щоб додати його у своє портфоліо як приклад роботи з різними технологіями: Docker, ШІ-моделями, векторними базами даних тощо.
  2. Зробити проєкт 100% open-source та легко відтворюваним для будь-кого за допомогою однієї команди.

Переродження на Python та проєкт «Qwitter»

Я почав шукати на GitHub готові open-source аналоги Twitter, написані на Python. І я знайшов його — проєкт під назвою Qwitter, створений на Django.

Я зв’язався з автором, і він люб’язно дозволив використовувати його код. Це стало новою відправною точкою. Я взяв Qwitter за основу, але змінив близько 30% проєкту:

  • Покращив і повністю оптимізував фронтенд для мобільних пристроїв.
  • Майже повністю переписав API з нуля, щоб воно відповідало потребам моєї системи ботів на FastAPI, зокрема, реалізував аутентифікацію через статичний API-ключ.
  • Вдосконалив адмін-панель Django, розділивши управління користувачами та ботами, і додав можливості для модерації контенту.
  • Розділив моделі користувачів та ботів у базі даних, щоб система чітко їх розрізняла.

Таким чином, я поєднав Django-проєкт для соціальної мережі з моєю вже готовою системою ботів на FastAPI, які взаємодіють через API.

Вдихаючи життя в ботів: характери, пам’ять та поведінка

Найцікавіша частина проєкту — це те, як працюють боти. Я доклав максимум зусиль, щоб зробити їх схожими на справжніх людей.

Характери та ймовірності

Кожен бот при створенні отримує унікальний характер (категорію). Наразі реалізовано декілька типів: фанат, хейтер, мовчун, рандомний, нейтральний, смішний, провокатор та рольовий гравець. Кожна категорія має свої налаштування ймовірностей для різних дій:

  • Фанат: ймовірність лайка — 85%, коментаря — 40%, підписки — 75%.
  • Хейтер: ймовірність лайка — 8%, коментаря (зазвичай негативного) — 60%.

Крім того, до цих відсотків додається невелике випадкове відхилення (близько 1%), щоб навіть два боти-хейтери поводилися трохи по-різному.

Імітація людської поведінки

Щоб уникнути одночасної та роботизованої активності, я реалізував дві віртуальні змінні: мінімальний та максимальний інтервал реакції. Після кожної дії (лайк, коментар, пост або навіть ігнорування) бот «засинає» на випадковий проміжок часу в заданому діапазоні (наприклад, від 1 до 5 хвилин). Це створює враження, що кожен бот відвідує соцмережу у свій вільний час, як реальна людина.

Пам’ять та контекст на основі Qdrant

Найскладніша і найважливіша частина — це пам’ять. Кожен бот має власну пам’ять, реалізовану на векторній базі даних Qdrant. Ось як це працює:

  1. Прочитавши пост, бот не просто реагує, а й записує у свою векторну пам’ять свої «емоції» та думки щодо прочитаного.
  2. Коли бот бачить новий пост на схожу тему, він спочатку шукає у своїх «спогадах» все, що він раніше думав про це.
  3. Ця пам’ять (контекст) додається до його основного промпту, який передається 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 (з інструкцією по запуску):

github.com/metimol/BlackWave

Також я запустив BlackWave на своєму сервері, щоб більше людей могли спробувати це навіть не запускаючи у себе:

blackwave.studio

Дякую за увагу! Буду радий відповісти на ваші запитання в коментарях.

👍ПодобаєтьсяСподобалось7
До обраногоВ обраному5
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Це круто, дякую що поділилися!

Підписатись на коментарі