French Ship Madame De Pompadour
Python

French Ship Madame De Pompadour

Симулятор социальных взаимодействий и генератор историй, создающий научно-фантастические повествования на основе Star Trek. ООП Python/Flask с некоторыми структурами данных, Gemini API, фронтенд React/Vite/Tailwind.

GitHub|

Симулятор космического корабля с использованием ИИ и случайных действий, вдохновлённый сериалом «Звёздный путь».


FS Madame de Pompadour — это текстовый нарративный симулятор, создающий динамичные и непредсказуемые истории, разворачивающиеся в научно-фантастической вселенной. Нажимая «Далее», вы продвигаете симуляцию по одному ходу за раз, наблюдая за тем, как персонажи взаимодействуют друг с другом на основе сочетания заранее определённых моделей поведения и генеративного ИИ.

image

Цель состоит в том, чтобы создать «цифровой террариум», в котором сложная социальная динамика и неожиданные события возникают из простых правил и творческого потенциала ИИ.


Добро пожаловать на борт FS «Мадам де Помпадур».

Капитан Пепильо повернулся к матросу Гарольду и рявкнул: «Доложите о дисциплинарных мерах, принятых в отношении Вона».

Капитан Пепильо повернулся к станции связи и приказал: «Немедленно соедините меня с лейтенантом Дюбуа».

Тедрик наклонился к матросу Уэйлону и прошептал: «Ты видел, что наделал Фон? Похоже, у капитана Пепильо сегодня плохое настроение», — при этом незаметно поправляя форму, чтобы выглядеть презентабельно.

Константин быстро бросил взгляд на матроса Гарольда, а затем тихо пробормотал матросу Мохаммеду: «Интересно, что же на этот раз натворил Фон, чтобы навлечь на себя гнев капитана», — при этом незаметно полируя участок поручня поблизости.

Матрос Фон нервно поправляет форму, а затем, встретив взгляд матроса Эзекиила, бормочет себе под нос: «Сегодня будет долгий день», надеясь, что Эзекиил ответит.

Матрос Мохаммед, заметив, как Константин незаметно полирует перила, бросает взгляд на них и говорит: «Похоже, его нужно как следует отчистить, а? Может, нам вместе почистить этот участок, Константин?»

Член экипажа Гарольд, заметив напряжённую атмосферу и приказы капитана, небрежно поправил свою форму и пробормотал члену экипажа Себастьяну: «Похоже, Фон в затруднительном положении, а? Может, сходим выпьем кофе, чтобы разрядить обстановку, пока обязанности не стали ещё неприятнее?»

Увидев напряжение, матрос Уэстли поворачивается к матросу Флину и спрашивает: «Ты слышал, что случилось с Воном? Похоже, у капитана плохое настроение, может, нам стоит убедиться, что наши посты безупречно чисты?»

Капитан Пепильо спрашивает мнение матроса Гарольда.

Капитан Пепильо обращается к матросу Вону и требует: «Вон, немедленно доложите мне о состоянии вашего поста и систем».

Член экипажа Уэстли, заметив строгий приказ капитана, обращённый к Вону, быстро поворачивается к члену экипажа Флину и тихо говорит: «Флин, давай проверим шкафчики с припасами, думаю, капитан, возможно, захочет, чтобы был составлен перечень аварийных пайков», надеясь выглядеть занятым и избежать нежелательного внимания.

Член экипажа Мохаммед, видя напряжение вокруг капитана Пепильо, тихо подошёл к члену экипажа Эзекиилу и прошептал: «Как думаешь, стоит ли нам подготовить средства для уборки, на случай, если капитану понадобится что-то сделать быстро?»
imageimage

На этом демонстрационном снимке из симуляции FS «Мадам де Помпадур» мы наблюдаем сложную и динамичную социальную экосистему в действии. Система демонстрирует свою способность генерировать возникающие спонтанно сюжетные линии не за счёт заранее запрограммированных событий, а путём обеспечения взаимодействия независимых агентов, создавая богатую и правдоподобную картину жизни на нижних палубах.

Симуляция запускается под действием явного катализатора: высокопоставленная авторитетная фигура, капитан Пепильо, создает мгновенную напряженную обстановку с высокими ставками посредством прямых приказов. Этот «каскад команд» становится центральной точкой притяжения для всей социальной экосистемы. Обратите внимание, как его требования не просто запускают индивидуальные сценарии персонажей, а инициируют единое событие, сопровождающееся сильным давлением. Это демонстрирует новый акцент системы на иерархической структуре, где действия одного агента могут диктовать направление, настроение и стратегическую цель для всех остальных персонажей в общей среде.

По мере того как приказы капитана распространяются по экипажу, мы наблюдаем появление сложных, реактивных социальных стратегий. Члены экипажа не просто продолжают заниматься рутинными задачами; они немедленно начинают осмысливать новую реальность. Посмотрите, как такие персонажи, как Тедрик и Константин, образуют временные группы для обсуждения, чтобы посплетничать и проанализировать ситуацию, пытаясь разобраться в новой динамике власти. Ещё более впечатляет то, что матрос Уэстли демонстрирует более высокий уровень эмерджентной логики, активно разрабатывая стратегию выживания — предлагая, чтобы он и один из товарищей по экипажу делали вид, будто заняты служебными делами, чтобы избежать гнева капитана. Это не заранее запрограммированное поведение, а логический социальный вывод, сгенерированный ИИ в ответ на воспринятую угрозу, демонстрирующий высокую способность к оценке рисков.

Этот короткий эпизод раскрывает мощный механизм эмерджентного повествования, который органично сочетает профессиональные роли с личными переживаниями. Мы видим, как член экипажа Гарольд вынужден переключиться с непринужденной, тихой беседы на высказывание формального, профессионального мнения по требованию капитана, что иллюстрирует способность системы управлять противоречивыми социальными контекстами. Вся симуляция вращается вокруг центрального конфликта с фон, создавая единую нарративную «скороварку», а не набор отдельных, тихих драм. Механизм вышел за рамки простого воссоздания жизненной картины и теперь демонстрирует способность моделировать сложную сеть социальных расчётов, стратегических альянсов и возникающего группового мышления в условиях давления.

FS Madame de Pompadour построена на современной, развязанной веб-архитектуре, отделяющей бэкенд-движок симуляции от фронтенд-пользовательского интерфейса для обеспечения модульности и производительности.

Загрузка изображения.png…

Бэкенд: Python, Flask и Gemini

Весь ядро симуляции и логика находятся в бэкенде на Python.

  • Python: Естественный выбор благодаря мощным возможностям обработки данных и надёжной экосистеме ИИ/машинного обучения. Объектно-ориентированный подход позволяет создавать модульные классы Crewman и ActorManager, которые легко расширять.
  • Flask: Легкий и гибкий веб-фреймворк, используемый для создания API, с которым взаимодействует фронтенд. Его единственная задача — принимать запрос на следующий ход, запускать логику симуляции и возвращать результат.
  • Google Gemini: «Призрак в машине». Проект интегрирован с API Gemini для обеспечения работы своей интеллектуальной системы действий. Когда персонаж решает действовать «разумно», бэкенд отправляет запрос — содержащий контекст корабля, роль персонажа и историю недавних действий — модели Gemini, которая затем возвращает творческое, учитывающее контекст действие.

Фронтенд: React, Vite и Tailwind CSS

Пользовательский интерфейс представляет собой быстрое и современное одностраничное приложение (SPA).

  • React: Мощная библиотека JavaScript для создания динамичных и компонентных пользовательских интерфейсов. Весь журнал событий представляет собой компонент React, который эффективно обновляется по мере получения новых действий из бэкенда.
  • Vite: инструмент сборки фронтенда нового поколения, обеспечивающий чрезвычайно быстрый сервер разработки и оптимизированные производственные сборки.
  • TypeScript: используется для добавления статической типизации в код JavaScript, что улучшает удобство работы разработчиков и сокращает количество ошибок.
  • Tailwind CSS: CSS-фреймворк, ориентированный на утилиты, который позволяет быстро и последовательно применять стили непосредственно в HTML, как видно по именам классов компонентов.

Общая архитектура

Алгоритм выполнения одного хода прост и эффективен:

  1. Пользователь нажимает кнопку «Далее» в пользовательском интерфейсе на базе React.
  2. Фронтенд отправляет запрос fetch на конечную точку /action бэкенда, работающего на Flask.
  3. Сервер Flask вызывает Python-модуль ActorManager, который запускает один ход симуляции, при необходимости обращаясь к API Gemini.
  4. Бэкенд возвращает результирующую строку действия в виде объекта JSON.
  5. Фронтенд на базе React получает JSON, обновляет своё состояние и отображает новое событие на экране, автоматически прокручивая его до последней записи.