Слогер Создать блог
Разработка

Как сделать локального AI-агента для Android: разбор связки Flask, Ollama и ADB

Разбираем проект, который упаковал языковую модель в веб-интерфейс и подключил к телефону через ADB. Всё работает локально, без облака.

Есть проект: агент на базе Ollama живет на телефоне, а управлять им можно из браузера. Стек простой: Python Flask, ADB для связи с устройством и веб-интерфейс в виде чата. Вся магия происходит на localhost — никаких внешних серверов.

Почему это интересно

Обычно AI-агенты работают в облаке: вы отправляете запрос на сервер, он думает и возвращает ответ. Здесь всё наоборот: модель запущена прямо на телефоне, команды уходят через ADB, а браузер служит только пультом. Это означает, что данные не покидают устройство, нет задержек сети и не нужен интернет для работы. Плюс такой стек можно использовать для автоматизации: написал команду на естественном языке — агент выполнил действие на телефоне.

Как устроен проект

Серверная часть написана на Flask и обернута в REST API. Три эндпоинта:

  1. /status — проверяет, подключены ли Ollama и ADB;
  2. /command — принимает команду на естественном языке и возвращает результат;
  3. /history — отдает последние 20 команд.

Веб-интерфейс — это отдельный HTML-файл в стиле чата: темная терминальная тема, золотые акценты. Вверху строка статуса, в середине история диалога, внизу поле ввода. Есть примеры команд, которые можно кликнуть, состояния загрузки и сообщения об ошибках.

Интерфейс общается с Flask на localhost:5000. Flask — с агентом, агент — с телефоном через ADB. Вся цепочка работает локально.

Что пошло не так

В блог-логе проекта честно перечислены проблемы, с которыми сталкивается почти каждый разработчик. Они того стоят, чтобы их запомнить.

  • Flask отказывался отдавать HTML-файл 45 минут, потому что send_file требует абсолютный путь.
  • Статус определ ADB возвращал false из-за неправильной строки в выводе.
  • CORS-ошибки из-за забытого flask-cors — десять минут на одну строчку.
  • Кнопка отправки не работала из-за опечатки в getElementById — тридцать минут на один символ.

Эта часть особенно полезна, если вы собираете такой же проект. Ошибки типичны, и лучше сразу знать, где их искать.

Компоненты системы

КомпонентРольЧто делает
Flask (server.py)БэкендОтдает API, обслуживает веб-интерфейс
Web interface (interface.html)ФронтендЧат для ввода команд, отображение статуса
OllamaЯзыковая модельВыполняет команды, генерирует ответы
ADBМост к телефонуПозволяет агенту выполнять действия на устройстве

Как повторить

Сейчас процесс установки всё еще ручной. Выглядит так: установить Termux, стянуть Ollama, настроить ADB, запустить сервер, открыть браузер. Много шагов, и каждый можно забыть или перепутать. Автор проекта планирует написать скрипт, который сделает всё одной командой.

Если хотите попробовать сами, начните с проверки, что ADB видит ваш телефон, а Ollama отвечает на простой запрос. Потом поднимайте Flask и привязывайте интерфейс. Ошибки из лога — ваши лучшие подсказки.

Что дальше

План следующий: день 21 — скрипт установки, день 22 — end-to-end тесты, день 23 — релиз v1.0. End-to-end тестирование пока не проводилось: агент работает в контролируемых сценариях, но реальная надежность еще проверяется.

Это не просто очередная поделка. Это пример, как связать локальную языковую модель с реальным устройством и получить удобный интерфейс. Без облаков, без лишних серверов, только телефон и код.

По материалам: dev. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.