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

ИИ-помощник

Содержание

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

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

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

  • описать задачу словами → агент сам добавит кубики в проект;
  • задавать вопросы о ZennoPoster, C#, автоматизации браузера;
  • отлаживать и исправлять уже собранные проекты.

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

СерверАдресЧто умеет
Project MCPhttp://localhost:6107Читать структуру проекта, добавлять/редактировать кубики, управлять списками и переменными
Browser MCPhttp://localhost:6108Управлять живым браузером внутри ProjectMaker: клики, заполнение форм, навигация, чтение DOM

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


2. Два режима работы: Assistant и Agent

В интерфейсе ProjectMaker доступны два режима. Это принципиально разные вещи.

2.1 Assistant (Ассистент) – только чтение

Assistant работает в режиме read-only: он видит ваш проект и может всё про него рассказать, но ничего не меняет. Это безопасный режим для боевых сценариев – случайно сломать проект нельзя.

ПараметрЗначение
Доступ к проекту✅ Только чтение (структура, кубики, параметры)
Изменение проекта❌ Нет
Доступ к браузеру❌ Нет
Что умеетОтвечать на вопросы, объяснять, анализировать, советовать

Что умеет Assistant:

  • Читать структуру проекта и объяснять, что делает выбранный кубик
  • Разбирать ошибки последнего запуска и подсказывать причину
  • Рассказывать о доступных параметрах кубиков
  • Объяснять, как работает та или иная функция ZennoPoster
  • Помогать с кодом C# и советовать по архитектуре автоматизации

Не ждите от Assistant:

  • Что он добавит, изменит или удалит кубики в проекте
  • Что он откроет или будет управлять браузером
  • Что он самостоятельно построит автоматизацию

2.2 Agent (Агент) – полный доступ

Agent имеет полный доступ на чтение и запись. Он может самостоятельно:

  • добавлять, изменять, перемещать и удалять кубики;
  • выстраивать связи между кубиками (по успеху/ошибке), создавать и переименовывать группы;
  • создавать и заполнять таблицы, списки, переменные, привязывать таблицы к Google Sheets;
  • управлять запущенным браузером – вкладки, переход по URL, чтение DOM, клики, ввод текста, эмуляция событий;
  • запускать отдельные кубики и читать их логи – чтобы пошагово отлаживать сценарий;
  • писать код для кубиков OwnCode|CSharp – ассистент знает актуальный C# API проекта (IZennoPosterProjectModel, Instance и другие).
ПараметрЗначение
Инструменты (MCP)✅ Есть
Доступ к проекту✅ Читает и изменяет структуру
Доступ к браузеру✅ Управляет живым браузером
Что умеетАвтономно строить/редактировать проекты

Используйте Agent, когда:

  • Хотите, чтобы ИИ построил автоматизацию с нуля
  • Нужно добавить новые шаги к существующему проекту
  • Хотите отладить/исправить проект
  • Нужно записать действия в браузере как кубики

Помните:

  • Агент работает поэтапно – каждое действие (вызов инструмента) это один "ход"
  • На один запрос есть лимит ходов (см. раздел 4)
  • После завершения работы агента проверьте результат – иногда нужна корректировка

3. Как агент строит проекты: три сценария

Агент выбирает одну из трёх стратегий в зависимости от вашей задачи. Понимание этих стратегий поможет вам правильно формулировать запросы.


Сценарий A: RECORD – запись действий в браузере

Когда используется: задача связана с браузером – кликнуть, заполнить форму, авторизоваться, спарсить страницу.

Как работает:

  1. Агент включает режим записи (SetRecording = true)
  2. Управляет браузером через Browser MCP (реальные клики/навигация)
  3. Все действия автоматически превращаются в кубики в проекте
  4. По завершении выключает запись (SetRecording = false)

Пример запроса:

"Авторизуйся на сайте example.com с логином user@mail.com и паролем 12345"

Что вы увидите в проекте: цепочку кубиков – навигация, ввод текста, клик по кнопке.

Важно знать:

  • Браузер должен быть открыт в ProjectMaker
  • Не трогайте браузер во время работы агента – он управляет им сам
  • Если сайт требует CAPTCHA, агент остановится и попросит помощи

Сценарий B: BUILD – программная сборка логики

Когда используется: логика без браузера – работа с переменными, списками, условия, циклы, HTTP-запросы, C#-код.

Как работает:

  1. Агент ищет нужные типы кубиков (FindActions)
  2. Получает схему параметров кубика (GetActionSchema)
  3. Добавляет кубик с заполненными параметрами (AddAction)
  4. Настраивает связи между кубиками (SetActionLinks)

Пример запроса:

"Добавь проверку: если переменная status равна ok, иди по ветке успех, иначе – по ветке ошибка"

Что вы увидите в проекте: кубики условий и переходов со связями.

Важно знать:

  • BUILD медленнее RECORD – каждый кубик требует нескольких ходов
  • Сложные проекты лучше строить частями (запрос → проверка → следующий запрос)

Сценарий C: EDIT – редактирование существующих кубиков

Когда используется: нужно исправить параметры уже существующего кубика.

Как работает:

  1. Агент получает детали кубика (GetActionDetails)
  2. Вносит изменения (EditAction)

Пример запроса:

"Исправь в кубике с XPath-селектор на новый: //div[@class='new-class']"

Критически важно: перед редактированием агент обязан сначала прочитать текущее состояние кубика. Если агент пытается редактировать "вслепую" – остановите его и скажите "сначала прочитай параметры кубика".


Смешанные задачи (RECORD + BUILD)

Если задача требует и браузерных действий, и логики – агент сначала полностью завершает RECORD-часть, выключает запись, а потом переходит к BUILD. Не ждите, что обе части будут идти вперемешку – это сознательное архитектурное решение для надёжности.


4. Лимиты ходов и протокол продолжения

Что такое "ход"

Каждый вызов инструмента агентом (открыть браузер, добавить кубик, прочитать DOM и т.д.) – это один ход. Агент не может делать бесконечное количество ходов за один запрос.

Лимиты

СитуацияПоведение
Задача выполнена за лимитАгент завершает и отчитывается
Задача не выполнена, лимит близкоАгент останавливается на логическом рубеже и просит продолжить
Бесконечный цикл (DOM без кубиков)Агент получает предупреждение и должен изменить стратегию

Как продолжать работу

Когда агент сообщает, что остановился – напишите:

продолжай

При получении этой команды агент автоматически:

  1. Читает текущую структуру проекта (GetProjectStructure)
  2. Узнаёт положение курсора (GetCursor)
  3. Проверяет статус записи (GetRecording)
  4. Продолжает с того места, где остановился

⚠ Не нужно повторять всё задание заново – агент восстанавливает контекст сам.

Признак зависания (loop-guard)

Если агент читает DOM страницы много раз подряд, но не добавляет кубики – это признак зависания. Агент должен либо включить запись и совершить действие, либо использовать уже увиденные селекторы, либо спросить вас. Если вы видите, что агент "читает страницу" по кругу без результата – напишите:

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

5. Контекст и память чата

Как работает память

ИИ-модель не имеет долговременной памяти. Она работает с "окном контекста" – определённым количеством токенов (слов/символов), которые помещаются в один запрос к модели.

АспектРеальность
Помнит ли прошлые сессии❌ Нет – каждый новый чат с чистого листа
Помнит ли начало длинного диалога⚠ Частично – ранние сообщения могут "выпасть" из окна
Помнит ли структуру проекта✅ Да – через вызов GetProjectStructure каждый раз

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

  1. Длинные диалоги деградируют. Если чат стал очень длинным (50+ сообщений), начните новый – агент не "запоминал" историю, он всё равно будет читать проект заново.

  2. Не рассчитывайте на "ты же помнишь". Не говорите "сделай как раньше" без указания, что именно. Лучше повторить детали.

  3. После разрыва сессии – начните новый чат. Агент не знает, что было до.

  4. Структура проекта – из инструментов, не из памяти. Агент всегда читает актуальное состояние через MCP, а не "помнит" его из чата.


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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод: начните с DeepSeek – для подавляющего большинства задач его достаточно, а расходы минимальны. Переходите на Claude только если упёрлись в качество на сложных проектах.

Добавление сервиса

Нажмите ссылку "Добавить свой сервис" – откроется окно "Добавление нового AI модуля":

ПолеЧто вписать
Название модуляПроизвольное имя, под которым сервис появится в списке
APIФормат API из выпадающего списка (например, DeepSeek) – выберите тот, с которым совместим ваш сервис
TokenКлюч доступа к сервису
ServerАдрес API-сервера (например, https://api.openai.com или адрес вашего локального сервера)

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

Безопасность ключей. API-ключ – это доступ к вашему платному аккаунту. Не показывайте его на скриншотах и в записях экрана, не пересылайте в чатах и не храните в открытом виде. Если ключ засветился – немедленно отзовите (revoke) его в кабинете провайдера и создайте новый.


7. Известные ограничения

7.1 Что агент делает плохо или нестабильно

ОграничениеПояснениеОбходной путь
CAPTCHAАгент не решает CAPTCHAРешите вручную, затем попросите агента продолжать
Сложные CSS/XPathНа нестандартных сайтах может взять неверный селекторПроверяйте селекторы после сборки, поправьте вручную
Длинные проекты (100+ кубиков)GetProjectStructure возвращает много данных – модель может потерять нитьСтройте проект частями, давайте задания по блокам
Редактирование "вслепую"Если агент редактирует кубик без GetActionDetails – параметры могут слететьТребуйте явно: "сначала прочитай кубик, потом редактируй"
Вложенные группыГлубоко вложенные группы кубиков могут быть неверно интерпретированыУпрощайте структуру, работайте с одним уровнем вложенности
Динамические сайты (SPA)JS-приложения с динамической подгрузкой сложнее для записиДождитесь загрузки вручную, потом говорите агенту продолжать
"Думает вслух" (think-aloud)На длинной RECORD-сессии модель (особенно DeepSeek) комментирует каждый шаг – "давайте посмотрим… DOM большой… попробую иначе" – вместо чистого результатаНе критично для итога, но мешает читать. Если мешает – выберите модель с более чистым выводом или попросите "выведи только финальную сводку кубиков"

7.2 Что агент не может делать в принципе

  • Запустить проект на исполнение – только строить структуру
  • Обращаться к внешним API напрямую (без соответствующего кубика в проекте)
  • Сохранять шаблоны между сессиями
  • Видеть результаты выполнения уже запущенного задания в ZennoPoster (только структуру проекта)
  • Работать с файлами на диске (только через переменные/списки проекта)

8. Советы по формулировке задач

✅ Хорошие запросы

Конкретные, с деталями:

"Зайди на https://example.com/login, введи логин {login} в поле #username и пароль {password} в поле #password, кликни кнопку "Войти", дождись загрузки страницы профиля"

С указанием переменных:

"Результат парсинга сохрани в переменную parsed_data"

С уточнением ветвления:

"Если элемент .success-msg найден – иди по ветке успех. Если элемент .error-msg – по ветке ошибка"

С разбивкой на блоки:

"Сначала сделай только авторизацию. Когда будет готово – скажи, я проверю и дам следующий блок"


❌ Плохие запросы

Слишком общие:

"Сделай автопостинг в соцсети"

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

Без контекста:

"Добавь проверку"
Проблема: какую проверку? Где? После какого кубика?

"Всё сразу":

"Сделай авторизацию, парсинг всех постов, обработку данных, запись в базу и отправку отчёта"

Проблема: агент скорее всего упрётся в лимит ходов на половине. Лучше – по одному блоку.

Без указания где вставить:

"Добавь кубик условия"

Агент не знает, куда именно. Укажите: "добавь после кубика с id X" или "в начало группы Y".


Шаблон хорошего запроса

[Что нужно сделать] + [Где именно] + [С какими данными/переменными] + [Условия ветвления] + [Что сохранить в результате]

Пример:

"После кубика авторизации добавь получение HTML-кода страницы профиля методом GET. Найди в нём значение тега <span class="username"> и сохрани в переменную current_username. Если элемент не найден – иди по ветке ошибка"


9. Частые ошибки и FAQ

❓ Агент ничего не делает – просто отвечает текстом

Причина: вы в режиме Assistant, а не Agent.
Решение: переключитесь в режим Agent.


❓ Агент "завис" – читает DOM снова и снова

Причина: не может найти нужный элемент или не знает как действовать.
Решение: напишите:

Ты читаешь DOM по кругу без действий. Либо включи запись и кликни на элемент, либо скажи мне, что не можешь найти – я помогу

❓ Агент сказал "продолжай" но не помнит что делал

Причина: контекст переполнен или вы начали новый чат.
Решение: при новом чате дайте агенту контекст:

Ты собирал проект авторизации для example.com. Авторизация сделана (кубики 1-5). Нужно добавить парсинг – ты остановился перед этим шагом. Продолжай

❓ В кубике C# появились ``` в коде

Причина: агент вставил markdown-обёртку вместо чистого кода.
Решение: удалите строки ```csharp в начале и ``` в конце вручную. Или попросите агента:

Перезапиши код кубика C# с id=X – убери markdown-обёртки, оставь только чистый C#

❓ Агент добавил кубики не туда

Причина: курсор (SetCursor) стоял не там, где вы ожидали.
Решение: перед добавлением кубиков явно укажите позицию:

Добавь кубики после кубика с id=N, в группу "Авторизация"

❓ Агент "придумал" метод C# которого не существует

Причина: языковая модель галлюцинирует API, особенно специфичный для ZennoPoster.
Решение:

  • Проверяйте C#-код перед запуском
  • Используйте официальную документацию
  • Спросите у агента: "Этот метод существует в ZennoPoster? Покажи пример из документации"

❓ Агент начал что-то делать, но сделал не то. Как откатить?

Проблема: ZennoPoster не имеет "отменить" для действий агента (Ctrl+Z).
Профилактика: перед сложной задачей сохраните копию проекта.
После ошибки: попросите агента удалить добавленные кубики по названию/id или удалите вручную.


❓ Могу ли я работать с браузером пока агент работает?

Ответ: нет. В режиме RECORD агент управляет браузером – параллельная работа приведёт к конфликту действий. Дождитесь завершения или остановите агента.


10. Архитектура решения (для продвинутых)

Схема компонентов

ProjectMaker (UI)


Chat Interface


Semantic Kernel ───────────────────────────────┐
(Microsoft, оркестратор) │
│ │
├──► LLM Model (выбирается пользователем) │
│ │
├──► Project MCP Server ◄─────────────────┘
│ │
│ ├── GetProjectStructure
│ ├── AddAction / EditAction
│ ├── GetActionDetails / GetActionSchema
│ ├── FindActions
│ ├── SetCursor / GetCursor
│ ├── SetRecording / GetRecording
│ ├── SetActionLinks
│ └── Variables / Lists / Groups

└──► Browser MCP Server

├── Navigate
├── Click / Type / Select
├── GetDomText / GetDomSnapshot
├── Screenshot
└── Scroll / Hover

Как проходит один "ход" агента

Пользователь пишет запрос


Semantic Kernel отправляет запрос в LLM
(системный промпт + история + контекст проекта)


LLM решает: ответить текстом ИЛИ вызвать инструмент

┌─────┴─────┐
│ │
Ответ Вызов инструмента
текстом (Project MCP / Browser MCP)
│ │
│ ▼
│ Инструмент выполняется
│ Результат возвращается в LLM
│ │
└─────┬─────┘


LLM формирует следующее действие или финальный ответ

Режим записи (SetRecording)

Режим записи – ключевой механизм RECORD-сценария. Когда он включён:

  • Каждое действие Browser MCP (клик, ввод, навигация) автоматически создаёт кубик в проекте
  • Кубики добавляются последовательно в текущую позицию курсора
  • Агент не вызывает AddAction явно – браузер пишет за него

Когда выключен:

  • Browser MCP действия выполняются, но не записываются в проект
  • Используется для "чтения" состояния страницы без загрязнения проекта лишними кубиками

Курсор проекта (SetCursor / GetCursor)

Курсор определяет, куда будет вставлен следующий кубик. Состоит из двух параметров:

  • actionId – id кубика, после которого будет вставлен следующий
  • groupId – id группы, в которую будет вставлен кубик

Перед добавлением серии кубиков агент должен установить курсор в нужное место. Если этого не сделать – кубики могут появиться в неожиданном месте проекта.


11. Подключение внешних AI-ассистентов (опционально)

Встроенный чат в ProjectMaker работает "из коробки" – настраивать ничего не нужно. Но те же MCP-серверы (Project MCP и Browser MCP) можно подключить и к внешним AI-ассистентам, чтобы управлять проектом и браузером из своего редактора или терминала.

Это две разные вещи. Встроенный чат и внешний ассистент – независимые точки входа к одним и тем же MCP-серверам. Если вам хватает встроенного чата – этот раздел можно пропустить.

Общее требование: ProjectMaker должен быть запущен – MCP-серверы стартуют вместе с ним и слушают:

  • BrowserMCPhttp://localhost:6108
  • ProjectMCPhttp://localhost:6107

GitHub Copilot

  1. Убедитесь, что ProjectMaker запущен.
  2. Откройте папку профиля: Win + R%USERPROFILE% → Enter.
  3. Создайте файл .mcp.json (например, C:\Users\YourName\.mcp.json) со следующим содержимым:
{
"servers": {
"BrowserMCP": { "type": "http", "url": "http://localhost:6108" },
"ProjectMCP": { "type": "http", "url": "http://localhost:6107" }
}
}
  1. Перезапустите Visual Studio (или перезагрузите расширение Copilot).

Claude Code (CLI)

claude mcp add BrowserMCP --transport http http://localhost:6108
claude mcp add ProjectMCP --transport http http://localhost:6107
claude mcp list # проверка

Удалить позже: claude mcp remove BrowserMCP и claude mcp remove ProjectMCP.

OpenAI Codex (CLI)

codex mcp add BrowserMCP --url http://localhost:6108
codex mcp add ProjectMCP --url http://localhost:6107
codex mcp list # проверка

12. Развитие ИИ-помощника

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

Это значит, что ограничения, описанные в разделе 7, со временем будут уменьшаться, а сценарии работы – расширяться.

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

  1. добавлением лимитированной дефолтной бесплатной модели
  2. возможностью работать с несколькими чатами одновременно, а также переключением между ними с сохранением контекста и истории чата
  3. добавлением работы с openrouter
  4. другими улучшениями работы ИИ-помощника

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