Боги з гуртожитку

Глава 3. Frankenstein v2.0

Глава 3. Frankenstein v2.0

 

Олег Кассіні

 

Ці п’ять років ми, якщо бути чесним, відчували себе більш не як студенти, а як ентузіасти-маніяки.

Ми влаштували собі п’ятирічний марафон «а що буде, якщо…», і якось так вийшло, що університет у цьому процесі був радше фоновим шумом. Типу: десь там існують лекції, заліки, кафедра, і навіть люди, які щиро вірять, що ти приходиш “здобувати знання”. А ти приходиш… щоб мати Wi-Fi, студентський квиток і легальну причину не спати ночами і вкінці все ж тики отримати за це диплом.

Паралельно з лекціями, сесіями і священним ритуалом «все здати до дедлайну» ми жили в режимі: “ще один коміт (фіксація змін після етапу допрацювання елементу) — і я точно ляжу спати”.

Спойлер: ніхто спати не лягав, зачасту засинали над клавіатурою.

І от у цьому болоті з кави, локшини, пельменів й відкладених “на завтра” лабораторних ми примудрилися зробити три речі, які не мали права існувати в студентському житті без інвестора і психотерапевта.

По перше: власний ігровий двигун, на якому побудований наш власний серверний симулятор: так, саме “власний”. Ми не використовували не Unity. не Unreal. Не “давайте швидко на якомусь готовому”. Ні.

Готові графічні інструменти створені під класичну гру: картинка → кадри → враження гравця. А нам потрібна була реальність → стан світу → рішення агентів→взаємодія. Тобто не “намалювати красиво”, а “втілити стан речей”, причому так, щоб сервер міг це робити без клієнта, без віконця, без “натисни Play” — просто молотити симуляцію, поки ми живі й поки автомат подачі живлення не вирішить, що ми занадто багато використовуємо електрики.

Друга причина — ШІ. Для NPC важливо не те, як виглядає дерево, а що воно дерево, де воно, чи можна за ним сховатися, чи воно горить, чи там щось росте. Готові рушії дають тобі пікселі й фізику, а нам потрібен був семантичний шар: щоб будь-яка сутність у світі одразу мала “паспорт” (ідентифікатор, властивості, історію) і щоб ми могли за один запит віддати агенту компактний опис реальності, а не скріншот у стилі “ну ти сам розберись, що тут відбувається”.

Тому наш “графічний” рушій працював на інших принципах: рендер був однією з проекцій стану світу. Світ описувався як дані (сутність → компоненти → події), час ішов дискретними кроками, усе логувалося, відтворювалося й могло відкотитися назад. Бо якщо NPC раптом “згадав” те, чого не було, нам треба не молитися на удачу, а відкрити лог і подивитися, де реальність тріснула — і хто з нас її тріснув. Ні і «звісно», тріснути того когось по потилиці, аби перевіряв, перш ніж передає нам цей модуль, як готову частину.

І головне — ми будували цю структуру не “під сьогоднішній демо-запуск”, а під те, що планували створити далі: тисячі агентів, різні моделі, різні контексти, варіанти прискореної симуляція (коли світ може пробігти сотню років за годину), гілкування сценаріїв “а що буде, якщо…”, і генерація власних датасетів з поведінки. Тобто наша система мала бути не просто “движком для гри”, а фабрикою симуляцій реальності, яку можна під’єднувати до будь-якого «електронного мозку» — й дивитися, що станеться зі світом…

А в реальності все виглядало зовсім не як «великий план», а як список дрібних справ, який росте вночі, поки ти дивишся на нього, і тихо, без емоцій, з’їдає твою віру в поняття “вихідні”.

Ми тоді зібрали три речі, кожна з яких окремо вже була б достатньою причиною, щоб нас хтось чемно запитав: “ви точно здорові?”

По-перше — ми зібрали власний рушій.

По записах він проходив як «серверний симулятор», у наших розмовах — як «та штука, яка знову вирішила, що ми її недостойні», а за відчуттями це був Frankenstein v2.0: живий, сильний, упертий і з характером, який не вписувався ні в одну технічну специфікацію. Він міг запускатися з першого разу — і тоді ми дивилися на екран, як на диво, і навіть говорили йому “дякую”, хоча розуміли, що це звучить як початок діагнозу “першийого симптому поклоніння логам”. А міг зависнути так демонстративно, ніби ображався на саме наше існування.

По-друге — ми написали єдиний API керування персонажами.
Не тому що це було модно. Не тому що “так правильно”. А тому що в якийсь момент кожен із нас втомився писати взаємодію заново, як молитву перед сесією: у кожного свої костилі, свої дрібні правила, свої маленькі “якщо-інакше”, які рано чи пізно перетворювалися на хаос. Ми хотіли мову — одну.

Просту. Таку, щоб можна було сказати NPC: “Ось світ. Ось ти. Ось твої спогади. Ось твої цілі. Далі — вирішуй.”

І по-третє — ми зробили систему, де кожен NPC був окремим клієнтом зовнішнього ШІ.

З пам’яттю. З історією. І з тим, що спершу ми називали «особливостями поведінки», а потім чесно перейменували на «характер».

І тут важливий момент: ми не хотіли “розумних ботів”. Не хотіли манекенів з репліками, які чемно стоять на місці, доки ти не натиснеш кнопку “поговорити”. Ми хотіли мешканців світу, які не знають, що вони існують в симуляції. Щоб вони жили, а не виконували роль. Щоб могли змінити думку. Образитися. Злякатися. Збрехати. Забути. Або — запам’ятати щось на все життя.

Коли ми «експериментували». Ми чіпляли все, що хоч якось підходило під слово “інтелект” і не тікало одразу.




Поскаржитись




Використання файлів Cookie
З метою забезпечення кращого досвіду користувача, ми збираємо та використовуємо файли cookie. Продовжуючи переглядати наш сайт, ви погоджуєтеся на збір і використання файлів cookie.
Детальніше