Люди пишут в чат не так, как пишут письма. Вместо одного продуманного сообщения приходит три подряд: «Здравствуйте», «Не пришёл заказ», «Номер 48213». Иногда четвёртое через полминуты: «А, и адрес поменялся».
Для бота поддержки на ИИ-агенте каждое такое сообщение раньше было отдельным запуском. Агент начинал отвечать на «Здравствуйте», параллельно второй запуск искал заказ без номера, третий находил заказ, но не знал про новый адрес. Клиент получал три ответа вперемешку, и ни один не отвечал на всё сразу.
Теперь у ноды «ИИ-агент» есть галочка «Принимать сообщения во время работы». Агент, который уже думает над ответом, дослушивает собеседника: новые сообщения попадают ему в контекст, и он отвечает один раз, с учётом всего сказанного.
Что такое приём сообщений во время работы
«Принимать сообщения во время работы» - это опция ноды «ИИ-агент» в Staqflow, при которой новое сообщение того же собеседника, пришедшее, пока агент формирует ответ, передаётся работающему агенту, а не запускает второй ответ параллельно. Агент видит новое сообщение на следующем шаге, при необходимости заново вызывает инструменты и отвечает на всё одним сообщением. Собеседника агент узнаёт по ключу сессии памяти, поэтому опция работает вместе с подключённой памятью. Запуск, который принёс новое сообщение, ничего не отправляет и выходит через отдельный выход «Передано работающему агенту».
Как это работает
- Приходит первое сообщение. Его запуск доходит до агента и занимает сессию собеседника: агент начинает думать, вызывать инструменты, искать данные.
- Приходит второе сообщение того же собеседника. Его запуск видит, что сессия занята, кладёт сообщение работающему агенту и завершается через выход «Передано работающему агенту». Модель он не вызывает.
- Работающий агент после каждого круга инструментов проверяет, не пришло ли что-то новое. Если пришло, сообщение добавляется в переписку с пометкой, что собеседник дописал его, пока агент работал.
- Перед тем как отдать ответ, агент проверяет ещё раз. Если за время подготовки ответа пришло новое сообщение, модель видит свой черновик и новое сообщение и отвечает заново. Устаревший черновик собеседнику не уходит и в память не сохраняется.
- Когда новых сообщений нет, агент отдаёт ответ и освобождает сессию. Следующее сообщение начнёт новый запуск, как обычно.
Новое сообщение агент учитывает вместе со всем, что уже успел сделать. Если клиент сначала спросил про заказ, а потом написал «нет, про другой, 48217», агент найдёт второй заказ и ответит про него.
Как включить
- Откройте ноду «ИИ-агент» и подключите к ней память, если её ещё нет. Подойдёт встроенная память Staqflow, она не требует отдельной базы.
- В памяти задайте ключ сессии: по нему агент понимает, чья это переписка. Для бота в Telegram это
{{ $json.message.chat.id }}. - Включите галочку «Принимать сообщения во время работы». У агента появится второй выход «Передано работающему агенту».
- Первый выход, как и раньше, ведите к отправке ответа. Второй можно оставить пустым или подключить к нему то, что нужно сделать с переданным сообщением, например записать его в журнал.
Что важно знать
Нужна память. Без неё агенту не по чему отличить одного собеседника от другого, поэтому без подключённой памяти опция не включается и нода подскажет, что подключить.
Разные собеседники не мешают друг другу. Сессия своя у каждого ключа. Пока агент отвечает одному клиенту, сообщения других клиентов запускаются и обрабатываются параллельно, как раньше.
У каждого нового сообщения полный запас. С каждым принятым сообщением у агента снова полный предел шагов и времени. Собеседник, который дописывает пятое уточнение, не упрётся в лимит, потраченный на первые четыре.
Есть потолок. Один запуск принимает до 20 сообщений, это число настраивается в «Параметрах» агента полем «Предел сообщений во время работы». После последнего агент отвечает, а следующие сообщения начинают свои запуски. Это защищает от бесконечного разговора внутри одного запуска.
Картинки тоже доходят. Если собеседник досылает фото, пока агент работает, картинка передаётся агенту вместе с сообщением.
Сбой не теряет сообщения. Если запуск с работающим агентом остановили или он упал, сообщения, которые он не успел прочитать, заберёт следующий запуск той же сессии. Сессия не зависает навсегда: занятость снимается, как только запуск перестаёт выполняться.
Тесты отдельно от боя. Тестовые запуски в редакторе и боевые запуски включённого процесса не делят сессию, даже с одним ключом.
Работает в пределах одного процесса и одного агента. Если один и тот же собеседник пишет в два разных процесса, это две разные сессии.
Где это особенно помогает
Бот поддержки в мессенджере
Самый частый случай. Клиенты пишут короткими сообщениями, досылают номер заказа, скриншот, уточнение. С опцией бот отвечает так, как ответил бы живой оператор, дочитавший всё до конца. Как собрать такого бота с поиском по базе и CRM, разобрано в статье про ноду «ИИ-агент».
Агент, который долго работает
Если агент ходит в несколько систем, ищет в базе знаний и сверяет данные, ответ занимает десятки секунд. За это время собеседник успевает передумать или добавить подробность. Агент учтёт это, не начиная работу с нуля.
Голосовые и сообщения с вложениями
Человек отправляет голосовое, а следом текстом «посмотрите фото» и фото. Если голосовое сначала проходит распознавание речи, текст и фото дойдут до агента как части одного разговора.
Внутренний ассистент сотрудников
В рабочем чате сотрудник просит «найди счёт от Ромашки», а пока агент ищет, добавляет «за сентябрь». Агент сузит поиск, а не выдаст все счета контрагента за год.
Частые вопросы
Получит ли собеседник ответ на каждое сообщение
Нет, и в этом смысл опции: один ответ на все сообщения, пришедшие, пока агент работал. Если сообщение пришло уже после ответа, оно начнёт новый запуск и получит свой ответ.
Что делать со вторым выходом
Ничего обязательного. Запуск, который вышел через «Передано работающему агенту», уже передал сообщение, ответ отправит работающий агент. В выходе есть признак delivered и число сообщений в очереди, их можно записать в журнал или статистику.
Тратятся ли токены модели на переданные сообщения
Запуск, который передал сообщение, модель не вызывает. Работающий агент обрабатывает новое сообщение в своём контексте, это обычный шаг модели.
Можно ли включить это у агента, подключённого инструментом к другому агенту
Нет. Опция рассчитана на разговор с человеком, а агент-инструмент получает задачи от другого агента, поэтому у него этой галочки нет.
Что видно в истории запусков
В выходе агента есть поле receivedMessages: сколько сообщений агент принял во время работы. По нему видно, как часто собеседники дописывают и стоит ли менять предел.
Будут ли сообщения в памяти в правильном порядке
Да. Новые сообщения попадают в переписку в том порядке, в котором пришли, и сохраняются в память вместе с итоговым ответом. Черновик, который агент переписал после нового сообщения, в память не попадает.
Попробуйте
- Откройте Staqflow, соберите бота в Telegram на ноде «ИИ-агент» с памятью и включите «Принимать сообщения во время работы».
- Напишите боту три сообщения подряд, не дожидаясь ответа, и посмотрите, как агент ответит на всё сразу.
- Подключите ИИ-клиента через MCP и попросите его собрать бота поддержки с этой опцией: он сам поставит агента, память и инструменты.
