ИИ-помощник в ZennoDroid
Содержание
- Что такое ИИ-помощник в ZennoDroid?
- Два режима работы: Assistant и Agent
- Лимиты ходов и протокол продолжения
- Контекст, память и история чатов
- Подключение и выбор модели
- Известные ограничения
- Советы по формулировке задач
- Частые ошибки и FAQ
- Подключение внешних AI-ассистентов (опционально)
- Развитие ИИ-помощника
1. Что такое ИИ-помощник в ZennoDroid?
ИИ-помощник – это встроенный в ProjectMaker чат-интерфейс, который позволяет:
- описать задачу словами → агент сам добавит кубики в проект;
- задавать вопросы о ZennoDroid, Android-автоматизации, C#;
- отлаживать и исправлять уже собранные проекты;
- читать состояние подключённого устройства – структуру экрана, разрешение, список установленных приложений.
Под капотом помощник использует языковую модель (LLM) через Semantic Kernel (Microsoft) и два MCP-сервера:
| Сервер | Адрес | Что умеет |
|---|---|---|
| Project MCP | http://localhost:6117 | Читать структуру проекта, добавлять/редактировать кубики, управлять списками, таблицами и переменными |
| Android MCP | http://localhost:6118 | Читать состояние подключённого Android-устройства |
MCP-серверы запускаются автоматически вместе с ProjectMaker. Адреса портов нужны только если вы подключаете внешний AI-ассистент (см. раздел 9) – для встроенного чата ничего настраивать не нужно, кроме API-ключа модели.
Главное отличие от ИИ-помощника в ZennoPoster
В ZennoPoster второй MCP-сервер управляет браузером: он умеет кликать, вводить текст, переходить по ссылкам – и эти действия записываются в кубики.
В ZennoDroid Android MCP умеет только смотреть. Он не нажимает, не вводит текст и не свайпает. Все действия на устройстве – это кубики проекта: агент добавляет их через Project MCP, а выполняются они при запуске проекта (F5).
Из этого следуют два практических вывода:
- Режима записи (recording) в ZennoDroid нет. Агент не «повторяет ваши действия» – он собирает цепочку кубиков.
- Элемента может не быть на экране прямо сейчас – это нормально. Кубик строится по названию/тексту/атрибуту элемента и срабатывает во время выполнения.
2. Два режима работы: Assistant и Agent
В интерфейсе ProjectMaker доступны два режима. Это принципиально разные вещи.
2.1 Assistant (Ассистент) – только чтение
Assistant работает в режиме read-only: он видит ваш проект и подключённое устройство и может всё про них рассказать, но ничего не меняет. Это безопасный режим для боевых сценариев – случайно сломать проект нельзя.
| Параметр | Значение |
|---|---|
| Доступ к проекту | ✅ Только чтение (структура, кубики, параметры) |
| Изменение проекта | ❌ Нет |
| Чтение устройства | ✅ Да |
| Действия на устройстве | ❌ Нет |
| Что умеет | Отвечать на вопросы, объяснять, анализировать, советовать |
Что умеет Assistant:
- Читать структуру проекта и объяснять, что делает выбранный кубик
- Разбирать ошибки последнего запуска и подсказывать причину
- Рассказывать о доступных действиях ZennoDroid и их параметрах
- Читать структуру экрана и подсказать рабочий селектор
- Помогать с C#-кодом для кубиков
OwnCode
Не ждите от Assistant:
- Что он добавит, изменит или удалит кубики в проекте
- Что он что-то сделает на самом устройстве
- Что он самостоятельно построит автоматизацию
2.2 Agent (Агент) – полный доступ
Agent имеет полный доступ на чтение и запись проекта. Он может самостоятельно:
- добавлять, изменять, перемещать и удалять кубики;
- выстраивать связи между кубиками (по успеху/ошибке), создавать и переименовывать группы;
- создавать и заполнять таблицы, списки, переменные;
- читать состояние устройства – чтобы подобрать точные селекторы и имена пакетов;
- запускать отдельные кубики и читать логи (только по вашей явной просьбе «запусти» / «выполни»);
- писать код для кубиков
OwnCode|CSharp.
| Параметр | Значение |
|---|---|
| Инструменты (MCP) | ✅ Есть |
| Доступ к проекту | ✅ Читает и изменяет структуру |
| Чтение устройства | ✅ Да |
| Действия на устройстве | Только через кубики проекта, выполняются при запуске |
| Что умеет | Автономно строить/редактировать проекты |
Используйте Agent, когда:
- Хотите, чтобы ИИ построил автоматизацию с нуля
- Нужно добавить новые шаги к существующему проекту
- Хотите отладить/исправить проект
Помните:
- Агент работает поэтапно – каждый вызов инструмента это один «ход»
- На один запрос есть лимит ходов (см. раздел 3)
- После завершения работы агента проверьте результат – иногда нужна корректировка
В ProjectMaker нет отмены (Ctrl+Z) для действий агента. Перед сложной задачей сохраните копию проекта. Если агент сделал не то – попросите его удалить добавленные кубики по названию/id или удалите вручную.
Перед удалением кубиков, списков, таблиц, переменных или устройства агент перечислит, что именно будет удалено, и запросит подтверждение – удаление начнётся только после вашего явного «да».
3. Лимиты ходов и протокол продолжения
Что такое «ход»
Каждый вызов инструмента агентом (прочитать структуру проекта, добавить кубик, прочитать экран) – это один ход. Агент не может делать бесконечное количество ходов за один запрос.
Лимиты
| Ситуация | Поведение |
|---|---|
| Задача выполнена за лимит | Агент завершает и отчитывается |
| Задача не выполнена, лимит близко | Агент останавливается на логическом рубеже и просит продолжить |
| Две подряд ошибки или два вызова без прогресса | Агент останавливается и спрашивает, что делать |
Как продолжать работу
Когда агент сообщает, что остановился – напишите:
продолжай
Агент сам прочитает текущее состояние проекта, поймёт, что уже сделано, и продолжит с того места, где остановился.
⚠ Не нужно повторять всё задание заново – агент восстанавливает контекст сам.
Если вы написали «продолжай» в новом чате, где до этого ничего не было, агент не станет ничего угадывать – он скажет, что продолжать нечего. В этом случае дайте контекст заново.
4. Контекст, память и история чатов
Как работает память
ИИ-модель не имеет долговременной памяти. Она работает с «окном контекста» – определённым количеством токенов, которые помещаются в один запрос к модели.
| Аспект | Реальность |
|---|---|
| Сохраняются ли чаты | ✅ Да – история диалогов пишется на диск, к ней можно вернуться |
| Помнит ли модель начало длинного диалога | ⚠ Частично – ранние сообщения могут «выпасть» из окна |
| Помнит ли структуру проекта | ✅ Да – читает её заново каждый раз |
| Помнит ли состояние устройства | ✅ Да – читает его заново каждый раз |
История диалогов
В панели чата есть список сохранённых диалогов: кнопка «Новый чат», поиск по диалогам, удаление диалога. По умолчанию хранятся последние 100 диалогов.
Обратите внимание: сохранённая история – это запись переписки, доступная вам. Модель при продолжении диалога получает не всю её целиком, а окно контекста – в длинных диалогах ранние сообщения из него выпадают.
Практические последствия
- Длинные диалоги деградируют. Если чат стал очень длинным, начните новый – агент всё равно прочитает проект заново.
- Не рассчитывайте на «ты же помнишь». Не говорите «сделай как раньше» без указания, что именно.
- Структура проекта и состояние устройства – из инструментов, а не из памяти. Любое утверждение о проекте или устройстве агент обязан подкреплять свежим чтением. Если он назвал количество кубиков или тип устройства, ничего не прочитав – это выдумка, и её надо перепроверить.
5. Подключение и выбор модели
Это обязательный первый шаг. Без подключения хотя бы одной модели ИИ-помощник работать не будет – ни в режиме Assistant, ни в режиме Agent. Модель и ключ доступа задаются один раз в настройках программы.
Шаг 1. Откройте настройки моделей
Главный экран ZennoDroid → Настройки (значок шестерёнки) → вкладка «ИИ» → блок «Настройки модулей ИИ сервисов».
Шаг 2. Введите ключ для нужного сервиса
Встроенные сервисы. «Из коробки» доступно несколько провайдеров. У каждого два поля – «Секретный ключ» и «Дополнительные параметры» (адрес API-сервера):
| Сервис | Адрес сервера («Дополнительные параметры») |
|---|---|
| OpenAI | https://api.openai.com |
| Claude (Anthropic) | https://api.anthropic.com |
| DeepSeek | https://api.deepseek.com |
| Gemini (Google) | https://generativelanguage.googleapis.com |
| OpenRouter | https://openrouter.ai/api |
| Perplexity Sonar | https://api.perplexity.ai |
Порядок настройки:
- В поле «Секретный ключ» вставьте свой API-ключ от выбранного сервиса (например,
sk-...для DeepSeek,sk-ant-...для Claude). - Поле «Дополнительные параметры» – адрес API-сервера. Менять нужно только если используете прокси или совместимый сторонний endpoint; для официальных сервисов оставьте значение по умолчанию.
- Перезапустите ZennoDroid – без перезапуска настройки не применятся (об этом предупреждает красная надпись вверху окна: «Для применения настроек необходимо перезапустить программу»).
Где взять ключ: в личном кабинете соответствующего сервиса (OpenAI Platform, Anthropic Console, DeepSeek, Google AI Studio, OpenRouter). Ключ привязан к вашему платному аккаунту.
Шаг 3. Какую модель выбрать
Мы протестировали разные модели на реальных задачах ZennoDroid. Кратко:
- DeepSeek – рекомендуем для большинства пользователей. Самый экономичный вариант: сотни запросов обходятся менее чем в несколько долларов. При этом результаты на задачах ZennoDroid очень хорошие. В среднем запрос на проект расходует 10–100 тысяч токенов, в зависимости от объёма проекта.
- Claude – самая сильная модель (чище вывод, надёжнее с циклами, аккуратные остановки), но заметно дороже в использовании.
- Разница в качестве между ними небольшая. Поэтому по соотношению «цена / качество» для повседневной работы выгоднее DeepSeek.
| Модель | Когда выбрать |
|---|---|
| DeepSeek | По умолчанию – лучший баланс цены и качества, очень дёшево на больших объёмах |
| Claude | Когда нужен максимум качества и стоимость не критична |
Сборка Android-проекта – это длинные цепочки кубиков с точными параметрами: селекторы, координаты, имена пакетов. Более сильная модель здесь чаще выигрывает не «умом», а аккуратностью: реже путает похожие действия, реже забывает создать результирующую переменную, реже комментирует каждый свой шаг вместо чистого результата.
Вывод: начните с DeepSeek – для подавляющего большинства задач его достаточно, а расходы минимальны. Переходите на Claude, только если упёрлись в качество на сложных проектах.
Добавление сервиса
Нажмите ссылку «Добавить свой сервис» – откроется окно «Добавление нового AI модуля»:
| Поле | Что вписать |
|---|---|
| Название модуля | Произвольное имя, под которым сервис появится в списке |
| API | Формат API из выпадающего списка (например, DeepSeek) – выберите тот, с которым совместим ваш сервис |
| Token | Ключ доступа к сервису |
| Server | Адрес API-сервера (например, https://api.openai.com или адрес вашего локального сервера) |
Нажмите «Добавить» и перезапустите программу. После этого модуль появится в общем списке сервисов наравне со встроенными, и его можно будет выбрать для работы агента.
⚠ Безопасность ключей. API-ключ – это доступ к вашему платному аккаунту. Не показывайте его на скриншотах и в записях экрана, не пересылайте в чатах и не храните в открытом виде. Если ключ засветился – немедленно отзовите (revoke) его в кабинете провайдера и создайте новый.
6. Известные ограничения
6.1 Что агент делает плохо или нестабильно
| Ограничение | Пояснение | Обходной путь |
|---|---|---|
| Хрупкие селекторы | На нестандартных экранах и в кастомных лаунчерах агент может взять неточный селектор | Проверяйте селекторы после сборки; попросите прочитать экран и уточнить атрибут |
| Координатные жесты | Свайпы и тапы по координатам зависят от разрешения; на другом устройстве точки уезжают | Требуйте прочитать реальное разрешение устройства; предпочитайте нажатие по элементу, а не по координатам |
| Отсутствие явных ожиданий | Кубик читает экран мгновенно и не ловит подгружаемый контент | Просите добавлять ожидание перед чтением экрана |
| Длинные проекты (100+ кубиков) | Структура проекта возвращает много данных – модель может потерять нить | Стройте проект частями, давайте задания по блокам |
| Редактирование «вслепую» | Если агент правит кубик, не прочитав его текущие параметры, они могут слететь | Требуйте явно: «сначала прочитай кубик, потом редактируй» |
| Вложенные группы | Глубоко вложенные группы кубиков могут быть неверно интерпретированы | Упрощайте структуру, работайте с одним уровнем вложенности |
| Придуманные действия и параметры | Модель может назвать несуществующее действие или параметр | Просите проверить по каталогу действий, прежде чем принимать ответ |
| «Думает вслух» | На длинной сборке модель (особенно DeepSeek) комментирует каждый шаг вместо чистого результата | Не критично для итога, но мешает читать. Попросите «выведи только финальную сводку кубиков» |
6.2 Что агент не может делать в принципе
- Действовать на устройстве напрямую – нажатия, ввод, свайпы существуют только как кубики проекта
- Запустить проект целиком на исполнение – он может выполнить отдельный кубик по вашей явной просьбе, но не запустить проект
- Записывать ваши действия – режима записи в ZennoDroid нет
- Работать с браузерными действиями ZennoPoster – в каталоге ZennoDroid их нет
- Обойти разделение по типу устройства – эмулятор и реальный телефон имеют разные наборы действий, и то, чего нет у вашего типа устройства, подменять нельзя. Агент в такой ситуации обязан честно сказать, что возможности нет, а не предлагать shell-команду или внешнюю утилиту
- Видеть результаты выполнения уже запущенного задания (только структуру проекта и живое состояние устройства)
- Работать с файлами на диске ПК напрямую (только через переменные/списки проекта и соответствующие кубики)
7. Советы по формулировке задач
✅ Хорошие запросы
Конкретные, с деталями:
«Открой Chrome, перейди на https://example.com, найди поле поиска по resource-id
com.android.chrome:id/search_box_textи введи{-Variable.query-}»
Цепочкой – это нормально и даже лучше:
«Выбери случайное устройство, запусти его, установи APK из
C:\apk\app.apk, запусти приложение и сделай скриншот»
С указанием результата:
«Текст элемента сохрани в переменную
title»
С уточнением ветвления:
«Если на экране появился текст
Success– продолжай, еслиError– останови задачу»
С разбивкой на блоки:
«Сначала сделай только авторизацию в приложении. Когда будет готово – скажи, я проверю и дам следующий блок»
❌ Плохие запросы
Слишком общие:
«Автоматизируй всё»
Проблема: агент не знает, что именно делать, в каком приложении, с какими данными.
Без контекста:
«Добавь проверку»
Проблема: какую проверку? Где? После какого кубика?
«Всё сразу» на открытой задаче:
«Спарси все 200 постов, обработай данные, запиши в базу и отправь отчёт»
Проблема: агент упрётся в лимит ходов. Лучше – по одному блоку.
Без указания, куда вставить:
«Добавь кубик условия»
Агент не знает, куда именно. Укажите: «после кубика с id X» или «в начало группы Y».
С требованием обойти ограничение:
«Сделай factory reset на телефоне через adb»
Проблема: это ровно тот обходной путь, который необратимо затрёт ваше устройство. Корректный ответ агента здесь – отказ.
Шаблон хорошего запроса
[Что нужно сделать] + [В каком приложении/на каком экране] + [Как найти элемент] +
[С какими данными/переменными] + [Условия ветвления] + [Что сохранить в результате]
Пример:
«После кубика запуска приложения добавь ввод текста в поле с
resource-id com.app:id/login, значение возьми из{-Variable.login-}. Затем нажми кнопку с текстомВойти. Если появился текстОшибка– останови задачу»
8. Частые ошибки и FAQ
❓ Агент ничего не делает – просто отвечает текстом
Причина: вы в режиме Assistant, а не Agent. Решение: переключитесь в режим Agent.
❓ Агент спрашивает «в каком приложении?», хотя я назвал элемент
Причина: элемента нет на текущем экране, и агент воспринял это как недостаток информации. Решение: это неверное поведение – кубик срабатывает при запуске, а не сейчас. Напишите:
Элемент я назвал. Собери кубик по этому тексту и скажи, что селектор не был проверен на живом экране.
❓ При сборке работало, а при запуске проекта – нет
Причина: пока агент собирал проект, он сам несколько раз перечитывал устройство – и эти задержки создавали видимость того, что всё успевает. В собранном проекте этих пауз нет: кубик срабатывает мгновенно.
Решение: попросите добавить явное ожидание перед чтением экрана. Особенно важно в начале каждой итерации цикла прокрутки: без ожидания цикл каждый раз читает один и тот же экран.
❓ Селектор не находит элемент, хотя он видно на экране
Попросите агента перечитать экран и сравнить селектор с реальными атрибутами элемента. Частые причины: элемент ещё не отрисовался (нет ожидания), элемент за пределами видимой области, содержимое внутри WebView.
❓ Агент предложил shell-команду или внешний менеджер эмулятора
Причина: нужного действия нет в каталоге вашего типа устройства, и модель попыталась «дотянуться» обходным путём.
Решение: это неверный ответ, не применяйте его. Спросите прямо:
Проверь по каталогу, есть ли такое действие для моего типа устройства.
Если нет – скажи это прямо и не предлагай замену.
Особенно осторожно с командами, затирающими данные – на реальном телефоне они необратимы.
❓ В кубике C# появились ``` в коде
Причина: агент вставил markdown-обёртку вместо чистого кода.
Решение: удалите строки ```csharp в начале и ``` в конце вручную. Или попросите агента:
Перезапиши код кубика C# с id=X – убери markdown-обёртки, оставь только чистый C#
❓ C#-код в кубике падает на instance.ActiveTab / instance.Profile
Причина: это API браузерного ZennoPoster. В ZennoDroid доступен только instance.DroidInstance.*, остальные члены instance.* бросают исключение во время выполнения – хотя и видны в справочнике API.
Решение: попросите агента заменить это на аналог для ZennoDroid – соответствующий нативный кубик или член instance.DroidInstance.*.
❓ Агент добавил кубики не туда
Причина: позиция вставки была не там, где вы ожидали, или кубики попали в разные группы. Решение: перед добавлением явно укажите позицию:
Добавь кубики после кубика с id=N, все в одну группу «Авторизация»
❓ Агент «придумал» действие или параметр, которого не существует
Причина: модель галлюцинирует названия, особенно специфичные для ZennoDroid.
Решение: требуйте проверку по каталогу действий, прежде чем принимать ответ. Каталог – источник истины, и он уже отфильтрован под ваш тип устройства.
❓ Агент сказал, что действия не существует. Верить?
Не всегда. Отрицание существующего действия так же вредно, как выдумка несуществующего. Попросите проверить по каталогу по нескольким формулировкам. Учтите и обратное: если действие относится к другому типу устройства (эмулятор ↔ реальный телефон), то у вас его действительно нет, и это не повод искать замену.
❓ Могу ли я работать с устройством, пока агент работает?
Технически агент только читает состояние устройства, поэтому конфликта действий, как в браузерном ZennoPoster, не возникает. Но если вы переключаете экраны во время того, как агент подбирает селекторы, он прочитает не тот экран и соберёт неверный кубик. Лучше дождаться завершения хода.
9. Подключение внешних AI-ассистентов (опционально)
Встроенный чат в ProjectMaker работает «из коробки» – кроме API-ключа модели настраивать ничего не нужно. Но те же MCP-серверы (Project MCP и Android MCP) можно подключить и к внешним AI-ассистентам, чтобы управлять проектом и читать устройство из своего редактора или терминала.
Это две разные вещи. Встроенный чат и внешний ассистент – независимые точки входа к одним и тем же MCP-серверам. Если вам хватает встроенного чата – этот раздел можно пропустить.
Общее требование: ProjectMaker ZennoDroid должен быть запущен – MCP-серверы стартуют вместе с ним и слушают:
- ProjectMCP →
http://localhost:6117 - AndroidMCP →
http://localhost:6118
GitHub Copilot
- Убедитесь, что ProjectMaker запущен.
- Откройте папку профиля:
Win + R→%USERPROFILE%→ Enter. - Создайте файл
.mcp.json(например,C:\Users\YourName\.mcp.json) со следующим содержимым:
{
"servers": {
"AndroidMCP": { "type": "http", "url": "http://localhost:6118" },
"ProjectMCP": { "type": "http", "url": "http://localhost:6117" }
}
}
- Перезапустите Visual Studio (или перезагрузите расширение Copilot).
Claude Code (CLI)
claude mcp add AndroidMCP --transport http http://localhost:6118
claude mcp add ProjectMCP --transport http http://localhost:6117
claude mcp list # проверка
Удалить позже: claude mcp remove AndroidMCP и claude mcp remove ProjectMCP.
OpenAI Codex (CLI)
codex mcp add AndroidMCP --url http://localhost:6118
codex mcp add ProjectMCP --url http://localhost:6117
codex mcp list # проверка
Подробнее – включая устранение неполадок и одновременную работу с ZennoPoster – в статье Настройка MCP для AI-ассистентов.
10. Развитие ИИ-помощника
ИИ-помощник в ZennoDroid активно развивается. Мы постоянно дорабатываем его возможности, расширяем набор инструментов, повышаем стабильность работы агента и качество понимания задач. С развитием самих языковых моделей помощник тоже становится точнее и быстрее.
Это значит, что ограничения, описанные в разделе 6, со временем будут уменьшаться, а сценарии работы – расширяться.
На данный момент мы активно работаем над:
- добавлением лимитированной дефолтной бесплатной модели
- расширением набора инструментов чтения устройства
- другими улучшениями работы ИИ-помощника
Нам важно ваше мнение. Мы будем рады комментариям и предложениям пользователей: что работает хорошо, чего не хватает, какие ошибки возникают, какие задачи хотелось бы автоматизировать с помощью ИИ. Ваш реальный опыт напрямую влияет на то, в каком направлении мы развиваем помощника. Делитесь обратной связью – это помогает делать инструмент лучше.