Привет, Хабр!
Интеграция современных LLM в геймдев, виртуальных ассистентов и робототехнику сейчас напоминает попытку прикрутить двигатель от космического шаттла к телеге. У вас есть невероятно умная модель, которая понимает тончайший контекст, но её inference latency (задержка вывода) убивает любой пользовательский опыт.
Пока ваш ИИ-NPC парсит входящий аудиопоток, отправляет запрос по API, ждет генерации ответа и распаковывает JSON в анимацию, проходит от 1 до 3 секунд. В динамичной среде — это вечность.
Недавно мы выкатили визуальный прототип нашего движка на одной развлекательной площадке. В ответ мы получили классическое: "Рано демонстрировать 'честные 60 FPS'. У вас там просто калейдоскоп беспорядочных кадров, мыло и кривые пальцы".
Ребята смотрели на дебаг-вывод и оценивали "обертку", совершенно не заметив "мотор". Визуализация была лишь сырым тестом инференса. В этой статье я расскажу, как мы построили Dual-Process Architecture (Система 1 + Система 2), которая позволяет ИИ реагировать на события за миллисекунды, менять личность на лету и обучаться в реальном времени.
? Проблема единого контура мышления
Современные агенты работают в один поток. Любой триггер (звук, попадание пули, фраза игрока) обрабатывается "тяжелой" когнитивной моделью. Это архитектурный тупик. Человек не решает дифференциальные уравнения, когда отдергивает руку от горячего чайника — работает рефлекторная дуга.
Мы решили скопировать биологию и разделили ИИ на два независимых, но связанных слоя.
System 2: «Кора головного мозга» (LLM)
Это может быть локальная Gemma 3, Llama или API GPT-4. Этот слой медленный (работает с частотой, скажем, 0.5 Гц). Его задача — стратегия, долгосрочная память и понимание фабулы.
Пример: Игрок украл у NPC предмет. System 2 неспеша анализирует это и выдает высокоуровневый вектор состояния: [Mood: Aggressive, Target: Player, Tactic: Attack].
System 1: «Спинной мозг» (Рефлекторный движок)
Здесь начинается магия. Это сверхлегкая кастомная нейросеть, которая вообще не понимает семантики. Она получает высокоуровневый вектор от System 2 и напрямую обрабатывает сырые входящие триггеры (например, амплитуду голоса игрока или вектор атаки).
Она работает с частотой 60 Гц (или быстрее) и выдает мгновенный отклик.
⚡ Что на самом деле умеет этот движок?
Те, кто критиковал наш прототип за "отсутствие ControlNet и плохую анатомию картинок", не поняли главного: наш слой System 1 в продакшене выдает не пиксели. Он генерирует массив весов для Blendshapes (лицевых костей) или углы Эйлера для суставов скелета, которые затем плавно интерполируются игровым движком (UE5/Unity).
Но избавление от лагов в анимации — это только верхушка айсберга. Оторвав "рефлексы" от "сознания", мы получили возможности, недоступные классическим LLM-агентам:
1. Обучение нейросети прямо «на лету» (On-the-fly training)
Так как System 1 — это крайне легковесная архитектура, мы можем корректировать её веса в реальном времени.
Пример из геймдева: Игрок постоянно атакует босса с левого фланга. Нам не нужно собирать датасет и отправлять LLM на дообучение. "Спинной мозг" босса корректирует веса прямо в бою, и через 30 секунд NPC начинает рефлекторно ставить блок слева еще до того, как анимация удара игрока завершится.
2. Мгновенная смена личности (Zero-latency Context Switch)
Вам больше не нужно перезагружать огромный промпт в контекст LLM и ждать обработки токенов, чтобы NPC сменил поведение. Достаточно "щелкнуть" рубильником на уровне рефлекторного слоя, подменив матрицу весов System 1. Персонаж мгновенно перейдет из состояния "расслабленный торговец" в "испуганная жертва" — изменится паттерн моргания, микромимика и скорость реакции на движения игрока.
? Где это применять? (Легкие API-кейсы)
Наша математика позволяет упаковать этот движок в легковесный API. Вот куда эта архитектура встает идеально:
Swarm AI (Управление толпой): Попробуйте запустить 100 независимых LLM-агентов на одной локации — ваш сервер расплавится. В нашей архитектуре 100 NPC работают на одном рефлекторном слое (System 1), потребляя минимум ресурсов, и лишь изредка обращаются к единому ядру System 2 за обновлением стратегических целей.
Динамическая сложность (Voice/Tempo adaptive): ИИ подстраивается под интонацию в войс-чате игрока или скорость его действий без задержек. Игрок закричал в микрофон — NPC рефлекторно вздрогнул.
Робототехника и IoT: Там, где задержка LLM в 2 секунды означает, что дрон врежется в стену, "спинной мозг" успеет принять 120 корректирующих решений на основе сырых данных с лидара.
? А где код и математика?
Я знаю, что на Хабре принято прикладывать ссылку на GitHub в конце статьи. Но мы пока оставим математику рефлекторного слоя под капотом. Можете считать это нашей коммерческой тайной (или вызовом для инженеров в комментариях — предлагайте ваши варианты архитектуры System 1 в комментах, интересно послушать идеи).
А как вы сейчас боретесь с inference lag в своих AI-агентах? Пытаетесь оптимизировать трансформеры или используете костыли с прегенерацией анимаций?
Комментарии (6)

Harrunos
23.03.2026 12:33Хорошая демонстрация того, почему модель "один поток - одна LLM" не работает в real-time. Параллель с рефлекторной дугой понятна и точная.
Любопытный нюанс для тех, кто применяет похожую архитектуру не в геймдеве, а в браузерных агентах (browser-use, Playwright-based сценарии). Там появляется третий источник задержки, который не покрывает ни System 1, ни System 2: сам браузер. Антибот-системы могут добавить 2-7 секунд на JS-челлендж до того, как страница вообще отдаст DOM. Рефлекторный слой в этот момент просто ждет данных, которых ещё нет.
По сути, для веб-агентов нужен ещё один уровень - что-то вроде "вегетативной нервной системы": асинхронное управление сессиями и предварительная прогрузка контекста, которая не блокирует ни System 1, ни System 2.
Думали про применение архитектуры вне геймдева - или пока фокус именно на NPC/робототехнике?
Livadies Автор
23.03.2026 12:33Берем концепт на заметку.
Отвечая на вопрос про выход за пределы геймдева: пока фокус держим здесь, но мы уже пытаемся масштабировать подход на саму 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.Так что пруф-оф-концепт работает, архитектура тянет, мы просто упираемся в железо

Dhwtj
23.03.2026 12:33Ваши разработки понравились военным. За вами уже выехали, не меняйте местоположение
DITk
Привет!
Отличный материал!
Если не секрет — какой стек используете для инференса System 1 на клиенте? ONNX Runtime, TensorRT или что-то самописное на CUDA? И как тестировали нагрузку, когда на сцене действительно появляется 100 NPC с активным рефлекторным слоем?
Livadies Автор
Мы намеренно отказались от классических инференс-движков вроде ONNX Runtime и TensorRT для клиентской части System Они отлично подходят для "Когнитивной коры" (System 2), но для рефлексов на 60+ Гц их оверхед на CPU-GPU синхронизацию убивает всю идею Zero-latency. Поскольку System 1 — это сверхлегкие перцептроны без семантики, мы пошли по пути bare-metal. Мы "запекаем" веса обученной сети в сырые буферы и гоняем инференс напрямую через Compute Shaders (вычислительные шейдеры) или кастомные CUDA/DirectML ядра. По сути, это просто параллельное перемножение матриц, которое происходит прямо в VRAM, минуя прослойки ML-фреймворков. Выходные тензоры мапятся напрямую в буферы анимации (Blendshapes/Bones). Точную топологию слоев пока держим под капотом.
Livadies Автор
Что касается нагрузки в 100 NPC — честно признаюсь, полномасштабный стресс-тест роя мы еще не гоняли. Прямо сейчас мы продираемся через ад зависимостей на бэкенде, чтобы поднять хотя бы минимальное стабильное MVP