Перейти к основному содержимому

ИИ-помощник в ZennoDroid

Содержание

  1. Что такое ИИ-помощник в ZennoDroid?
  2. Два режима работы: Assistant и Agent
  3. Лимиты ходов и протокол продолжения
  4. Контекст, память и история чатов
  5. Подключение и выбор модели
  6. Известные ограничения
  7. Советы по формулировке задач
  8. Частые ошибки и FAQ
  9. Подключение внешних AI-ассистентов (опционально)
  10. Развитие ИИ-помощника

1. Что такое ИИ-помощник в ZennoDroid?

ИИ-помощник – это встроенный в ProjectMaker чат-интерфейс, который позволяет:

  • описать задачу словами → агент сам добавит кубики в проект;
  • задавать вопросы о ZennoDroid, Android-автоматизации, C#;
  • отлаживать и исправлять уже собранные проекты;
  • читать состояние подключённого устройства – экран, скриншот, список установленных приложений.

Под капотом помощник использует языковую модель (LLM) через Semantic Kernel (Microsoft) и два MCP-сервера:

СерверАдресЧто умеет
Project MCPhttp://localhost:6117Читать структуру проекта, добавлять/редактировать кубики, управлять списками, таблицами и переменными
Android MCPhttp://localhost:6118Читать состояние подключённого Android-устройства

MCP-серверы запускаются автоматически вместе с ProjectMaker. Адреса портов нужны только если вы подключаете внешний AI-ассистент (см. раздел 9) – для встроенного чата ничего настраивать не нужно, кроме API-ключа модели.

Главное отличие от ИИ-помощника в ZennoPoster

В ZennoPoster второй MCP-сервер управляет браузером: он умеет кликать, вводить текст, переходить по ссылкам – и эти действия записываются в кубики.

В ZennoDroid Android MCP умеет только смотреть. Он не нажимает, не вводит текст и не свайпает. Все действия на устройстве – это кубики проекта: агент добавляет их через Project MCP, а выполняются они при запуске проекта (F5).

Из этого следуют два практических вывода:

  1. Режима записи (recording) в ZennoDroid нет. Агент не «повторяет ваши действия» – он собирает цепочку кубиков.
  2. Элемента может не быть на экране прямо сейчас – это нормально. Кубик строится по названию/тексту/атрибуту элемента и срабатывает во время выполнения.

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 диалогов.

Обратите внимание: сохранённая история – это запись переписки, доступная вам. Модель при продолжении диалога получает не всю её целиком, а окно контекста – в длинных диалогах ранние сообщения из него выпадают.

Практические последствия

  1. Длинные диалоги деградируют. Если чат стал очень длинным, начните новый – агент всё равно прочитает проект заново.
  2. Не рассчитывайте на «ты же помнишь». Не говорите «сделай как раньше» без указания, что именно.
  3. Структура проекта и состояние устройства – из инструментов, а не из памяти. Любое утверждение о проекте или устройстве агент обязан подкреплять свежим чтением. Если он назвал количество кубиков или тип устройства, ничего не прочитав – это выдумка, и её надо перепроверить.

5. Подключение и выбор модели

Это обязательный первый шаг. Без подключения хотя бы одной модели ИИ-помощник работать не будет – ни в режиме Assistant, ни в режиме Agent. Модель и ключ доступа задаются один раз в настройках программы.

Шаг 1. Откройте настройки моделей

Главный экран ZennoDroid → Настройки (значок шестерёнки) → вкладка «ИИ» → блок «Настройки модулей ИИ сервисов».

Шаг 2. Введите ключ для нужного сервиса

Встроенные сервисы. «Из коробки» доступно несколько провайдеров. У каждого два поля – «Секретный ключ» и «Дополнительные параметры» (адрес API-сервера):

СервисАдрес сервера («Дополнительные параметры»)
OpenAIhttps://api.openai.com
Claude (Anthropic)https://api.anthropic.com
DeepSeekhttps://api.deepseek.com
Gemini (Google)https://generativelanguage.googleapis.com
OpenRouterhttps://openrouter.ai/api
Perplexity Sonarhttps://api.perplexity.ai

Порядок настройки:

  1. В поле «Секретный ключ» вставьте свой API-ключ от выбранного сервиса (например, sk-... для DeepSeek, sk-ant-... для Claude).
  2. Поле «Дополнительные параметры» – адрес API-сервера. Менять нужно только если используете прокси или совместимый сторонний endpoint; для официальных сервисов оставьте значение по умолчанию.
  3. Перезапустите ZennoDroid – без перезапуска настройки не применятся (об этом предупреждает красная надпись вверху окна: «Для применения настроек необходимо перезапустить программу»).

Где взять ключ: в личном кабинете соответствующего сервиса (OpenAI Platform, Anthropic Console, DeepSeek, Google AI Studio, OpenRouter). Ключ привязан к вашему платному аккаунту.

Шаг 3. Какую модель выбрать

Мы протестировали разные модели на реальных задачах ZennoDroid. Кратко:

  • DeepSeek – рекомендуем для большинства пользователей. Самый экономичный вариант: сотни запросов обходятся менее чем в несколько долларов. При этом результаты на задачах ZennoDroid очень хорошие. В среднем запрос на проект расходует 10–100 тысяч токенов, в зависимости от объёма проекта.
  • Claude – самая сильная модель (чище вывод, надёжнее с циклами, аккуратные остановки), но заметно дороже в использовании.
  • Разница в качестве между ними небольшая. Поэтому по соотношению «цена / качество» для повседневной работы выгоднее DeepSeek.
МодельКогда выбрать
DeepSeekПо умолчанию – лучший баланс цены и качества, очень дёшево на больших объёмах
ClaudeКогда нужен максимум качества и стоимость не критична
Что заметнее всего именно на задачах ZennoDroid

Сборка 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-серверы стартуют вместе с ним и слушают:

  • ProjectMCPhttp://localhost:6117
  • AndroidMCPhttp://localhost:6118

GitHub Copilot

  1. Убедитесь, что ProjectMaker запущен.
  2. Откройте папку профиля: Win + R%USERPROFILE% → Enter.
  3. Создайте файл .mcp.json (например, C:\Users\YourName\.mcp.json) со следующим содержимым:
{
"servers": {
"AndroidMCP": { "type": "http", "url": "http://localhost:6118" },
"ProjectMCP": { "type": "http", "url": "http://localhost:6117" }
}
}
  1. Перезапустите 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, со временем будут уменьшаться, а сценарии работы – расширяться.

На данный момент мы активно работаем над:

  1. добавлением лимитированной дефолтной бесплатной модели
  2. расширением набора инструментов чтения устройства
  3. другими улучшениями работы ИИ-помощника

Нам важно ваше мнение. Мы будем рады комментариям и предложениям пользователей: что работает хорошо, чего не хватает, какие ошибки возникают, какие задачи хотелось бы автоматизировать с помощью ИИ. Ваш реальный опыт напрямую влияет на то, в каком направлении мы развиваем помощника. Делитесь обратной связью – это помогает делать инструмент лучше.