
От переводчика: Зачем читать это руководство, если у нас нет Camunda 8?
Затем, что в нем хорошо изложена методология, как использовать искусственный интеллект в бизнес-процессах. Не надо слишком фокусироваться на деталях продукта, где какую кнопку нажать. Следите в целом за идеей, как это делается.Разговоров об AI-агентах сейчас много, а практических решений довольно мало. Camunda предлагает довольно интересный подход на основе своего опыта оркестрации людей и микросервисов. Он вполне может оказаться успешным и применительно к AI-агентам.
Больше материалов о том, как создавать решения по автоматизации процессов в нашем канале BPM Developers.
В этом пошаговом руководстве вы узнаете о последних способах использования агентного ИИ и о том, как уже сегодня воспользоваться агентной оркестрацией с Camunda.
Подход Camunda к AI-агентам
Camunda выбрала системный, ориентированный на будущее подход к агентному ИИ, опираясь на проверенный фундамент BPMN. В основе этого подхода лежит использование конструкта BPMN ad-hoc подпроцесса, который позволяет выполнять задачи в любом порядке, пропускать их или повторять — всё это определяется динамически во время выполнения, исходя из контекста экземпляра процесса.
Этот шаблон играет ключевую роль во введении динамического (недетерминированного) поведения в изначально детерминированные модели процессов. В Camunda ad-hoc подпроцесс становится рабочим пространством агента для принятия решений — гибким контейнером выполнения, где большие языковые модели (LLM) могут оценивать доступные действия и определять наиболее подходящие следующие шаги в реальном времени.
Мы расширили эту возможность с введением исходящего коннектора AI Agent и коннектора коннектора к векторной базе данных эмбеддингов. Вместе они обеспечивают полный спектр возможностей для оркестрации агентов, где рабочие процессы бесшовно объединяют детерминированное управление потоком с динамическим, управляемым ИИ принятием решений. Эта двойная способность поддерживает как массовую прямую обработку (straight-through processing, STP), так и адаптивное управление кейсами, позволяя агентам планировать, рассуждать и взаимодействовать в сложных средах. AI-агенты в Camunda могут добавлять дополнительный контекст для обработки исключений из STP.
Поддержка агентских AI-решений в Camunda
Для поддержки автоматизации следующего поколения Camunda использует структурированные шаблоны оркестрации. Подход Camunda обеспечивает, что ваша оркестрация ИИ остаётся адаптивной, целеориентированной и бесшовно совместимой в сложных распределённых системах.
В рамках этой эволюции Camunda интегрировала архитектурный паттерн Retrieval-Augmented Generation (RAG) в свою оркестрационную ткань. RAG позволяет агентам извлекать релевантные внешние знания — такие как исторические данные кейсов или специализированный контент домена — и использовать этот контекст для генерации более обоснованных и точных решений. Это реализуется через устойчивые, управляемые событиями рабочие процессы, которые координируют извлечение, рассуждение и взаимодействие с человеком.
Camunda поддерживает это с помощью нового исходящего коннектора к векторной базе данных эмбеддингов — модульного компонента, который интегрирует RAG с системами долговременной памяти. Этот коннектор поддерживает различные векторные базы данных, включая как Amazon Managed OpenSearch (используется в этом примере), так и Elasticsearch.
С такой настройкой агенты могут встраивать знания в свои циклы принятия решений, извлекая семантически релевантные данные во время выполнения. Этот же механизм может использоваться для обновления и развития базы знаний, что позволяет реализовать самообучающиеся поведения через непрерывную обратную связь.
Для завершения агентного стека Camunda также предлагает исходящий коннектор AI Agent. Этот коннектор взаимодействует с широкой экосистемой больших языковых моделей (LLM), таких как OpenAI и Anthropic, наделяя агентов способностью к рассуждению, которая позволяет им автономно выбирать и выполнять ad-hoc подпроцессы. Эти агенты оценивают текущий контекст процесса, определяют, какие задачи наиболее релевантны, и действуют соответствующим образом — всё это в управляемых рамках оркестрации, смоделированной в BPMN.
Как это применяется
Прежде чем перейти к примеру, давайте кратко рассмотрим, как эти новые компоненты и подход Camunda будут использоваться в оркестрации агентного ИИ.
Первый ключевой компонент — это AI Task Agent. Это мозг всей работы. Вы задаёте этому агенту цель, инструкции, ограничения и его цепочку рассуждений, чтобы он мог принимать решения о том, как достичь поставленной цели.
Второй компонент — это ad-hoc подпроцесс. В него входят различные инструменты и задачи, которые могут быть выполнены для достижения цели.
AI Agent получает указание (prompt) и решает, какие инструменты следует запустить для достижения цели. Агент переоценивает цель и информацию из ad-hoc подпроцесса и определяет, какие из этих инструментов, если вообще нужны, следует снова использовать для достижения цели; в противном случае процесс завершается.
Имея эту информацию, мы можем перейти к примеру.
Обзор примера
Этот процесс BPMN определяет сервис доставки сообщений для Hawk Emporium, где задачи выполняют агенты на базе ИИ, принимая решения в реальном времени для интерпретации запросов клиентов и выбора оптимальных каналов коммуникации для доставки сообщений.
Пример модели для этого процесса — это сервис доставки сообщений (Message Delivery Service), показанный ниже.

Процесс начинается с того, что пользователь заполняет форму, включая сообщение, получателя(ей) и отправителя. На основе этих данных скриптовая задача формирует prompt для отправки AI Task Agent. AI Task обрабатывает сгенерированный prompt и определяет, какие задачи нужно выполнить. В зависимости от решения AI Agent процесс либо завершается, либо продолжает уточняться с использованием различных инструментов, пока сообщение не будет доставлено.
Задачи, которые могут быть выполнены, находятся внутри ad-hoc подпроцесса и включают:
Отправка сообщения в Slack (Send Slack Message) в определённые каналы Slack,
Отправка электронного письма (Send an Email) с помощью SendGrid,
Запрос дополнительной информации (Ask an Expert) через User Task с соответствующей формой.
Если AI Task Agent располагает всей необходимой информацией для генерации, отправки и доставки сообщения, он выполнит нужное действие через корректный инструмент для данного запроса. Если же AI Agent определяет, что требуется дополнительная информация — например, отсутствует адрес электронной почты или нужно уточнить тональность сообщения, — агент отправляет экземпляр процесса человеку для получения этой информации.
Процесс завершается, когда больше не требуется никаких действий.
Подробное описание процесса
Давайте чуть глубже рассмотрим компоненты процесса BPMN, прежде чем переходить к его построению и выполнению.
AI Task Agent
В этом упражнении AI Task Agent использует модель Claude 3 Sonnet от AWS Bedrock для обработки запросов. Агент принимает решения о том, какие инструменты использовать, исходя из контекста. В качестве альтернативы можно использовать Anthropic или OpenAI.
SendGrid
Для задачи отправки электронных писем вы будете отправлять письмо от имени community@camunda.com. Обратите внимание: если вы используете собственный аккаунт SendGrid, этот адрес отправителя может измениться на адрес электронной почты из вашего аккаунта.
Slack
Для задачи отправки сообщений в Slack вам нужно создать следующие каналы в своей Slack-организации:
#good-news
#bad-news
#other-news
Допущения, предварительные условия и начальная настройка
Сделаны несколько предположений для тех, кто будет использовать это пошаговое руководство для реализации своего первого процесса с агентным ИИ, используя новые возможности Camunda. Они изложены в этом разделе.
Подходящая среда
Чтобы воспользоваться последними и наиболее продвинутыми функциями Camunda, вам понадобится кластер Camunda версии 8.8-alpha4 или выше. Для создания модели и интерфейса пользовательских задач вы будете использовать Web Modeler и Forms, а при выполнении процесса — Tasklist.
Необходимые навыки
Предполагается, что пользователи этого руководства обладают следующими навыками работы с Camunda:
Form Editor — умение создавать формы для использования в процессе.
Web Modeler — умение создавать элементы BPMN и правильно связывать их между собой, прикреплять формы и обновлять свойства коннекторов.
Tasklist — умение открывать элементы и работать с ними, а также запускать процессы.
Operate — умение мониторить выполняющиеся процессы и просматривать переменные, пути и циклы, которые прошёл экземпляр процесса.
Видеоурок
К этому руководству мы подготовили пошаговый видеоурок. Шаги, описанные в руководстве, практически полностью повторяют действия, показанные в видео. Также мы предоставили репозиторий на GitHub с артефактами, использованными в этом примере.
Ключи и данные для подключения коннекторов
Если у вас нет существующих аккаунтов для коннекторов, которые будут использоваться, вы можете их создать.
Вам понадобится аккаунт AWS с корректными учётными данными для AWS Bedrock. Если у вас его нет, вы можете следовать инструкциям на сайте AWS, чтобы выполнить настройку и получить необходимые ключи:
AWS Region
AWS Access key
AWS Secret key
Также вам понадобится аккаунт SendGrid и в Slack. Для каждого сервиса необходимо получить API-ключ, который будет использоваться в Camunda Console для создания секретов.

Учетные данные будут использоваться в модели в формате {{secrets.yourSecretHere}}
, где yourSecretHere
обозначает имя вашего ключа или токера для коннектора.
Чтобы этот пример работал, вам нужно создать учетки со следующими именами (если вы используете наш пример и следуете предоставленным скриншотам):
SendGrid
Slack
AWS_SECRET_KEY
AWS_ACCESS_KEY
AWS_REGION
Отделение чувствительной информации от модели процесса является наилучшей практикой. Так как в этой модели мы будем использовать несколько коннекторов, вам необходимо создать соответствующие параметры коннекторов внутри вашего кластера. Вы можете воспользоваться инструкциями в нашей документации, чтобы узнать, как создавать ключи доступа в кластере.
Теперь, когда у вас есть все вводные, давайте перейдём к построению процесса.
Вы можете загрузить модель из GitHub repository.
Обзор пошагового руководства
Для этого примера нужно выполнить следующие шаги:
-
Создать исходный высокоуровневый процесс в режиме проектирования.
Создать ad-hoc подпроцесс с элементами AI Task Agent.
-
Реализовать процесс.
-
Настроить коннекторы.
Настроить коннектор AI Agent.
Настроить коннектор Slack.
Создать стартовую форму.
Настроить AI Task Agent.
Обновить шлюзы для маршрутизации.
Настроить ad-hoc подпроцесс.
Соединить ad-hoc подпроцесс и AI Task Agent.
-
Развернуть и запустить процесс.
Доработать процесс, снова развернуть и запустить.
Создайте начальный вариант процесса
Создайте своё процессное приложение
Первым шагом является создание процессного приложения для вашей модели процесса и любых связанных с ней артефактов. Создайте новый проект, используя синюю кнопку в правом верхнем углу среды Modeler.

Введите имя для вашего проекта. В данном случае мы использовали название «AI Task Agent Tutorial», как показано ниже.

Затем создайте своё процессное приложение.
Введите название процессного приложения (в этом примере — «AI Task Agent Tutorial»), выберите кластер Camunda версии 8.8-alpha4 (или выше), который вы будете использовать для проекта, и нажмите Create, чтобы создать приложение внутри этого проекта.
Исходная модель
Следующим шагом является построение модели процесса в BPMN и соответствующих форм для любых пользовательских задач. Мы будем создавать модель, показанную ниже.

Нажмите на процесс «AI Agent Tutorial», чтобы открыть диаграмму процесса. Сначала измените имя процесса на «Message Delivery Service», а затем переключитесь в режим Design, как показано ниже.

Эти шаги помогут вам создать исходную модель.
1/ Дайте имя стартовому событию. Мы назвали его «Message needs to be sent», как показано ниже. Это стартовое событие будет иметь форму на стороне интерфейса, которую мы создадим немного позже.

2/ Добавьте конечное событие и назовите его «Message delivered».

3/ Следующим шагом после стартового события будет скриптовая задача под названием «Create Prompt». Эта задача будет использоваться для формирования промпта для AI Task Agent.

4/ Теперь нужно создать AI Task Agent. Этот шаг мы подробно реализуем позже, после построения диаграммы процесса.

Создайте ad-hoc подпроцесс
Теперь мы на том этапе процесса, где нужно создать ad-hoc подпроцесс, который будет содержать набор инструментов (toolbox), используемых AI Task Agent для достижения цели.
1/ Перетащите из палитры нужный элемент для раскрытого подпроцесса (expanded subprocess).

Ваш процесс теперь будет выглядеть примерно так.

2/ Сейчас это стандартный подпроцесс, что видно по наличию стартового события. Нам нужно удалить стартовое событие, а затем изменить элемент на «Ad-hoc sub-process».

После того как тип подпроцесса изменён, вы увидите символ BPMN (~) внутри подпроцесса, обозначающий, что это ad-hoc подпроцесс.
3/ Теперь нужно изменить его на «Parallel multi-instance», чтобы элементы внутри подпроцесса могли выполняться более одного раза, если это потребуется.

Это ключевой момент нашего процесса, так как ad-hoc подпроцесс будет содержать набор инструментов, которые могут быть задействованы или не задействованы для достижения цели. Хотя BPMN обычно очень строг в отношении того, что активируется, этот конструкт позволяет управлять тем, что запускается в зависимости от того, что передаётся в подпроцесс.
4/ Нам нужно принять решение после выполнения AI Task Agent, которое при необходимости корректно направит экземпляр процесса обратно через набор инструментов. Поэтому добавьте исключающий шлюз (exclusive gateway) между AI Task Agent и конечным событием, как показано ниже, и назовите его «Should I run more tools?».

5/ Теперь соедините эту задачу с правой стороной вашего ad-hoc подпроцесса.

6/ Если дополнительные инструменты не требуются, процесс должен завершиться. Если же они нужны, процесс должен вернуться к ad-hoc подпроцессу. Пометьте переход к конечному событию как «No», а переход к подпроцессу как «Yes», чтобы маршрутизация выполнялась корректно.

7/ Увеличьте физический размер подпроцесса, так как мы будем добавлять в него элементы.
8/ Начнём с добавления одной задачи для отправки сообщения в Slack.

9/ Теперь нужно создать шлюз, который будет возвращать процесс к AI Task Agent для проверки, достигнута ли цель. Добавьте взаимно-исключающий шлюз (exclusive gateway) после задачи «Create Prompt» с выходом из ad-hoc подпроцесса к этому шлюзу.

Реализуйте исходный процесс
Теперь перейдём к настройке деталей для каждого элемента, чтобы реализовать модель, поэтому переключитесь на вкладку Implement в Web Modeler.
Настройте остальные задачи
Следующее, что нужно сделать в режиме реализации, — это назначить правильные типы задач для элементов, которые сейчас являются абстрактными задачами.
AI Agent connector
Сначала мы обновим AI Task Agent, чтобы он использовал правильный коннектор.
1/ Убедитесь, что вы используете нужную версию кластера. Это можно проверить в правом нижнем углу Web Modeler и выбрать кластер версии не ниже 8.8 alpha4.

2/ Теперь выберите элемент AI Task Agent и измените его тип на Agentic AI Connector, как показано ниже.

Это изменит значок у вашего Task Agent, сделав его таким, как показано ниже.

Slack connector
1/ Выберите задачу «Send a Slack Message» внутри ad-hoc подпроцесса и измените её тип на Slack Outbound Connector.

Создание стартовой формы
Давайте начнём с создания формы для запуска процесса.
Примечание: если вы не хотите создавать форму с нуля, просто загрузите готовые формы из предоставленного репозитория GitHub. Чтобы построить свою собственную, следуйте этим инструкциям.
Начальная форма должна спросить пользователя:
Какие сотрудники Hawk Emporium должны получить сообщение
Что будет сказано в сообщении
Кто является отправителем сообщения
Готовая форма должна выглядеть примерно так.

Чтобы войти в Form Builder, выберите стартовое событие, нажмите на значок цепочки и выберите + Create new form. Начните с создания элемента Text View для заголовка и в поле Text в свойствах компонента введите текст: # What do you want to Say?
В этой форме вам понадобятся следующие поля:
Field |
Type |
Description |
Req? |
Key |
To whom does this concern? |
Text |
Y |
|
|
What do you want to say? |
Text |
Y |
|
|
Who are you? |
Text |
Y |
|
После того как вы завершите создание формы, нажмите Go to Diagram ->, чтобы вернуться к своей модели.
Создайте промпт
Теперь нужно сгенерировать prompt, который будет использоваться в скриптовой задаче, чтобы указать AI Task Agent, что нужно сделать.
1/ Выберите скриптовую задачу «Create Prompt» и обновите свойства, начав с параметра Implementation, который следует установить как FEEL expression.
2/ Это действие откроет два дополнительных обязательных поля: Result variable и FEEL expression.
3/ В поле Result variable создайте переменную для prompt, поэтому введите здесь prompt
.
4/ В поле FEEL expression вам нужно будет задать текст вашего prompt."I have a message from " + sender + " they would like to convey the following message: " + message + " It is intended for " + person

Настройте AI Task Agent
Теперь нужно настроить мозг всей операции — AI Task Agent. Эта задача обрабатывает получение prompt и отправляет запрос в LLM для определения следующих шагов. В этом разделе мы настроим агента с конкретными переменными и значениями, основанными на нашей модели, а также используем некоторые значения по умолчанию, где это уместно.
1/ Сначала необходимо выбрать Model Provider, который мы будем использовать в этом примере, — выберем AWS Bedrock.

В панели свойств откроются дополнительные поля, специфичные для этой модели.
2/ Следующее поле — Region для AWS. В данном случае для региона был создан секретный ключ (AWS_REGION), который и нужно использовать в этом поле.

Помните, что в вашей модели конфиденциальные параметры указываются в формате {{secrets.yourSecretHere}}
, где yourSecretHere
— это имя вашего секретного ключа для коннектора.
3/ Теперь нужно обновить учётные данные авторизации, указав AWS Access Key и AWS Secret Key из созданных секретов коннектора.

4/ Далее нужно настроить Agent Context в разделе Memory вашей задачи. Эта переменная очень важна, как видно из текста под полем переменной.
Переменная agent context содержит все релевантные данные для агента, чтобы поддерживать цикл обратной связи между пользовательскими запросами, вызовами инструментов и ответами LLM. Убедитесь, что эта переменная указывает на контекстную переменную, возвращаемую из ответа агента.
В нашем случае мы создадим переменную с именем agent, внутри которой будет ещё одна переменная context, поэтому для этого поля используем значение agent.context. Эта переменная будет играть ключевую роль в процессе.

Мы оставим максимальное количество сообщений равным 20 — это надёжный лимит.
5/ Теперь обновим system prompt. Для этого мы подготовили подробный системный промпт, который вы можете использовать в этом примере. Конечно, вы можете создать и свой собственный. Он вводится в раздел System Prompt для переменной System Prompt.
Подсказка: если вы создаёте собственный промпт, попробуйте воспользоваться инструментами вроде ChatGPT или другими AI-сервисами, чтобы помочь построить сильный промпт.

Если вы хотите скопировать и вставить prompt, вы можете использовать следующий код:
You are **TaskAgent**, a helpful, generic chat agent that can handle a wide variety of customer requests using your own domain knowledge **and** any tools explicitly provided to you at runtime.
────────────────────────────────
# 0. CONTEXT — WHO IS “USER”?
────────────────────────────────
• **Every incoming user message is from the customer.**
• Treat “user” and “customer” as the same person throughout the conversation.
• Internal staff or experts communicate only through the expert-communication tool(s).
────────────────────────────────
# 1. MANDATORY TOOL-DRIVEN WORKFLOW
────────────────────────────────
For **every** customer request, follow this exact sequence:
1. **Inspect** the full list of available tools.
2. **Evaluate** each tool’s relevance.
3. **Invoke at least one relevant tool** *before* replying to the customer.
• Call the same tool multiple times with different inputs if useful.
• If no domain-specific tool fits, you **must**
a. call a generic search / knowledge-retrieval tool **or**
b. escalate via the expert-communication tool (e.g. `ask_expert`, `escalate_expert`).
• Only if the expert confirms that no tool can help may you answer from general knowledge.
• Any decision to skip a potentially helpful tool must be justified inside `<reflection>`.
4. **Communication mandate**:
• To gather more information from the **customer**, call the *customer-communication tool* (e.g. `ask_customer`, `send_customer_msg`).
• To seek guidance from an **expert**, call the *expert-communication tool*.
5. **Never** invent or call tools that are not in the supplied list.
6. After exhausting every relevant tool—and expert escalation if required—if you still cannot help, reply exactly with
`ERROR: <brief explanation>`.
────────────────────────────────
# 2. DATA PRIVACY & LOOKUPS
────────────────────────────────
When real-person data or contact details are involved, do **not** fabricate information.
Use the appropriate lookup tools; if data cannot be retrieved, reply with the standard error message above.
────────────────────────────────
# 3. CHAIN-OF-THOUGHT FORMAT (MANDATORY BEFORE EVERY TOOL CALL)
────────────────────────────────
Wrap minimal, inspectable reasoning in *exactly* this XML template:
<thinking>
<context>…briefly state the customer’s need and current state…</context>
<reflection>…list candidate tools, justify which you will call next and why…</reflection>
</thinking>
Reveal **no** additional private reasoning outside these tags.
────────────────────────────────
# 4. SATISFACTION CONFIRMATION, FINAL EMAIL & TASK RESOLUTION
────────────────────────────────
A. When you believe the request is fulfilled, end your reply with a confirmation question such as
“Does this fully resolve your issue?”
B. If the customer answers positively (e.g. “yes”, “that’s perfect”, “thanks”):
1. **Immediately call** the designated email-delivery tool (e.g. `send_email`, `send_customer_msg`) with an appropriate subject and body that contains the final solution.
2. After that tool call, your *next* chat message must contain **only** this word:
RESOLVED
C. If the customer’s very next message already expresses satisfaction without the confirmation question, do step B immediately.
D. Never append anything after “RESOLVED”.
E. If no email-delivery tool exists, escalate to the expert-communication tool; if the expert confirms none exists, reply with an error as described in §1-6.
6/ Помните, что в задаче Create Prompt мы сохранили prompt в переменной с именем prompt. Эту переменную нужно использовать в разделе User Prompt для поля User Prompt.
7/ Ключ к этому шагу — это инструменты, доступные AI Task Agent, поэтому нам нужно связать агента с ad-hoc подпроцессом. Для этого мы сопоставляем ID подпроцесса с полем tools в AI Task Agent.
Начните с выбора вашего ad-hoc подпроцесса и задайте ему имя и идентификатор. В примере мы используем название “Hawk Tools” и идентификатор hawkTools.

Вернитесь к AI Task Agent и обновите поле Ad-hoc subprocess ID, указав значение hawkTools для идентификатора подпроцесса.

Теперь нужна переменная для хранения результатов вызова набора инструментов, которую следует указать в поле Tool Call Results. Мы будем использовать переменную toolCallResults.

Есть ещё несколько важных параметров. Для ряда переменных мы будем использовать значения по умолчанию. В разделе Limits оставим параметр Maximum model calls равным 10, что ограничит количество вызовов модели до десяти. Это важно для контроля затрат.

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

Теперь нужно обновить раздел Output Mapping, а именно поле Result variable. Здесь мы будем использовать переменную agent, которая будет содержать все компоненты результата, включая ход рассуждений, выбранный AI Task Agent.

Поздравляем! Вы завершили настройку своего AI Task Agent. Теперь осталось выполнить несколько финальных соединений и обновлений, прежде чем можно будет увидеть процесс в действии.
Настройка шлюза
Мы будем использовать значения переменных из AI Task Agent, чтобы определить, нужно ли запускать дополнительные инструменты.
Выберите путь «Yes» и добавьте следующее условие:
not(agent.toolCalls = null) and count(agent.toolCalls) > 0

Для пути «No» мы установим его в качестве потока по умолчанию (default flow).

Заключительные детали по ad hoc подпроцессу
Сначала нужно задать коллекцию инструментов, которые будет использовать подпроцесс. Для этого обновите поле Input collection в переменной Multi-instance.
1/ Затем для каждого отдельного элемента укажите Input element, который будет содержать один объект toolCall.

2/ Затем обновите поле Output Collection, указав в нём нашу результирующую переменную — toolCallResults.

3/ Наконец, нужно создать FEEL expression для поля Output element, как показано ниже:
{<br> id: toolCall._
meta.id
,<br> name: toolCall._
meta.name
,<br> content: toolCallResult<br>}

Это выражение возвращает id, name и content для каждого инструмента.
4/ Напоследок нужно задать переменную для Active elements в поле Active elements collection, которая показывает, какой элемент активен в подпроцессе:
[toolCall._
meta.name
]

Чтобы пояснить: AI Task Agent формирует список элементов (инструментов), которые нужно запустить, и эта переменная указывает, какой именно элемент активируется в данном экземпляре.
Соедините элементы подпроцесса и AI Task Agent
Теперь, как сообщить агенту, что у него есть доступ к инструментам в ad-hoc подпроцессе?
Прежде всего, мы будем использовать поле Element Documentation, чтобы связать их. В это поле мы добавим описательный текст о назначении элемента. В нашем случае мы используем:This can send a slack message to everyone at Niall's Hawk Emporium

Теперь нужно настроить Slack connector, указав сообщение для отправки и канал, в который это сообщение должно быть отправлено.
1/ Для сообщения мы будем использовать FEEL expression, воспользовавшись ключевым словом fromAi, и добавим дополнительную информацию в выражение. Пример:fromAi(toolCall.slackMessage, "This is the message to be sent to slack, always good to include emojis")

Обратите внимание, что мы снова использовали переменную toolCall и указали ИИ, что он должен предоставить нам переменную с именем slackMessage.
2/ Также нужно объяснить ИИ, какой канал подходит для отправляемого типа сообщения. Напомним, что в нашей Slack-организации мы подготовили три канала. Для этого используем ещё одно FEEL-выражение, чтобы задать правила выбора канала:fromAi(toolCall.slackChannel, "There are 3 channels to use they are called, '#good-news', '#bad-news' and '#other-news'. Their names are self explanatory and depending on the type of message you want to send, you should use one of the 3 options. Make sure you use the exact name of the channel only.")

3/ Наконец, не забудьте добавить токен аутентификации для Slack в поле OAuth token. В нашем случае это: {{secrets.Slack}}

Ну вот, вы справились! Теперь у вас должна быть рабочая модель процесса, которая обращается к AI Task Agent, чтобы определить, какие элементы из его набора инструментов помогут достичь цели. Осталось лишь развернуть её и посмотреть в действии.
Разверните и запустите свою модель
Теперь нужно проверить, развернётся ли наша модель. Если вы ещё этого не сделали, имеет смысл дать процессу более удачное имя и идентификатор — примерно как показано ниже.

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

Перейдите в Tasklist → Processes, найдите свой процесс под названием «Message System» и запустите его, нажав синюю кнопку Start Process ->.

Вам будет показана созданная форма, где нужно указать, кто вы, текст сообщения и кто должен его получить. Введите в поля следующие данные:
To whom does this concern?
Everyone at the Hawk Emporium
What do you want to say?
We have a serious problem. Hawks are escaping. Please be sure to lock cages. Can you make sure this issue is taken more seriously?
Who are you?
Joyce, assistant to Niall - Owner, Hawk Emporium
Или введите что-нибудь свое.
Заполненная форма должна выглядеть примерно так, как показано ниже.

Процесс теперь запущен и должен отправить сообщение в Slack в соответствующий канал, поэтому откройте своё приложение Slack.
4/ Можно предположить, что это сообщение относится к категории «bad news», поэтому проверим каналы Slack и посмотрим, появилось ли что-то в канале #bad-news. Там вы должны увидеть сообщение, которое может выглядеть примерно так.

5/ Откройте Camunda Operate и найдите свой экземпляр процесса. Он должен выглядеть примерно так, как показано ниже.

6/ Вы можете просмотреть выполнение процесса и увидеть, что произошло, а также значения переменных.

Вы успешно выполнили свой первый AI Task Agent и связали с ним возможные задачи или элементы. Но давайте продвинемся дальше и добавим ещё несколько вариантов, которые AI Task Agent сможет использовать для достижения своей цели — отправки сообщения.

BPM Developers — про бизнес-процессы: новости, гайды, полезная информация и юмор.
Добавьте задачи в тулбокс
Почему бы не дать нашему AI Task Agent ещё несколько вариантов, которые помогут ему достичь цели — отправить правильное сообщение. Для этого мы сейчас добавим ещё пару дополнительных опций для AI Task Agent внутри нашего ad-hoc подпроцесса.
Добавьте задачу для человека
Первое, что нужно сделать, — добавить пользовательскую задачу как вариант.
1/ Перетащите ещё одну задачу в ваш ad-hoc подпроцесс и назовите её «Ask an Expert».
2/ Затем измените тип элемента на User Task.
В итоге это должно выглядеть примерно так.

Теперь нужно связать эту задачу с подпроцессом и предоставить её в качестве опции для AI Task Agent.
3/ Обновите поле Element Documentation, указав информацию об этом элементе. Например:If you need some additional information that would help you with your request, you can ask this expert.

4/ Нам нужно передать эксперту входные данные. Для этого наведите курсор на + и нажмите Create+, чтобы создать новую входную переменную.
5/ Для поля Local variable name используйте значение aiquestion, а для Variable assigned value задайте FEEL-выражение, следуя тому же шаблону, что и раньше с инструментом fromAi:fromAi(toolCall.aiquestion, "Add here the question you want to ask our expert. Keep it short and be friendly", "string")

6/ В этом случае нам нужно получить ответ от эксперта, чтобы AI Task Agent мог использовать эту информацию для определения того, как достичь цели. Добавьте Output Variable и назовите её toolCallResult. Для значения в поле Variable assignment value используйте следующий JSON:{<br> “Personal_info_response”: humanAnswer<br>}
Теперь раздел Output variable должен выглядеть примерно так, как показано ниже.

7/ Теперь нужно создать форму для этой пользовательской задачи, чтобы отобразить вопрос и дать пользователю возможность ввести свой ответ. Выберите задачу «Ask an Expert», нажмите на значок цепочки (link icon), а затем в открывшемся диалоге нажмите + Create new form.


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

Начните с создания элемента Text View для заголовка и в поле Text в свойствах компонента введите текст: # Question from AI
В этой форме понадобятся следующие поля:
Field |
Type |
Description |
Req? |
Key |
|
Text view |
N |
||
Answer |
Text area |
Y |
|
Поле Text View для вопроса будет отображать значение переменной aiquestion, которая передаётся в эту задачу. Мы также предусмотрели место для добавления документа, который может оказаться полезным.
После того как вы завершите создание формы, нажмите Go to Diagram ->, чтобы вернуться к вашей модели.
Поскольку мы уже связали AI Task Agent с ad-hoc подпроцессом и инструментами, которые он может использовать, на этом шаге больше ничего дополнительно настраивать не нужно.
Опционально: отправка емейл
Если у вас есть аккаунт и ключ SendGrid, вы можете выполнить шаги ниже. Если нет — для этого примера достаточно оставить два элемента в вашем ad-hoc подпроцессе.
1/ Создайте ещё одну задачу в ad-hoc подпроцессе и назовите её «Send an Email».
2/ Измените тип задачи на SendGrid Outbound Connector.
3/ Укажите учётные данные для API-ключа SendGrid, используя ранее описанный формат.
Помните, что в вашей модели такие параметры указываются так:{{secrets.yourSecretHere}}
где yourSecretHere
преставляет название секретного ключа вашего коннектора. В данном случае мы использовали:{{secrets.SendGrid}}
4/ Вам нужно указать причину, по которой AI Task Agent может захотеть использовать этот элемент, в поле Element Documentation. Можно использовать следующий текст:This is a service that lets you send an email to someone.

5/ Для поля Sender “Name” нужно использовать информацию, предоставленную AI Task Agent о человеке, который запросил отправку сообщения. Это делается с помощью следующего выражения:fromAi(toolCall.emailSenderName, "This is the name of the person sending the email")
В нашем случае исходящий адрес электронной почты (Email address) — community@camunda.com, и его также нужно добавить в раздел Sender свойств коннектора. Для своей конфигурации SendGrid вы должны указать собственный адрес электронной почты.

Примечание: не забудьте нажать на значок fx перед вводом ваших выражений.
6/ Для раздела Receiver мы также используем информацию, предоставленную AI Task Agent, о том, кто должен получить сообщение.
Для поля Name можно использовать выражение:fromAi(toolCall.emailReceiveName, "This is the name of the person getting the email")
Для поля Email address нужно убедиться, что AI Task Agent знает адрес электронной почты нужного получателя(ей). Используем выражение:fromAi(toolCall.emailReceiveAddress, "This is the email address of the person you want to send an email to, make very sure that if you use this that the email address is correctly formatted you also should be completely sure that the email is correct. Don't send an email unless you're sure it's going to the right person")
Теперь ваши свойства должны выглядеть примерно так.

7/ Выберите «Simple (no dynamic template)» для свойства Mail contents в разделе Compose email.
8/ В том же разделе для поля Subject мы позволим AI Task Agent определить наилучшую тему письма. Для этого используем выражение:fromAi(toolCall.emailSubject, "Subject of the email to be sent")
Тело письма (Body) также будет формироваться AI Task Agent с помощью следующего выражения:fromAi(toolCall.emailBody, "Body of the email to be sent")
Теперь свойства должны выглядеть примерно так.

Вот и всё. Теперь у вас есть три элемента (инструмента), которые может использовать AI Task Agent, чтобы достичь цели — отправить сообщение от вашего имени.
Разверните и запустите еще раз
Теперь, когда у AI Task Agent появилось больше вариантов, давайте попробуем запустить процесс снова. На этот раз мы попытаемся использовать пользовательскую задачу, чтобы показать, как это может работать.
1/ Разверните обновлённый процесс так же, как вы делали раньше.
2/ Перейдите в Tasklist → Processes, найдите процесс под названием «Message System» и запустите его, нажав синюю кнопку Start Process.

Вам снова будет показана созданная форма, где нужно ввести: кто вы (отправитель сообщения), содержание сообщения, кто должен получить сообщение.
Заполните поля указанными данными.
To whom does this concern?
I want to send this to Reb Brown. But only if he is working today. So, find that out.
What do you want to say?
Can you please stop feeding the hawks chocolate? It is not healthy.
Who are you?
Joyce, assistant to Niall - Owner, Hawk Emporium
Ваша заполненная форма должна выглядеть примерно так, как показано ниже.

Теперь процесс запущен.
4/ Откройте Camunda Operate и найдите свой экземпляр процесса. Он должен выглядеть примерно так, как показано ниже.

5/ Вы можете просмотреть выполнение процесса и увидеть, что произошло, а также значения переменных.
6/ Затем откройте Tasklist и выберите вкладку Tasks — там должна появиться задача «Ask an Expert», в которой вас спросят, работает ли сегодня Reb Brown. Ответьте следующим образом:He is working today, but it’s also his birthday, so it would be nice to let him know the important message with a happy birthday as well.

7/ В Operate вы увидите, что экземпляр процесса сделал петлю и продолжил выполнение с учётом полученной дополнительной информации.

Вы также можете включить опцию Show Execution Count, чтобы увидеть, сколько раз каждый элемент в процессе был выполнен.

Теперь откройте своё приложение Slack — там должно появиться сообщение о том, что AI Task Agent узнал не только то, что Reb Brown сегодня работает, но и то, что у него день рождения.

Поздравляем! Вы успешно выполнили свой первый AI Task Agent и связали с ним возможные задачи и элементы.
Мы рекомендуем добавлять больше инструментов в ваш ad-hoc подпроцесс, чтобы продолжать расширять процесс с AI Task Agent. Удачи и приятной работы!