Работа агента в процессе
В зависимости от вашей задачи, агент может работать в процессе по-разному: быть частью сложной автоматизации, напрямую отвечать пользователю в чате или вести полноценный диалог.
Из этой статьи вы узнаете, как настроить агента для разных задач:
- Напрямую отвечать пользователю: режим по умолчанию, в котором агент сразу отправляет свой ответ в чат.
- Вести полноценный диалог: чтобы агент поддерживал беседу для решения многошаговых задач.
- Использовать как функцию: чтобы агент сгенерировал нужные данные и передал их в другой блок.
- Создавать мультиагентные процессы: чтобы объединить несколько агентов для построения сложных и надежных систем.
Ответ пользователю
По умолчанию у агента включена опция Отправлять ответ пользователю, поэтому агент автоматически отправляет сообщение в чат сразу после генерации ответа.
Процесс будет работать так:
При этом вы можете получить ответ агента и далее использовать его в процессе с помощью функции Context.getLastFunctionResult().
Диалог с агентом
Часто для решения задачи агенту нужно обменяться с пользователем несколькими сообщениями, например, чтобы уточнить детали или задать вопросы. Однако по умолчанию агент обрабатывает только одно сообщение и процесс сразу переходит к следующему блоку.
Предположим, у нас есть процесс агента поддержки:
-
У агента включена опция Отправлять ответ пользователю.
-
Перед блоком агента выполняется функция
Support.createIssue, которая регистрирует новое обращение в поддержку. После блока агента выполняется функцияSupport.closeIssue, которая закрывает обращение.подсказкаSupport.createIssueиSupport.closeIssue— это пользовательские функции, которые мы создали заранее для этого примера.
В таком процессе на каждое сообщение пользователя будет создаваться новое обращение. Обращение также будет закрываться после каждого ответа агента.
Чтобы агент мог вести полноценный диалог, нужно «остановить» процесс на его блоке до тех пор, пока задача пользователя не будет решена. Для этого:
-
Перейдите в настройки блока Агент.
-
На вкладке Настройки → Ответы и диалог включите опцию Режим диалога. При этом опция Отправлять ответ пользователю включится автоматически.
-
Выберите блок, в который должен происходить переход после достижения цели. Это можно сделать двумя способами:
- В настройках агента на вкладке Процесс выберите блок в поле Следующий шаг процесса.
- Просто присоедините блок к выходу агента на холсте.
подсказкаВ нашем примере это уже блок с функцией
Support.closeIssue.
Теперь процесс будет работать правильно: обращение откроется один раз и закроется только тогда, когда агент выполнит свою цель.
Агент как функция и структурированный вывод
Если вы хотите использовать ответ агента в других блоках или дополнительно обрабатывать его, то используйте агента в качестве функции. Для этого:
-
Отключите настройку Отправлять ответ пользователю. Агент будет генерировать ответ, но не будет отправлять его в чат.
-
Чтобы получать от агента JSON-объект, включите опцию Структурированный вывод и укажите JSON-схему в формате OpenAI Structured Outputs.
примечаниеСайт OpenAI недоступен для российских IP-адресов.
Требования:
- Корень схемы — объект:
"type": "object". - У каждого объекта схемы — включая вложенные — должно быть указано
"additionalProperties": false, а поля каждого объекта должны быть перечислены вrequired.
Пример схемы, в которой агенту нужно указать приоритет проблемы, описание и устройство, на котором она возникла:
{
"type": "object",
"properties": {
"priority": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"issue_description": { "type": "string" },
"device": {
"type": "string",
"enum": ["web", "android", "ios", "unknown"]
}
},
"required": ["priority", "issue_description", "device"],
"additionalProperties": false
} - Корень схемы — объект:
-
В следующем блоке получите ответ агента. Способ зависит от версии движка:
- Версия 2
- Версия 1
Используйте подстановки:
{{ previousResult }}— весь ответ агента.{{ previousResult.priority }}— значение поляpriorityиз ответа агента, если вы использовали структурированный вывод.
{{Context.getLastFunctionResult()}}— весь ответ агента.{{Context.getLastFunctionResult().priority}}— значение поляpriorityиз ответа агента, если вы использовали структурированный вывод.
Пример процесса:
Работа агента без сообщения пользователя
По умолчанию агент ожидает, что ему напишет пользователь. Но триггеры Планировщик, Вебхук или IMAP Email запускают процесс сами, без входящего сообщения, и работают в изолированной служебной сессии без канала. В этих случаях нужно:
- Указать запрос для агента вручную — иначе агент не поймет, что нужно сделать.
- Отключить опцию Отправлять ответ пользователю и добавить после агента явную функцию отправки, например
Telegram.sendTextилиEmail.send, — иначе ответ агента не дойдет до пользователя. См. пример ниже.
Чтобы указать запрос для агента:
-
Дважды нажмите на блок агента на холсте.
-
В разделе Настройки → Промты заполните поле Запрос для агента.
Вы можете написать текст запроса и использовать данные из предыдущих шагов. Например, передать результат работы функции:
-
Если в вашем проекте движок версии 2:
Условия новой акции: {{ previousResult }} -
Если движок версии 1:
Условия новой акции: {{ Context.getLastFunctionResult() }}
-
-
Нажмите Сохранить.
Пример: агент, который сообщает о текущей акции
В этом примере:
-
Срабатывает триггер Вебхук.
-
Пользовательская функция берет данные из тела вебхука и возвращает их строкой:
return JSON.stringify(Context.getMessageContent().payload); -
Агент получает условия акции и составляет рекламное сообщение.
Настройки агента
-
Роль:
Маркетолог. -
Цель:
Сообщи об акции клиенту. -
Инструкции:
Ты получишь условия акции. Составь рекламное сообщение для клиента. -
Запрос для агента:
-
Для движка версии 2:
Условия новой акции: {{ previousResult }} -
Для версии 1:
Условия новой акции: {{ Context.getLastFunctionResult() }}
-
-
Отправлять ответ пользователю: настройка отключена.
-
Режим диалога: настройка отключена.
-
-
Функция
Email.sendотправляет письмо клиенту. В поле с текстом письма укажите ответ агента:-
Для движка версии 2:
{{ previousResult }} -
Для версии 1:
{{ Context.getLastFunctionResult() }}
-
Мультиагентные процессы
Преимущества
Преимущества использования нескольких агентов в одном процессе:
-
Разделение ответственности
Каждый агент выполняет узкую роль — LLM лучше справляется с одной задачей.
-
Контроль данных
Вы можете контролировать, какие данные получает каждый агент, и не передавать лишнюю информацию.
-
Гибкость и масштабируемость
Легко добавлять новых агентов для дополнительных задач.
Agent Platform предоставляет два способа построения мультиагентных процессов:
- Оркестрация — последовательная передача управления от одного агента к другому.
- Параллельный запуск — одновременная обработка запроса несколькими агентами независимо.
Оркестрация
В примере ниже показан процесс с тремя агентами. В этом процессе пользователь может получить консультацию по питанию или попросить составить план тренировок.
Первое сообщение пользователя попадет к агенту-оркестратору, который определит, к какому из двух специализированных агентов (по питанию или по тренировкам) нужно перенаправить запрос.
Пользователь сможет продолжить диалог с выбранным агентом или переключиться на другого.
Если цель достигнута или пользователь откажется от помощи, процесс завершится — будет выполнена функция Feedback.sendForm.
Feedback.sendForm — это пользовательская функция, которую мы создали заранее для этого примера.
Передача диалога другим агентам настраивается только в окне агента-оркестратора, при этом на холсте не отображаются связи между агентами.
Стрелки на холсте показывают, куда перейдет процесс после того, как агент-специалист (например, «Нутрициолог») полностью завершит свою работу. В нашем примере он вернет управление обратно «Помощнику».
Рассмотрим настройки каждого из агентов.
-
Агент «Помощник» — это оркестратор, который перенаправит запрос к нужному агенту.
-
У агента включена опция Режим диалога, чтобы он мог поддерживать диалог с пользователем и процесс не завершался после первого ответа.
-
На вкладке Процесс в секции Передача управления другим агентам выбраны Нутрициолог и Тренер. Это позволяет агенту-оркестратору классифицировать запросы и передавать их нужному агенту.
Оркестратор учитывает цели агентов, чтобы правильно классифицировать запросы.
подсказкаВы также можете включить опцию Включая новых созданных агентов. Так любые новые агенты в процессе будут автоматически доступны для оркестратора.
-
-
Агенты «Тренер» и «Нутрициолог» — это специализированные агенты, которые обрабатывают запросы по своим направлениям.
-
У каждого агента включена опция Режим диалога, чтобы они могли поддерживать диалог с пользователем и процесс не завершался после первого ответа.
-
Следующий шаг процесса у каждого агента — это агент оркестратор.
Если у пользователя нет больше вопросов или вопрос не по теме агента:
- Диалог перейдет к агенту-оркестратору.
- Оркестратор может передать запросу другому агенту или посчитать, что можно завершить диалог.
-
Процесс работает так:
Параллельный запуск
В примере ниже показан процесс, который помогает пользователям искать товары в разных маркетплейсах. Пользователь пишет: «Найди мне кроссовки Nike Air 43 размера». Блок Разветвление одновременно запускает трех независимых агентов:
- Агент A ищет товар по API магазина A.
- Агент B ищет товар по API магазина B.
- Агент C ищет товар по API магазина C.
Далее управление переходит в узел Слияние. В зависимости от бизнес-задачи вы можете выбрать одну из двух опций слияния:
-
Когда все агенты завершат работу — чтобы предоставить максимальный выбор и аналитику.
Собранные данные передаются на следующий шаг, который анализирует ответы, находит самую низкую цену и отвечает пользователю: «Я проверил все магазины. В A они стоят 10 000 ₽, в C — 9 500 ₽, а в B их нет в наличии. Самая выгодная покупка — в С [ссылка]».
-
Когда любой агент завершит работу — если в приоритете максимальная скорость ответа.
Как только первый из трех агентов находит товар в наличии, пользователь получает ответ: «Товар найден в магазине A, цена 10 000 ₽. Держите ссылку!». Это идеально подходит для горячих предложений, когда скорость важнее сравнения.
Отличие от оркестрации: агенты работают независимо и параллельно, а не передают управление друг другу поочередно. Подробнее о настройке и ограничениях — в разделе Параллельное выполнение.