Comments 6
Привет!
Отличный материал!
Если не секрет — какой стек используете для инференса System 1 на клиенте? ONNX Runtime, TensorRT или что-то самописное на CUDA? И как тестировали нагрузку, когда на сцене действительно появляется 100 NPC с активным рефлекторным слоем?
Мы намеренно отказались от классических инференс-движков вроде ONNX Runtime и TensorRT для клиентской части System Они отлично подходят для "Когнитивной коры" (System 2), но для рефлексов на 60+ Гц их оверхед на CPU-GPU синхронизацию убивает всю идею Zero-latency. Поскольку System 1 — это сверхлегкие перцептроны без семантики, мы пошли по пути bare-metal. Мы "запекаем" веса обученной сети в сырые буферы и гоняем инференс напрямую через Compute Shaders (вычислительные шейдеры) или кастомные CUDA/DirectML ядра. По сути, это просто параллельное перемножение матриц, которое происходит прямо в VRAM, минуя прослойки ML-фреймворков. Выходные тензоры мапятся напрямую в буферы анимации (Blendshapes/Bones). Точную топологию слоев пока держим под капотом.
Что касается нагрузки в 100 NPC — честно признаюсь, полномасштабный стресс-тест роя мы еще не гоняли. Прямо сейчас мы продираемся через ад зависимостей на бэкенде, чтобы поднять хотя бы минимальное стабильное MVP
Хорошая демонстрация того, почему модель "один поток - одна LLM" не работает в real-time. Параллель с рефлекторной дугой понятна и точная.
Любопытный нюанс для тех, кто применяет похожую архитектуру не в геймдеве, а в браузерных агентах (browser-use, Playwright-based сценарии). Там появляется третий источник задержки, который не покрывает ни System 1, ни System 2: сам браузер. Антибот-системы могут добавить 2-7 секунд на JS-челлендж до того, как страница вообще отдаст DOM. Рефлекторный слой в этот момент просто ждет данных, которых ещё нет.
По сути, для веб-агентов нужен ещё один уровень - что-то вроде "вегетативной нервной системы": асинхронное управление сессиями и предварительная прогрузка контекста, которая не блокирует ни System 1, ни System 2.
Думали про применение архитектуры вне геймдева - или пока фокус именно на NPC/робототехнике?
Берем концепт на заметку.
Отвечая на вопрос про выход за пределы геймдева: пока фокус держим здесь, но мы уже пытаемся масштабировать подход на саму LLM.
После того как мы успешно обкатали рефлекторную дугу (System 1) на генерации лицевых анимаций (Blendshapes) в реалтайме напрямую из сырого звука, мы замахнулись на System 2. Идея: горячая подмена личности у Gemma 3 на лету. Мы хотели скрестить наш подход с динамическим переключением LoRA-адаптеров, чтобы NPC менял характер за доли секунды.
Но суровая реальность инди-R&D вносит коррективы. Наши вычислительные возможности и лимиты бесплатных облаков (сидим на карточках T4 16GB) не позволяют проводить тысячи тестов. Можете сами посчитать: с учетом времени на загрузку чекпоинтов, очистку памяти (gc.collect() + empty_cache()) и перестройку графов, за сегодня мы осилили от силы пару десятков чистых экспериментов.
Итог на данный момент: Глубинную «личность» (паттерны долгосрочного планирования) подменить на лету пока не вышло — нужно больше машинного времени на подбор гиперпараметров. НО, мы добились того, что семантика ответа и tone of voice меняются буквально за секунды при инъекции нужного адаптера в слои q_proj и v_proj.
Так что пруф-оф-концепт работает, архитектура тянет, мы просто упираемся в железо
Ваши разработки понравились военным. За вами уже выехали, не меняйте местоположение
Как мы пришили LLM «спинной мозг»: архитектура рефлексов для ИИ-агентов в 60 FPS