Как скрестить визуальную новеллу с LLM и настольным питомцем на Rust
Большинство интерфейсов для работы с нейросетями выглядят одинаково скучно. Это либо клоны ChatGPT со списком тредов слева и полем ввода справа, либо утилиты командной строки для терминала. Но если вы когда-нибудь играли в японские визуальные новеллы (Galgame), то знаете, насколько важны визуальный контакт, смена эмоций персонажа и контекст происходящего.
Недавно наткнулся на любопытный проект LingChat, автор которого попытался соединить механику диалогов из визуальных новелл, систему виртуального настольного питомца и современные языковые модели. Самое приятное для нас с вами: под капотом тут честный Rust, а не очередной прожорливый Electron.
Что внутри проекта
Репозиторий LingChat предлагает переосмыслить привычный формат общения с ИИ. Вместо сухого окна чата перед нами анимированный персонаж, который реагирует на диалог, следит за вашим расписанием и может участвовать в интерактивных сценариях.
Проект решает сразу несколько задач:
- Эмоциональный отклик спрайтов. Модель не просто генерирует текст, но и размечает собственное эмоциональное состояние. В зависимости от тона ответа персонаж меняет позы, выражения лица и анимации.
- Режим настольного питомца (Desktop Pet). Персонаж живет прямо поверх открытых окон вашей системы, реагируя на клики и действия пользователя в фоне.
- Планировщик и трекер задач. В диалоговый движок встроена работа с календарем и напоминаниями, так что ассистент вовремя подскажет о созвоне или дедлайне.
- Сюжетные модули с ветвлением. Автор добавил поддержку сценарных веток, превращая обычный чат в интерактивную игру с проверками условий и выборами.
Почему важен выбор Rust
Обычно подобные интерактивные приложения делают на связке Electron + React или Unity. У обоих подходов есть неприятный минус: прожорливость. Настольный питомец должен висеть в фоне весь рабочий день, не отъедая половину оперативной памяти и не раскручивая кулеры ноутбука.
LingChat написан на Rust. Это дает низкое потребление ресурсов при постоянной отрисовке спрайтов и обработке событий мыши. Базовая логика приложения работает быстро, отдавая основные ресурсы системы под локальный инференс моделей или параллельные рабочие задачи.
В коде реализована парсинг-система для обработки тегов эмоций из ответов LLM. Когда модель возвращает ответ, движок перехватывает специальные маркеры настроения до вывода текста на экран и синхронно переключает кадры анимации персонажа.
Где это можно применить
Кроме прямого использования ради фана и ностальгии по старым виртуальным питомцам вроде Shimeji, в проекте есть интересные архитектурные идеи для разработчиков.
Во-первых, это отличный референс для создания NPC в инди-играх. Если вы хотите внедрить в свой проект персонажей на базе генеративного ИИ, здесь можно подсмотреть, как связывать текстовый вывод модели с изменением состояния анимационного графа.
Во-вторых, проект хорошо показывает механику создания персонализированных помощников с характером. Вместо безликого бота вы получаете компаньона, параметры поведения и характер которого настраиваются через системные промпты и конфигурационные файлы.
С чего начать знакомство
Исходный код открыт под лицензией AGPL-3.0. Документация и гайды по настройке собраны на официальном сайте проекта https://lingchat.wiki/.
Для запуска вам понадобится настроенный тулчейн Rust и API-ключ к совместимому LLM-провайдеру (или локально поднятый сервер вроде Ollama / vLLM с поддержкой OpenAI-совместимого API).
Если вам давно хотелось собрать своего кастомного настольного компаньона или поэкспериментировать с динамической сменой спрайтов через LLM, покопаться в репозитории SlimeBoyOwO/LingChat точно имеет смысл.
