Тиора, начинающий разработчик в сфере ИИ, создал систему Nebula — она позволяет синхронизировать мыслительный процесс ИИ с анимацией в Unity в реальном времени. Изначально система задумывалась как чат‑бот, но со временем превратилась в инструмент для воплощения ИИ в виде NPC в играх — это даёт возможность более полно выражать эмоции, в том числе визуально.
В процессе разработки Nebula прошла несколько этапов эволюции:
- Переход от веб‑интерфейса на React к игровому движку Unity — это повысило эмоциональность и реалистичность персонажей, позволило перейти от текстового диалога к иммерсивному опыту с визуальной мимикой и жестами.
- Замена LangChain на LangGraph: система определяет анализ настроений, поиск знаний и генерацию ответов как «узлы на графике», что позволяет NPC автономно принимать решения в зависимости от ситуации.
- Переход от работы в памяти к управлению базами данных (SQLAlchemy/SQLite) — это даёт возможность сохранять воспоминания о прошлых взаимодействиях и обеспечивать непрерывную работу.
- Интеграция MCP (Model Context Protocol) — благодаря этому NPC могут получать географическую информацию из реального мира (например, через Google Maps) и учитывать её в диалогах.
- Внедрение RAG (генерация расширений поиска) с использованием ChromaDB — система способна мгновенно находить нужную информацию и генерировать ответы, соответствующие настройкам NPC.
Для решения проблемы задержек при выдаче ответа разработчики внедрили потоковую передачу данных с помощью SSE (события, отправляемые сервером): каждый раз, когда предложение генерируется на стороне сервера, оно отправляет 1 токен в Unity. Также был разработан собственный протокол передачи внутриполосных сигналов — в текст встроены управляющие теги вроде [[ANIM:HAPPY]], благодаря чему Unity может воспроизводить анимацию в середине предложения.
На стороне сервера используется функция StreamingResponse от FastAPI — она отображает каждое событие в LangGraph в режиме реального времени. В конце предложения текущее эмоциональное значение передаётся в виде внутриполосного сигнала.
На стороне Unity применяется регулярное выражение (Regex), чтобы извлечь из полученного строкового буфера тег в формате [[КЛЮЧ:ЗНАЧЕНИЕ]]. Извлечённые теги мгновенно преобразуются в действия (например, переключение анимации), а в пользовательском интерфейсе отображается только оставшийся чистый текст.
Чтобы избежать ситуаций, когда NPC внезапно перестаёт отвечать на запросы из‑за ограничений API (429) или временного отключения сервера (503) в cloud LLM, разработчики внедрили тройную стратегию резервного копирования:
1. Основная модель: gemini-3.5-flash / gemini-3.1-flash-lite.
2. Первая резервная копия: llama-3.1-70b-универсальная (быстрая альтернатива в случае сбоя в работе облака).
3. Последняя линия защиты: Ollama (Llama 3.2) — полностью автономный локальный вывод. Даже если облачная сторона выйдет из строя, Ollama продолжит работу и передаст в Unity сигнал [[СИСТЕМА: ОТКЛЮЧЕНА]], чтобы сообщить, что NPC «немного не в себе».
В будущем разработчики планируют интегрировать распознавание речи (STT) и синтез речи (TTS), а также предоставлять мультимодальную визуальную информацию — это поможет создать NPC, которые будут выглядеть «живыми». Исходный код проекта доступен на GitHub: https://github.com/bshcl/nebula.