Создание мобильной игры с локальной мультимодальной моделью Qwen3-VL | AiManual
AiManual Logo Ai / Manual.
07 Янв 2026 Гайд

Игра, которая видит мир: как мы засунули Qwen3-VL в мобилку и создали Lenswalker

Подробный кейс Lenswalker: стек Ollama, FastAPI, RTX 4090. Практика автономных AI-игр с локальным анализом фотографий.

Зачем играть в то, что не видит?

Мобильные игры давно научились использовать камеру - для AR, сканирования QR-кодов, распознавания лиц в фильтрах. Но это всегда были заранее заготовленные сценарии. Что если дать игре настоящие глаза? Не просто доступ к пикселям, а способность их понимать, анализировать контекст, вести диалог о том, что она видит. Именно эту идею мы и проверяли в проекте Lenswalker.

Суть проста: игрок фотографирует реальные объекты, игра их анализирует через локальную мультимодальную модель и генерирует квесты на основе увиденного. Никаких облаков, никаких API-ключей, полная автономность.

Почему именно локально? (Спойлер: не только из-за приватности)

Да, приватность - это важно. Но есть и более прагматичные причины. Задержки. Представьте: вы фотографируете дерево во дворе, игра отправляет картинку в облако, ждет 2-3 секунды ответа. Магия момента разрушается. С локальной моделью задержка - это время инференса, а не сетевого пинг-понга.

Еще момент - стоимость. Если ваша игра станет популярной, каждый запрос к GPT-4 Vision будет стоить денег. Много денег. Локальная модель после развертывания работает бесплатно. Ну, почти бесплатно - если не считать счет за электричество.

💡
Локальные модели - это не только про приватность. Это про предсказуемость производительности, независимость от интернета и защиту от внезапных изменений в облачных API (помните, как OpenAI убирали функции без предупреждения?).

Выбор оружия: почему Qwen3-VL, а не LLaVA или другие?

Мы тестировали несколько кандидатов. LLaVA-Next - хороша, но требовательна к ресурсам. CogVLM - мощная, но размеры моделей пугали. Qwen3-VL выбрали по трем причинам:

  • Качество анализа - на тестовых изображениях она показывала лучшую консистентность в описаниях
  • Размер - 8B параметров, что для vision-модели довольно скромно
  • Поддержка в Ollama - это критично, потому что Ollama стала нашим мостом между моделью и приложением

Не обольщайтесь - даже 8B модель требует серьезных ресурсов. На RTX 4090 инференс одной картинки занимает 1.5-3 секунды. На более слабых картах время может увеличиться до 10-15 секунд, что для игры уже неприемлемо.

Архитектура: как заставить телефон разговаривать с видеокартой

Самая интересная часть. Модель живет на сервере (в нашем случае - ПК с RTX 4090), мобильное приложение - на телефоне. Как их подружить? Через локальную сеть.

КомпонентРольТехнология
Vision-серверЗапускает Qwen3-VL, обрабатывает запросыOllama + FastAPI
Игровой бэкендГенерирует квесты, хранит прогрессFastAPI + SQLite
Мобильное приложениеИнтерфейс, камера, сетевое взаимодействиеReact Native

1Настраиваем Ollama сервер

Первое - устанавливаем Ollama. Если вы раньше не работали с локальными LLM, почитайте наш гайд по избежанию ошибок при локальном запуске. Там много тонкостей с CUDA, памятью и настройками контекста.

Загружаем модель: ollama pull qwen2.5-vl:7b (да, в Ollama она называется qwen2.5, но это та же модель). Важный момент - проверяем, что модель использует GPU. Запускаем ollama run qwen2.5-vl:7b и вводим простой запрос с изображением. Если видите использование видеопамяти в nvidia-smi - все хорошо.

2Строим FastAPI прокси

Ollama предоставляет REST API, но он слишком низкоуровневый для нашей игры. Мы оборачиваем его в FastAPI, который выполняет три задачи:

  1. Принимает изображение от мобильного приложения (base64 или multipart/form-data)
  2. Конвертирует его в формат, понятный Ollama
  3. Формирует промпт с системной инструкцией и отправляет в модель

Системная инструкция - это магия, которая превращает сырой анализ изображения в игровой контент. Выглядит примерно так: "Ты - проводник в мире Lenswalker. Опиши изображение кратко, выдели 3-5 ключевых объектов. Для каждого объекта предложи мистическое свойство или скрытую историю."

Не используйте слишком длинные системные инструкции. Qwen3-VL имеет ограниченный контекст, и каждая картинка "съедает" огромное количество токенов. Оптимально - 2-3 предложения.

3Разрабатываем игровую логику

Получив анализ изображения от модели, нужно превратить его в игровое событие. Мы использовали простой конечный автомат:

  • Модель идентифицирует объекты ("дерево", "автомобиль", "кошка")
  • Игровой движер сопоставляет объекты с шаблонами квестов
  • Генерируется задание ("Этот старый дуб хранит память о древнем ритуале. Найди три предмета, связанных с землей, вокруг него")

Ключевая хитрость - мы не просим модель генерировать готовые квесты. Мы просим описание, а уже на его основе игровой движер создает структурированное задание. Так надежнее и контролируемее.

4Мобильное приложение: камера, сеть, UX

React Native с Expo - наш выбор. Почему? Expo Camera API работает стабильно, а для сетевых запросов используем обычный fetch. Важные моменты:

  • Сжатие изображений - отправлять 12MP фото бессмысленно. Сжимаем до 1024px по большей стороне, качество 80%
  • Индикация загрузки - пользователь должен видеть, что игра "думает". Анимация, прогресс-бар, что угодно
  • Обработка ошибок сети - если сервер недоступен, предлагаем перейти в режим "оффлайн-квестов"

Цифры, которые имеют значение: производительность в реальных условиях

Теория - это хорошо, но как все работает на практике? Мы провели 100 тестовых запусков с разными изображениями.

МетрикаЗначениеКомментарий
Время инференса (RTX 4090)1.8-3.2 секундыЗависит от сложности изображения
Потребление VRAM12-14 ГБДа, 8B модель требует столько
Консистентность ответов85%На одинаковых фото дает схожие описания
Точность идентификации~70%Иногда путает похожие объекты

Консистентность в 85% - это хороший результат для локальной модели. Но помните: 15% вариативности означают, что одно и то же дерево сегодня может быть "древним дубом", а завтра - "призрачным ясенем". В игре мы превратили это в фичу, а не баг.

Типичные грабли, на которые мы наступили (чтобы вы не повторяли)

Ошибок было много. Вот самые болезненные:

  • Кодировка изображений - Ollama ожидает base64 без префикса data:image/... Потратили день на отладку
  • Размер контекста - по умолчанию Ollama использует 2048 токенов. Для мультимодальных моделей нужно увеличивать до 4096 или больше через параметр --num-ctx
  • Тепловой дросселинг - RTX 4090 после 10-15 последовательных запросов начинала греться и снижать частоту. Пришлось добавлять задержки между запросами
  • Мобильная сеть - если телефон переключается с Wi-Fi на мобильный интернет, соединение с локальным сервером рвется. Решили детектировать смену сети и переподключаться
💡
Обязательно протестируйте на реальных устройствах, а не только в эмуляторе. Проблемы с камерой, разрешениями экрана и сетевыми переключениями всплывают только на живом железе.

А что с менее мощным железом?

RTX 4090 - это роскошь. А что если у вас RTX 3060 (12 ГБ) или даже ноутбук с мобильной видеокартой? Варианты есть:

  • Квантование - загружаем модель в формате q4_K_M или q5_K_M через Ollama. Теряем немного качества, но экономим память
  • Уменьшение разрешения - просим модель анализировать не оригинальное фото, а превью 512x512
  • Более легкая модель - можно попробовать LLaVA-Next или даже специально обученную lightweight-версию

Если интересно, как запускать модели на слабом железе, у нас есть отдельный гайд по Raspberry Pi и майнинг-ригам. Принципы те же, только терпения нужно больше.

Будущее, которое уже здесь: куда двигаться дальше?

Lenswalker - это proof of concept. Дальше можно развиваться в нескольких направлениях:

  • Персонализация - модель запоминает, что игрок уже фотографировал, и строит нарратив на основе истории
  • Мультиплеер - несколько игроков видят один объект, модель генерирует разные перспективы для каждого
  • Генерация контента - на основе анализа фото модель создает не только текстовые квесты, но и простые 3D-модели или текстуры. Похожий подход мы описывали в статье про генерацию 3D-мебели

Самый интересный вариант - полностью локальная игра, где модель живет на телефоне. Технически это уже возможно с llama.cpp на Snapdragon 888, но для vision-моделей потребуется еще 2-3 года развития мобильных нейропроцессоров.

Главный инсайт проекта: локальные мультимодальные модели уже достаточно хороши для создания уникальных игровых механик. Они не идеальны, иногда ошибаются, но именно эта "человечность" делает игру живой и непредсказуемой.

Игра, которая видит мир - это не фантастика. Это рабочий прототип, собранный из открытых компонентов. Qwen3-VL, Ollama, FastAPI, React Native. Ничего экзотического. Сложность не в технологиях, а в том, чтобы придумать, как превратить анализ пикселей в увлекательный геймплей.

Попробуйте. Сфотографируйте свою комнату и спросите у модели, какие тайны она здесь видит. Возможно, вы найдете идею для следующей игры.