Привет! Если вы мобильный разработчик и следите за AI-трендами, наверняка задумывались о том, как интегрировать языковые модели (LLM) в свои приложения прямо из Android Studio. В этой статье я расскажу, как это можно сделать быстро и просто, не полагаясь на внешние API и облачные решения.

🚀 О чём буду рассказывать

Я поделюсь пошаговой инструкцией о запуске локальной LLM на вашем компьютере и интеграции её в Android Studio. Мы разберёмся, как выбрать модель, подготовить окружение и как использовать.

🛠️ Пошаговый гайд

  • Выбор и загрузка модели

    • Требования к железу

    • Где найти модели и на что обратить внимание

    • Установка и настройка необходимых инструментов и библиотек

    • Какие модели лучше подходят для локального запуска

  • Настройка окружения

    • Настройка и запуск сервера для работы модели локально

  • Интеграция с Android Studio

    • Установка plugin-а Continue (и его проблемы)

    • Запуск и проверка работы прямо из Android Studio

🔍 Что ещё пробовал и выводы

  • Другие варианты запуска LLM на Android (ChatGPT, Cursor)

  • Что дальше?

    Готовы запустить собственный AI прямо у себя на рабочем столе? Тогда поехали! 🚀

  • Требования к железу

    Apple Silicon M-Chip с 16+ RAM (желательно от 32)

    Windows ПК с видеокартой NVIDIA/AMD (чем мощнее тем лучше)

  • Выбор и загрузка модели

    Есть прекрасный ресурс по моделям - https://huggingface.co/models, но сходу разобраться и понять, что нам нужно достаточно сложно, так же придется разбираться как их запускать через консоль и читать гайды, скрипты и тд. Хотелось бы этого избежать, особенно когда мы на стадии ознакомления в разными моделями. Для ознакомления - можно посмотреть :)

    Т.к. мы ленивые воспользуемся программой LM Studio. Поддерживает macOS, Windows, Linux. То что нам нужно. Качаем и устанавливаем.

    После запуска выбирайте Power User мод и кликайте на Discovery (иконка лупы)

В поиске будет большое количество моделей на выбор.
Так же обратите внимание на чекбоксы GGUF и MLX.
Для Apple Silicon (М1/М2/М3/М4) предпочтительнее использовать MLX, тк они должны работать лучше, но не всегда для нужной модели есть MLX модель (это не проблема, если модель маленькая).

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

Квантованные модели — это сжатые версии нейросетей, которые занимают меньше места и требуют меньше ресурсов для запуска (например, на слабом оборудовании).

Обычно они немного хуже оригинала по качеству: чем сильнее сжатие (чем ниже количество бит, например, 2, 4, 8), тем хуже работает модель. При этом 8-битные модели практически не отличаются от оригинала, а 4-битные дают хороший баланс между качеством и размером.

Важно помнить, что количество параметров влияет на качество даже сильнее, чем степень квантования. То есть модель с большим числом параметров, но более низким битом (например, квантованная 13B), чаще всего работает лучше, чем модель с меньшим числом параметров, даже если та вообще не сжата (например, оригинальная 7B).

В этом примере я буду использовать модель Llama 3.1 8B Instruct 4bit.
(Если у вас слабое железо можно попробовать модель deepseek-coder-6.7b-instruct)


Выбираем и качаем.

Пока ждем загрузку...

Далее переходим в Developer вкладку и выбираем Select a model to Load. Выбираем нашу модуль и загружаем в память.

  • Настройка окружения

    Когда наша модель прогрузится, нужно по порядку:
    1. Включить чекбокс CORS (открывает возможность для plugin-ов и веба)
    2. Server Port выбираем 11434 (это важно, об этом ниже в настройке плагина)
    3. Старуем сервер по чекбоксу.

Если все ок, то модель должна быть READY и в консоле мы увидим логи. Теперь ваша модель доступна по адресу http://127.0.0.1:11434.

  • Интеграция с Android Studio

    На текущем момент в Android Studio есть много разных плагинов и большинство из них в активной разработке, поэтому их стабильность и документация оставлять желать лучшего.

    Вот несколько точно рабочих плагинов, которые поддерживают полный оффлайн:
    1. Continue
    2. Juine

    К сожалению, для Junie даже для оффлайн версии нужно регистрироваться и начинать триал, так же у них есть бага при которой невозможно начать даже триал из студии. Я пробовал впн и прокси на ноутбуке, на роутере. Менял страны и регионы. Не завелось. Плюс немного смущает необходимость регистрации и старта триала для оффлайн версии. Поэтому выбор пал на Continue.

  • Установка плагина Continue

    Переходим по ссылке и устанавливаем плагин в Android Studio (моя версия на момент написания статьи Android Studio Meerkat | 2024.3.1 Patch 1). У вас должна появиться вкладка. Кликаем на нее.

    Большая вероятность что у вас будет отображаться ошибка Connection Error / Error в окне этого плагина. (потому что Java runtime that has no support for JCEF, issue)

    Для решения этой проблемы нам нужно выбрать рантайм с поддержкой JCEF:

  • Здесь нужно быть осторожным, тк вы можете сломать Android Studio :)

  •  Find Action

  • Choose Boot Runtime for IDE

  • Тут выбирайте любой рантайм с with JCEF (я выбрал тот что на скриншоте)

    Если сломали Android Studio, попробуйте несколько разных версий с JCEF. Если совсем сломали, нам нужно удалить файл studio.jdk в директории Android Studio. Где найти директории - тут. У меня завелось все с 1го раза.

  • Далее выбираем в меню плагина Local Assistant. (должен быть выбран по дефолту, если не логинились)

  • Нажимаем на Add chat Models и далее выбираем LM Studio и Autodetect и нажимаем Connect.

  • В Android Studio должен открыться config.yaml. Обратите внимание на путь apiBase - он содержит /v1/.

В конфиге мы можем настроить нашу модель под разные роли. Теперь запрос из Android Studio перенаправляется на локальный сервер. Проверяем - все ок.

  • Более подробно про роли:
    Нажимаем на иконку куба (Models). Вызжает набор dropdown менюшек с выбором моделей для каждой опции. Здесь мы можем настроить поведение для каждой модели.
    На скриншоте включен chat (общение), edit (редактирование в коде), apply (применение из чата) и autocomplete (умное автодополнение). Если фичи не нужны - отключаем (можно закоменнтить в config.yaml). Так же можно для чата использовать большую модель, а для autocomplete-a более быструю, но тогда в памяти будет висеть 2 модели, поэтому исходите из своего железа и нужд.

Так же в том же меню в Tools можно настроить поведение для каждой операции.

У плагина от Continue тож есть баги. Например, у них есть в плагине хардкод для Ollama на port и из студии он слушает именно - 11434. Видел похожие issues, поэтому что бы не ждать фиксов важно было выбрать именно его.

🔍 Что ещё пробовал

Платный ChatGPT:
Можно использовать его через нативное приложение с фичами apply code, но с AS у меня дружит плохо иногда не применяет код или падает при переключении вкладок. Потенциально ChatGPT (OpenAPI), можно использовать и с текущим сетапом в плагине Continue, просто переключаться на онлайн модель.

Платный Cursor:
Под капотом есть несколько моделей, но лучше всего у них работает та же claude-3.7. Переключаться на gpt-mini/o4-mini и подобные особо смысла нет. Так же достаточно недоубно работать в их IDE. Да, они поддерживают расширения для работы с Gradle, Kotlin. Но нормально пользоваться и запускать Cursor из своего окружения они не могут. Я столкнулся с тем, что у меня были запущены 2 Gradle и java - один из Cursor, другой из под AS. И они выжирали почти всю память. Ну и для мобильной разработки ничего удобнее AS нету :). Как вариант - можно дать ему ограниченный доступ в модуль проекта или набор файлов и попросить выполнить определнную задачу - агент сделает сам. У меня часто было так что он то сделает не так, то не то, то сломает и т.д. Особенно сложно, если файлов больше 10.

Что дальше?

  • Погонять и найти для себя приемлемую модель для своего железа (у меня M1 64GB).
    Пока я тестирую такие. Умнее всего claude-3.7-sonnet. Под нее сейчас нету MLX, но пока даже бывают такие кейсы, что MLX работает медленнее.

  • Примерная нагрузка на моем железе во время обработки запроса на claude-3.7-sonnet (тулза в терминале asitop)

  • Так же есть ПК с видеокартой, потенциально можно запустить модель на нем и расшарить это в локальной сети. (LM Studio поддерживает это в 1 клик). Тогда почти вся оперативка на ноутбуке будет доступна. Можно пойти еще дальше пошарить себе в сеть через свой VPN.

  • Попробовать Copilot, Junie (: когда пофиксят баги :-)


    Выводы

    Локальный запуск LLM для Android Studio – это не только удобно, но и существенно расширяет ваши возможности как разработчика. Конечно, на текущий момент решения еще немного «сырые», однако потенциал огромен, и уже сейчас вы можете ощутить реальные преимущества AI прямо у себя на своем железе.

    🔥 Давайте обсудим!

    Расскажите, как у вас получилось интегрировать локальную LLM? Какие модели показались самыми удобными? (В идеале, если напишите железо и то что подошло вам и размер проекта).

    Делитесь своими мыслями и задавайте вопросы в комментариях :-)

    Было интересно и есть вопросы?
    мой linkedin (добавляйтесь :)
    мой medium (там недавно был гайд про self-hosted аналог Google Photos)