i
Обучение
Обучение

Как данные движутся по ИИ-воркфлоу

Потоки данных, их преобразование и маршрутизация, воркфлоу как инструмент

Как данные движутся по ИИ-воркфлоу — обложка

Надёжная автоматизация начинается с понимания того, какие данные получает каждый шаг и что передаёт дальше. Разберём, как шаги связаны маппингом, зачем преобразовывать данные и как ветвление, разветвление и объединение задают маршруты. Затем посмотрим, как циклы, пакеты и ожидание управляют выполнением процесса и как готовый воркфлоу становится инструментом агента.

Что движется по схеме

Воркфлоу задаёт порядок выполнения шагов и передачи данных между ними.

Каждый шаг удобно описывать через три части: входные данные, операцию с параметрами и результат. Вход и выход задают контракт шага: какие данные он принимает и что возвращает. Например, шаг получает номер заказа, находит связанного с ним клиента в CRM и возвращает его данные. Следующий шаг использует их, чтобы отправить клиенту письмо.

Структурированные данные между шагами часто передают в формате JSON. Чтобы следующий шаг получил нужное значение, используют переменные и выражения. Например, значение поля customer.email из результата поиска подставляют в поле получателя письма. Такое сопоставление источника данных и поля назначения называют маппингом данных. Источником может быть результат предыдущего шага или другого уже выполненного шага.

Два шага и данные между ними
📥
Вход
номер заказа в JSON: { "ID": 10482 }
🔎
Операция
найти клиента в CRM по номеру заказа
📦
Результат
объект клиента в JSON с полем customer.email
маппинг
✉️
Следующий шаг
отправить письмо, получатель — {{ customer.email }}
Результат одного шага становится входом следующего
Поиск клиента и отправка письма — отдельные операции. Маппинг передаёт нужные значения между шагами
Поля следующего шага
Поле письмаЗначение
📧 Получатель {{ customer.email }} — адрес подставляется из результата поиска
🏷️ Тема «Заказ собран»
✍️ Текст «Здравствуйте! …»
Получатель пришёл из предыдущего шага через маппинг. Про каждое поле можно спросить, откуда взялось его значение

Откуда взялось значение

Именно на маппинге часто возникают ошибки.

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

Каждый блок работает — а данные не те
🏷️ Не то поле в получателе "Анна" — имя вместо почты
👤 Не тот объект в получателе "менеджер@почта.рф" — почта, но не клиента
🧺 Не тот тип в получателе [ "анна@почта.рф" ] — адрес верный, но это массив вместо строки
Главный вопрос отладки:
откуда на этом шаге взялось каждое значение?
Проверьте источник данных, выбранное поле и тип значения

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

Данные приходят не в том виде

Верное решение ИИ-агента может не привести к действию, если следующий шаг получает данные в неподходящем формате.

Разные сервисы часто ожидают данные в разных форматах. Дата может прийти строкой в формате ДД/ММ/ГГ, а следующему сервису нужен формат ГГГГ-ММ-ДД. Телефон может содержать пробелы и местный префикс, а сумма — пробелы, запятую и знак рубля. Перед преобразованием важно знать исходный формат, страну номера и валюту: недостающие сведения нельзя просто угадывать.

Одно значение — две формы
ПолеПришлоНужно следующему шагу
📅 Дата «03/07/24» — ДД/ММ/ГГ 2024-07-03 — ГГГГ-ММ-ДД
📞 Телефон «8 916 123 45 67» +79161234567 — для российского номера
💰 Сумма «12 000,00 ₽» 12000.00 — число вместо строки
При известном исходном формате меняется представление, а смысл значения сохраняется

Значительная часть воркфлоу — это преобразование данных: поля переименовывают, меняют типы значений, приводят даты к единому формату, очищают текст и удаляют лишние поля. Иногда массив разделяют на отдельные записи, а иногда, наоборот, собирают записи в общий массив или сводный объект. Сюда же относятся фильтрация, сортировка, удаление дубликатов и агрегация — например, расчёт суммы заказов или группировка клиентов по сегментам.

Три группы преобразований
🧹 поля и значения Привести в порядок Переименовать поля, изменить типы, нормализовать даты, очистить текст, удалить лишнее Цель — ожидаемый формат каждого значения
✂️ форма набора Разделить или собрать Массив — на отдельные записи; записи — в общий массив или сводный объект Цель — нужная структура для следующей операции
📊 состав и порядок Отобрать, упорядочить, свести Фильтрация, сортировка, удаление дубликатов, агрегация Цель — нужные записи или сводка: сумма заказов, группировка клиентов по сегментам
Операции разные, а задача одна: следующий шаг получает данные в том виде, который он ожидает

Ошибки преобразования могут остановить весь процесс. Допустим, агент верно решил, что платёж нужно остановить, а инструмент ожидает сумму числом. Если он получает строку в неожиданном формате, вызов может завершиться ошибкой. Поэтому преобразование и проверка данных — основа надёжной автоматизации. Правильный формат позволяет выполнить вызов, а результат операции нужно проверить отдельно.

Решение верное, формат — нет
Без преобразования
🤖 Решение: остановить платёж 💬 Сумма строкой: «12 000,00 ₽» ⛔ Шаг не выполнен
Верное решение не привело к действию
С преобразованием
🤖 Решение: остановить платёж 🔢 Сумма числом: 12000.00 ✅ Проверка формата пройдена
Можно выполнить вызов и проверить результат
Формат данных влияет на выполнение вызова. Результат операции проверяют отдельно

Маршрутизация данных

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

Маршрутизация определяет, куда данные пойдут дальше. Один из вариантов — ветвление по условию: если критерий выполнен, данные идут по одной ветке, если нет — по другой. Когда нужен выбор из нескольких маршрутов, задают правила, по которым система выбирает подходящий. В некоторых настройках условная маршрутизация допускает несколько совпавших веток; здесь рассматриваем вариант с выбором одной.

Другой вариант — разветвление: один результат передают в несколько веток. Например, после обработки заказа нужно обновить CRM, создать задачу на доставку и отправить уведомление клиенту. Здесь должны выполниться все три действия, а порядок их запуска зависит от среды исполнения.

Выбрать одну ветку или запустить все
🔀 Ветвление · выбирает маршрут

Условие: критерий выполнен — одна ветка, не выполнен — другая.

В этом варианте выбирается одна подходящая ветка. Остальные не запускаются.

📣 Разветвление · запускает все

Выбора нет: результат уходит сразу в несколько направлений.

Заказ обработан — обновить CRM, создать задачу для доставки, уведомить клиента.

На схеме оба случая — несколько стрелок из одного блока. Различает их число веток, которые запустятся

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

Заказ обработан → три ветки → итог
🗂️ Обновить CRM ветка обновляет запись клиента
🚚 Создать доставку ветка создаёт задачу на доставку
🔔 Уведомить клиента ветка отправляет уведомление
Объединение: результаты трёх веток → общий итог по заказу
Ветки делают каждая свою часть работы, а объединение снова сводит их результаты в одну линию процесса

Ветвление выбирает маршрут, разветвление запускает несколько направлений, а объединение собирает их результаты. Независимые ветки на схеме не обязательно выполняются одновременно. Порядок и возможность параллельного выполнения зависят от среды исполнения, зависимостей между шагами и настроек процесса.

Тысяча клиентов и один договор

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

Что делать, если нужно обработать тысячу клиентов, дождаться человека и потом продолжить процесс?

Цикл позволяет повторять действие или последовательность шагов для каждого объекта либо до выполнения условия. Например, нужно обработать тысячу клиентов. Чтобы управлять нагрузкой, данные делят на пакеты — допустим, по сто записей. Размер пакета выбирают с учётом ограничений сервиса; он не задаёт число одновременных запросов. Скорость вызовов, параллельность и паузы между пакетами настраивают отдельно.

Тысяча клиентов: сразу или пакетами
Все запросы сразу
👥 1000 клиентов 🌊 1000 запросов сразу ⛔ Ограничения, перегрузка сервиса
Есть риск превысить лимиты или перегрузить сервис
Цикл пакетами
👥 1000 клиентов 📦 По 100 за раз 🔁 Десять проходов цикла
В обработке — один пакет; скорость и параллельность задают отдельно
Размер пакета задаёт объём данных за один проход. Он не равен числу одновременных запросов

Другой сценарий — ожидание ответа человека. Система отправляет договор на согласование, сохраняет состояние и приостанавливает выполнение. Когда приходит ответ, процесс продолжается с нужного места. Стоит также определить, сколько ждать и что делать, если ответа нет. Как среда исполнения поддерживает такую паузу, мы разбирали в статье о платформе.

Четыре приёма управления воркфлоу
🔁 много объектов Цикл Повторяет действие или последовательность шагов Одно действие — для каждого из тысячи клиентов
📦 нагрузка Пакеты Тысячу клиентов делят на части и обрабатывают по сто за раз Управлять объёмом обработки вместе с ограничением скорости
⏳ ответ человека Ожида­ние Договор ушёл на согласование: состояние сохранено, процесс ждёт человека Продолжить с нужного места
🧩 сборка из частей Подпро­цесс Проверку клиента выносят в отдельный небольшой процесс Одна проверка — для продаж, финансов и поддержки
Цикл и пакеты справляются с объёмом, ожидание — с паузой, подпроцесс — с повторяющимися частями: у каждого приёма своя задача

Процесс как навык агента

Повторяющиеся части большого процесса удобно выносить в отдельные подпроцессы.

Подпроцесс создают один раз и вызывают там, где он нужен. Например, одну и ту же проверку клиента можно использовать в продажах, финансах и поддержке. Для неё определяют входные данные, параметры и ожидаемый результат — так другие процессы знают, как её запускать.

Если такой подпроцесс доступен агенту через описание инструмента, получается воркфлоу как инструмент. Модель выбирает вызов и формирует аргументы, а среда исполнения проверяет их, запускает воркфлоу и возвращает результат. Так проверка клиента или другой готовый процесс становится одной из возможностей агента — его навыком. Сложную систему можно собрать из повторно используемых компонентов.

От подпроцесса к навыку агента
🧩
1
Подпроцесс
проверка клиента создана один раз
♻️
2
Переисполь­зование
продажи, финансы и поддержка
🤖
3
Инструмент агента
бизнес-процесс становится навыком
Один подпроцесс используют в разных отделах и предоставляют агенту как инструмент

Что важно запомнить

🔗

Шаги связывает маппинг
Переменные и выражения выбирают значения из результатов уже выполненных шагов и подставляют их в параметры следующих операций. Например, customer.email становится получателем письма.

🔎

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

🧹

Преобразование — основа надёжности
Даты, телефоны и суммы нужно приводить к формату, который ожидает следующий шаг. Исходный формат и смысл данных должны быть известны; после преобразования результат проверяют.

🔀

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

⏸️

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

🤖

Воркфлоу как инструмент
Подпроцесс можно использовать в разных отделах и предоставить агенту как инструмент. Модель выбирает вызов, среда исполнения запускает процесс и возвращает результат.

🧵
Каждый блок может работать правильно.
Ошибка может возникнуть в передаче данных.

Читайте также

Всё обучение
Как понять, что ИИ-агент действительно стал лучше Инженерия обвязки: что делает ИИ-агента управляемым и надёжным Инженерия контекста: как научить ИИ-агента понимать ситуацию Почему идеальный промт не спасает плохого агента ИИ-операции и инструменты: как решение модели становится действием Архитектура ИИ-агента: от LLM-функции до графа навыков ИИ-платформа: как собрать агентов в единую систему Где процессу нужен ИИ-агент, а где хватит правила Что нужно, чтобы ИИ-автоматизация реально заработала Как превратить человеческое мышление в работающего ИИ-агента AI-First компания: какая работа остаётся человеку в мире ИИ-агентов Как перестроить процесс под ИИ-агентов и не потерять контроль Как найти точки автоматизации с максимальной отдачей Как увидеть бизнес-процесс таким, какой он есть на самом деле Как провести рентген бизнеса и извлечь знания экспертов Как выбрать правильный процесс для автоматизации От механизации до ИИ-агентов: как эволюционировала автоматизация Бизнес как система процессов: как потоки данных создают ценность AI-First-компания: новые роли и новая оргструктура AgentOps: шесть шагов от идеи до работающего ИИ-агента ИИ-стратегия: три уровня внедрения ИИ-агентов в бизнес Готова ли ваша компания к ИИ-трансформации? Три трансформации, которые полностью изменили бизнес Где ИИ-агенты создают бизнесу максимум ценности Пять уровней эволюции ИИ-агентов Кто такой ИИ-агент и почему он меняет устройство компании Что такое AI-First-компания и как она работает

Дальше — практика

Материал основан на третьей лекции курса по автоматизации бизнес-процессов с ИИ-агентами.

В следующей статье — инженерия промтов: почему хороший промт — следствие спецификации агента, из чего он состоит, зачем автоматизации структурированный вывод и как промты генерируют и отбирают на тестах вместо подбора на глаз.

От диагностики бизнеса
— до работающего агента.

Пройти курс