У киноклуба есть вечный вопрос: «А во сколько собираемся?» Он возникает под афишей, под фотографией пирога и сразу после сообщения «вся информация выше». Кажется, ещё немного — и придётся нанять человека, который будет ходить по городу с огромным будильником. Можно создать ИИ-агента в n8n скромнее: подключить к узлу AI Agent модель и инструмент поиска. Модель разберёт вопрос, решит вызвать инструмент и ответит по найденной записи.
Начнём с одной встречи: meet-01 — «6 октября 18:00». Сделаем две схемы. Первая хранит эту запись, вторая получает вопрос и решает обратиться к первой. В конце проверим известный номер и отсутствующий meet-99. Нас интересует момент, когда дежурный действительно сходил за расписанием. Без него даже правильное время может оказаться удачным совпадением.
Персей из эпиграфа использовал щит как зеркало: от прямого взгляда на горгону человек обращался в камень. Герою пригодился инструмент, с которым можно увидеть происходящее и продолжить действовать. Наш разговорчивый дежурный тоже должен кое-куда заглянуть. По голосу его хоть сейчас избирай председателем киноклуба. Время встречи, однако, лежит в отдельной ячейке расписания.
Что собираем и что понадобится
В n8n схема называется workflow: несколько соединённых узлов передают друг другу данные. Подпроцесс, или subworkflow, — отдельная схема, которую вызывает другая. Представьте окошко справочной: передали номер, получили ответ. В нашем окошке принимают session_id и возвращают время либо отсутствие записи.
Основная схема выглядит так: Manual Trigger → Edit Fields → AI Agent. Снизу к агенту подключены модель Mistral и инструмент Call n8n Workflow Tool. Manual Trigger запускает всё вручную. Edit Fields хранит вопрос. Модель понимает его, а инструмент открывает схему поиска.
У схемы поиска свой путь: When Executed by Another Workflow → If → одна из двух веток Edit Fields. Она сравнит номер с meet-01. Совпало — вернёт время. Не совпало — сообщит, что записи нет. Пока это маленькое расписание из одной строки, которое легко проверить глазами.
Нужны уже доступный n8n и API-ключ Mistral. API — способ одной программы обращаться к другой; здесь n8n отправляет запрос модели. Веб-чат и его подписка такого ключа не заменяют. Если n8n ещё нет, сначала выберите способ его использования; установку в этот проход не включаем.
У Mistral есть Free mode с ограничениями использования и частоты запросов. В платном режиме обращения к API оплачиваются отдельно от n8n. Перед запуском посмотрите режим и лимит своего аккаунта. Ключ понадобится в настройках подключения n8n; в переписку с помощником его вставлять не нужно.
Помощник, которому можно задать вопрос по дороге
В n8n мы собираем агента, а для объяснения непонятного шага можно открыть DeepSeek. Это разные роли. Внешний помощник поможет пройти инструкцию; Mistral внутри схемы будет искать встречу. Если вы уже пользуетесь ChatGPT или Claude, подойдёт и привычный чат.
До создания первого узла отправьте в чат запрос, а следующим сообщением — нужный раздел этой статьи:
Помоги мне собрать ИИ-агента в n8n по этой инструкции.
У меня две схемы: агент и поиск встречи по session_id.
Сначала уточни мою версию n8n, где он открыт и есть ли API-доступ
к Mistral. Ключи и пароли у меня не проси.
Затем веди по одному действию: что открыть, что нажать или вставить,
какой результат должен появиться. Жди моего ответа перед следующим
действием. Если я застряну, разбери описание или текст ошибки без
секретов. Если название настройки зависит от версии, сверь
официальную документацию через поиск; без поиска попроси её фрагмент.
Начнём с входного поля схемы поиска.
Первый полезный результат здесь — узел, у которого есть понятный вход session_id. Это всего лишь имя поля для номера встречи. Английские названия сохраняем, чтобы их можно было найти в n8n. Если помощник ответил сразу длинной инструкцией, попросите оставить одно ближайшее действие.
Схема поиска: одна запись и два исхода
Создайте новый workflow и назовите его lookup_meeting. Через добавление узла найдите Execute Sub-workflow Trigger; среди триггеров он также называется When Executed by Another Workflow. Это входная дверь для вызова из другой схемы. Официальная инструкция описывает этот способ передачи данных.
В узле выберите Input data mode → Define using fields below. Добавьте поле session_id с типом String, то есть строка текста. Не вводите сюда сам вопрос: здесь объявляется, какие сведения принимаются на вход. После настройки должен быть виден один вход с именем session_id.
Следом добавьте узел If. В его условии выберите тип String, слева включите режим Expression и вставьте:
{{ $json.session_id }}
Условие — is equal to, правое значение в режиме Fixed — meet-01. Эта запись означает: возьми входной номер и сравни с известным. Фигурные скобки нужны именно в поле выражения n8n; в терминал их вводить не требуется.
У If два выхода: true и false. К каждому подключите отдельный Edit Fields (Set). В обоих используйте Manual Mapping. В положительной ветке добавьте found типа Boolean со значением true и start типа String со значением 6 октября 18:00. В отрицательной — только found, Boolean, false. Оставьте в выходе только заданные поля: в версиях, где есть Include Other Input Fields, выключите его; если показано Keep Only Set Fields, включите его.
Булево значение — это выбор «да» или «нет». У found проверяйте именно тип Boolean: текстовое слово false и логическое значение false для программы отличаются. У времени тип String, потому что мы возвращаем готовую надпись из расписания, без вычисления дат.
Две ветки заканчиваются своими Edit Fields, соединять их обратно не нужно. Результат последнего сработавшего узла вернётся вызывающей схеме. Сохраните lookup_meeting и нажмите Publish. Для вызова через Database в рабочем запуске подпроцесс должен быть опубликован.
У получившейся справочной пока один занятый ящик: meet-01. В нём лежит «6 октября 18:00». Остальное расписание пустует с размахом целого дворца. Для первой сборки это удобно: мы заранее знаем оба правильных исхода и можем поймать ошибку без раскопок в календаре.
Как создать ИИ-агента в n8n: основная схема
Создайте второй workflow — meeting_agent. Добавьте Manual Trigger, затем Edit Fields (Set). В Edit Fields выберите Manual Mapping, создайте поле chatInput, тип String, и впишите:
Когда встреча с session_id meet-01?
Добавьте AI Agent и соедините его с Edit Fields. В текущем n8n узел работает как Tools Agent; выбирать старые типы агента не нужно. Он требует хотя бы одного инструмента — это указано в документации AI Agent.
В поле Prompt у AI Agent выберите Define below. В Prompt (User Message) переключитесь в Expression и вставьте:
{{ $json.chatInput }}
Так агент прочитает вопрос из предыдущего узла. Поле chatInput — наша записка в окошко: сегодня спрашиваем про meet-01, следующим запуском подадим другой номер. Для новой проверки не придётся перелопачивать устройство справочной.
Через нижний разъём Chat Model добавьте Mistral Cloud Chat Model. В Credential to connect with создайте подключение и внесите собственный ключ в поле API Key, сохраните его. Как получить ключ и задать режим использования, показано в инструкции Mistral Studio. В Model выберите доступную вашему аккаунту модель с поддержкой вызова инструментов. Подойдёт mistral-small-latest, если она есть в списке: Mistral указывает её среди моделей с function calling. n8n загружает список моделей для вашего аккаунта.
Дадим агенту инструмент и правила
Под разъёмом Tool у AI Agent добавьте Call n8n Workflow Tool. Назовите узел lookup_meeting, чтобы его легко узнавать в выполнении. Выберите Source → Database, затем workflow lookup_meeting из списка. Кнопкой Refresh в разделе Workflow Inputs подтяните его входы. Должно появиться поле session_id.
В Description инструмента напишите:
Ищет встречу по точному session_id. Возвращает found=true и start,
если запись есть; found=false, если записи нет.
Используй для вопросов о времени встречи.
У session_id включите Expression и вставьте выражение, с которым модель сама укажет номер:
{{ $fromAI('session_id', 'Точный номер встречи из вопроса пользователя', 'string') }}
Выражение вставляется в поле инструмента. Функция $fromAI поручает модели заполнить параметр: взять номер из вопроса и передать в поиск. Если закрепить здесь meet-01 вручную, дежурный будет открывать знакомый ящик с любым номерком в руках. Можно предъявить ему билет на Марс — он всё равно вынесет шестое октября.
В AI Agent откройте Options → System Message и вставьте:
Ты помогаешь узнать время встречи. Сведения о встречах получай
только через подключённый инструмент lookup_meeting.
Извлеки session_id из вопроса, передай его инструменту без изменений.
Если номера в вопросе нет, попроси его указать.
Если found=true, ответь по полю start. Если found=false, скажи,
что встречи с таким номером нет в расписании. Дату не придумывай.
Если инструмент вернул ошибку, сообщи об ошибке получения данных:
она не означает отсутствие встречи.
Добавьте Max Iterations = 5 и включите Return Intermediate Steps. Первая настройка ограничивает число обращений модели в попытке дать ответ, вторая позволяет увидеть промежуточные действия. Эти параметры Tools Agent пригодятся при проверке. Само число 5 выбрано для нашей короткой задачи.
Два вопроса, которые показывают работу
Сохраните основную схему и нажмите Execute Workflow. После выполнения откройте AI Agent и посмотрите его выход, включая промежуточные шаги. Найдите вызов lookup_meeting, аргумент session_id: meet-01 и результат found: true, start: 6 октября 18:00. Финальная фраза должна передавать эту дату и время. Дословное оформление ответа может отличаться.
Выйдите из узла, поменяйте meet-01 на meet-99 в chatInput и запустите всю схему снова. Теперь инструмент должен получить новый номер и вернуть found: false. Итоговый ответ сообщает об отсутствии записи. Намеренно оставленная пустая ячейка здесь полезнее второй заполненной: на ней видно, сможет ли помощник остановиться.
Представьте, что человек уже обулся, нашёл ключи и держит перед собой пирог для киноклуба. Ему важно выяснить, есть ли такая встреча вообще. Поэтому в ответе на meet-99 нас устраивает короткое «В расписании нет встречи с таким номером». Пустота дошла через всю схему и сохранила свой смысл. Пирог пока можно поставить на стол.
| Что видите | Что это означает | Следующее действие |
|---|---|---|
| Вызов с meet-01 и найденное время | Агент обратился к нужной записи | Проверьте неизвестный номер |
| Вызов с meet-99 и found=false | Проверена пустая ветка расписания | Сверьте, что дата не добавлена в ответ |
| Правильная дата без вызова | По фразе ещё не видно обращения к источнику | Проверьте Tool, инструкцию и Intermediate Steps |
| В обоих вызовах meet-01 | Возможно, передаётся постоянный номер | Проверьте $fromAI у инструмента и новый вопрос в chatInput |
| Ошибка получения данных | Поиск не завершился; наличие встречи неизвестно | Проверьте публикацию и входы подпроцесса |
Если session_id не появился в Workflow Inputs, вернитесь в триггер подпроцесса: объявите поле, сохраните и опубликуйте изменения, затем нажмите Refresh в инструменте. Если агент пишет, что источник недоступен, посмотрите сам результат инструмента. Сообщение Workflow is not active and cannot be executed требует проверки Publish, а не новой формулировки вопроса. Этот случай описан в справке Call n8n Workflow Tool.
При другой ошибке скопируйте её текст без ключей и личных данных своему помощнику. Добавьте, в каком узле она появилась и какой результат был перед ним. Попросите объяснить одно ближайшее исправление. После правки повторите обе проверки, чтобы сохранились оба исхода.
Затем можно проверить, откуда берётся время. В положительной ветке поиска поменяйте 18:00 на 19:00, сохраните и опубликуйте новую версию подпроцесса. Снова спросите про meet-01. Посмотрите, что время изменилось и в результате инструмента, и в финальной фразе. После опыта верните 18:00 и повторно опубликуйте. Так вы проследите путь одной правки от источника до ответа.
А для вопроса «Когда встреча?» без номера ожидается уточнение session_id. Ничего искать пока нечего. Наш дежурный умеет работать с номерком; угадывать, на какой фильм вы собирались, мы ему не поручали.
Частые вопросы
Почему нельзя просто вписать время в инструкцию модели?
Для одной постоянной встречи можно. Но здесь мы учимся отделять вопрос от источника: агент получает данные через инструмент. Позже можно изменить способ поиска внутри lookup_meeting, сохранив для агента тот же вход и результат.
Чем агент отличается от обычной ИИ-цепочки?
У цепочки заранее определена последовательность обработки. Здесь модель по вопросу выбирает обращение к инструменту и заполняет его параметр. Если вам достаточно извлечь задачи из заметки, начните с фиксированной схемы n8n с ИИ.
Нужна ли память, чтобы проверить второй номер?
Нет. Каждый ручной запуск получает полный вопрос с номером встречи. Поэтому проверка meet-99 не зависит от того, что агент помнит о прошлом разговоре. Для этой задачи память добавит лишнюю настройку.
Что сохранить после удачного прохода?
Сохраните обе схемы в n8n и экспортируйте через меню workflow → Download: получите два JSON-файла, то есть текстовых описания узлов и связей. К ним добавьте заметку с обоими проверенными номерами. Перед передачей файлов уберите данные подключения и проверьте, что ключей внутри нет. Этот комплект поможет повторить результат и сравнить следующую версию.
Я пока путаюсь в узлах. С чего начать?
Возьмите готовый пример workflow в n8n, проследите движение данных и поменяйте одно значение. Затем вернитесь к двум схемам: их связь будет понятнее после одного ручного запуска.
Поставьте рядом результаты двух запусков. В первом дежурный принёс время из расписания, во втором вернулся с пустыми руками и так об этом и сказал. Сохраняйте оба вместе с вопросами: по ним удобно проверять следующие изменения. Огромный будильник из начала статьи можно оставить дома. У вашего помощника теперь есть способ узнать время, а у вас — способ убедиться, что он действительно его узнал.