📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Проблемы масштабирования N8N для AI-агентов + как я сделал SaaS-платформу | Полный обзор

Timur Yessenov28:36

Transcription

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

Поэтому, если ты постоянно занимаешься тем, что собираешь в N8N ботов и агентов, ассистентов, консультантов и продаёшь это своим клиентам, либо делаешь это для себя, досмотри это видео до конца, и тебе будет интересно. А если ты ещё не подписался на мой канал, обязательно подписывайся. У меня впереди много видео. На моём канале есть видео по разработке с AI, всё вокруг AI-агентов, ассистентов, разработки своих собственных приложений без знаний и навыков программирования с использованием современных AI-агентов для написания кода. А теперь начнём.

Какое-то время назад я и мой товарищ мы решили создать платформу, которая позволяет создавать очень быстро, легко, без знания кода агентов-консультантов, которые можно было бы напрямую подключить к мессенджеру. И мы столкнулись с тем, что создавать под каждого клиента workflow, несмотря на то, что кажется иллюзорно, что ты можешь просто скопировать, настроить другие креншеалы и запустить это для другого человека, она разбивается в щепки, когда твой заказчик говорит: "А я хочу ещё вот так, хочу, чтобы у меня было по-другому, немножко другая логика". И всё ломается, начинаешь копаться в этих workflow.

А второй момент, что зачастую заказчики хотят внести изменения дополнительные, и, а-а, нужно будет постоянно перекраивать эти workflow. И в какой-то момент каждый workflow одного заказчика, другого, третьего, пятого, десятого, они будут очень сильно отличаться. То есть, и если ты хочешь обновить модель и внести какие-то изменения, то тебе придётся оркестрировать большим количеством workflow, и они просто уже разъедутся, да, что называется, у них будут разные подходы, паттерны. Лично меня это беспокоило, потому что я привык, а, обновлять модели для того, чтобы это было быстрее, дешевле, и лазить в бесконечном количестве в workflow мне вообще очень сильно не хотелось.

А второй очень важный момент, очень много наших заказчиков хотели интеграции с популярными сервисами, такими как Google календарь, AmoCRM, Bitrix и, а, другие интеграции. Это могли быть какие-то другие сервисные системы, какие-то другие сервисы, которые нужно было подключать в качестве инструмента к агенту, который мы для них пилили. И это тоже проблематично. Если всё крутится на твоём сервере на N8N, то тебе нужно давать доступ, чтобы авторизовывать календарь через Google OAuth или а другие какие-то сервисы. И периодически этот токен может слетать, нужно постоянно давать доступ. В общем, либо брать доступ к тому же Гуглу у заказчика, что ещё гораздо более проблематично, да, и в целом небезопасно, и я против такого.

Потом мы решили сделать платформу, где каждый пользователь мог зарегистрироваться и сам создать своих собственных агентов, подключить их к WhatsApp. И мы поступили следующим образом. Мы, а, создали полностью frontend, написали его на, с использованием NextJS, а Backend мы оставили. И у нас была связка N8N, SuperBASE и свой собственный самописный frontend, где можно было создать агента, закинуть документы в базу знаний, запросить пополнение баланса платёжной системы. На тот момент у нас не было никакой подключено. И в общем-то мы тоже столкнулись с тем, что, а, поскольку у нас был доступ к workflow, кстати, вот он здесь вот в этот workflow изображён, под каждую модель, под каждый тариф, под каждый, под каждую индивидуальную настройку нужно было сделать ветки. И вот посмотреть, во что это превратилось. Где-то RAG используется, где-то не используется, где-то пришлось свои собственные написать для Google календаря для того, чтобы авторизовывать это на платформе, на фронтенде и дать доступ к этому календарю авторизованному агенту. И там всё тоже пошло не очень хорошо. Худо-бедно это всё работало. Вот здесь вот куча запросов в SuperBASE. Но в конечном итоге всё равно клиенты нас победили в том смысле, что они говорят: "Мы хотим такую интеграцию, мы хотим другую интеграцию". И как итог вот такой вот ужасный, на мой взгляд, вот просто даже выглядит несуразно. Такой вот workflow, где вот так вот всё перемешано, но всё равно не было ни гибкости, ни скорости.

Но самое главное, что выходило очень много ошибок, потому что, а, frontend, который у нас был, там очень много разных edge-кейсов могли произойти. Что если документ удаляется? А если он обратно из архива достаётся? Что, если нужна обработка изображений, нужна обработка звука? Я не хочу сказать, что это всё невозможно было здесь сделать. Это всё было возможно сделать, просто в какой-то момент уже страшно что-то менять, потому что где-то ты в одном месте поменяешь, там другое сломается. И в конечном итоге я принял решение, что надо бы это всё полностью переписать с нуля, отказаться полностью от N8N и перейти на нативные библиотеки клиентов. Мы используем три поставщика: Inflection, это OpenAI, это Anthropic и это OpenRouter. И, а, было принято решение использовать их родные библиотеки, их родные API, полностью переписать с нуля весь frontend и полностью вообще абсолютно вот всю систему построить без N8N для того, чтобы можно было с высокой абстракцией, не копаясь во всех возможных кейсах. А что, если вот здесь вот, ээ, что-то он не так напишет? А если нужно какой-то другой тул, мне нужно его сюда подключать. Если он нужен одному клиенту из 100. А как мне это всё зароутить? То есть представляете себе, что если у вас есть определённые тарифы или планы на платформе, где есть доступ к тем или иным функциям, вы их все должны дублировать. А если у вас что-то обновляется, обновляются модели, вам нужно большое количество workflow менеджеррить. Это возможно, но я просто вообще не хотел с этим возиться. Я реально здесь упёрся в те вот ограничения, которые ей даёт N8N.

А самое главное из этого всего, из всего, что я перечислил, ну, это как-то можно ещё решать. Самое главное, что этот инструмент, он не сильно-то и располагает к тому, чтобы большое количество, а, пользователей взаимодействовали через frontend с N8N. То есть мультиклиент или мультиагент вариант, когда ты должен подключать интерактивно свои интеграции, э, здесь не очень удобно реализовать. И я принял решение полностью перепилить всё. Вот здесь ещё до сих пор в разработке находится лендинг. Пока что это просто скелет для сайта без практически без дизайна. Но платформу я а переделал. Сейчас уже идут финальные а тесты, уже есть у нас платящие клиенты. И я, наверное, сейчас покажу и по сравню с N8N и покажу вот тот функционал, который есть на платформе.

Вот у меня очень простой дашборд, где я могу выбирать, редактировать или создавать, а новых агентов. И вот можно прямо сразу начать. Например, вот возьму календарного агента. Что здесь у меня есть? Во-первых, я могу вбить сразу приветственное сообщение, которое пойдёт без и то есть оно сразу отправится. Например, если команда в телеграме "старт", оно отправляется. А я могу подключать каналы. Сейчас, на данный момент на платформе поддерживается WhatsApp и Telegram. Скоро будет Instagram, веб-виджеты и другие каналы. К этому я ещё вернусь, как бы я подключал новые каналы в N8N. То есть понятно, как бы я это делал, разработчик, но как мне дать пользователю возможность завести новый Telegram-бот, подключить его, выбрать его везде? Непонятно. Ну, опять же, возможно, но это очень сложная история, и она прям очень неинтуитивная. Здесь же я даю возможность подключать, а, своим пользователям самостоятельно свои каналы, как и в любом другом сервисе.

Я очень сильно прокачал возможность генерации качественных промптов. Даже можно взять и протестировать. Это по сути промпт для личного ассистента, который заглядывает в календарь, там редактирует встречи, какие-то назначает встречи, удаляет, редактирует. И я здесь прописал очень много итераций, делал, чтобы это был адаптивный генератор промпта в зависимости от сложности. А он генерирует хороший такой вот добротный systemprompt. Вот, допустим, я применю его. Вот. Ну, а также я могу дать пользователю возможность удобно редактировать промты. Я помогаю пользователю создать качественный системный промт.

Дальше модель недоступна на моём тарифе, так как у меня тут, а тариф минимальный, не все модели у меня здесь доступны. Доступны. Вообще на платформе доступны разные модели, но в рамках своего тарифа я могу выбрать Grok. Grok 4, допустим, очень хорошая модель. А редактируется температура. Могу выставить температуру, допустим, 20% - это 0,2 температура. Дальше к этому я вернусь. Что ещё хочу показать? Да, всё это можно тоже здесь делать. Можно записывать в базу данных все эти настройки, тоже их замапить в агента, но в этом ключе не вижу существенных ограничений на стороне N8N.

База знаний, а она у меня здесь изначально реализована как тул, как инструмент для агента. То есть нету такого, что RAG идёт постоянно и тянет чанки. Агент сам принимает решение, когда нужно туда пойти. И для этого можно прописать промт. То есть можно назвать, дать название этому инструменту, например, "база знаний" и описать инструкцию, когда нужно ему туда идти. И у каждого пользователя есть свой собственный пром. Я могу её включить, например, я могу включить, а документы. И у меня уже здесь есть какие-то загруженные документы. Я могу включить, а заметки и таблицы.

Как вообще это всё реализовано? Если я нажму "настроить", я попадаю в документы и вижу, что у меня вот здесь уже загруженный документ. Я могу очень легко загрузить новый файл, он, а, заимбедится и попадёт сюда. И получается, что на каждого агента я могу выбрать абсолютно любой документ, который у меня здесь есть. Точнее, не документ, а группу документов. Если я здесь посмотрю базу знаний, а, например, "мегаоптика", то я могу сюда ещё навалить документов. Я могу сделать фрагменты изданий. То есть это такая простая штука, где я могу просто сам вот что-то написать, какие-то вопрос-ответ, быстро их добавить, и вот они проимбедятся. Это фрагменты знаний, да, которые я сам а могу здесь прямо напечатать на сайте. Это очень быстрый такой способ добавлять какие-то, докидывать знания. Вот. И, соответственно, вот эти фрагменты знаний я тоже могу выбрать из своих своих тут называемых, у меня есть "пространство", "новое пространство". Если я его создаю, оно может состоять из документов, фрагментов и Excel или CSV таблиц.

Вот как мне это сделать в N8N? Можно тоже очень будет сложно связать это всё, но возможно будет тяжеловато именно в части того, чтобы это всё имбедилось на каждого пользователя, сохранялось, но в целом можно подвязать к фронтенду. Здесь у меня это довольно быстро и легко получилось сделать.

Что ещё? Ну, естественно, Google календарь. То есть я могу просто нажать а-а, сейчас я выберу другого агента, в котором не подключен календарь. "Подключить календарь". А, выбрать свой аккаунт, "продолжить", "предоставить доступ". И вот подтягивается мой календарь, и всё, как обычно. Угу. >> Настраивается. А не захотел. Всё, отключил, токен из базы данных удалился. Доступа у этого агента к календарю его больше нет.

Также у меня тут есть, а, оптимизация диалога. Это очень большой и при этом достаточно важный раздел. Здесь мы можем залимитировать, а, токены для включения в контекст. То есть это история чата. Вот сколько токенов я могу включать в историю чата. А не совсем привычный способ, да, оптимизировать историю чата. Гораздо более привычно это по количеству сообщений. Допустим, последние 10 сообщений или последние 20, или последние 100 сообщений я могу сюда включить. И таким образом я буду экономить токены, потому что только последние 10 сообщений будут попадать в историю диалога. То есть агент будет помнить там последнее что-то, но где-то в глубину он уже не пойдёт. Также я могу ограничить и по времени эту историю. Например, я могу хранить её только одни сутки, и через сутки я её удаляю. Это полезно для тех агентов, которые используются как агенты первой линии, консультанты. Они там в течение дня что-то может человек общаться, агент будет что-то помнить, а потом уже всё это удаляется, чтобы не загрязнять нам базу и контекст.

Также у меня здесь есть функция, называется "делить ответы по абзацам". Делить ответы по абзацам. Это такой имитатор того, как отвечает человек. А вот если я нажму, то там, где агент делает двойной перенос строки, это сообщение будет докидываться отдельно. И вот здесь вот даже есть пауза, то есть сколько секунд между этими отдельными сообщениями выставить. И даже если здесь написано у меня 5 секунд, я всё равно беру какое-то рандомное значение. Где-то через 4, где-то через 6,5 секунд. То есть оно постоянно чуть-чуть дрифтует по времени. Это специально сделал для того, чтобы он как через как пулемёт не стрелял, хоть ровно через каждые 5 секунд.

Можно ли это сделать в N8N? Я думаю, что тоже можно постараться. В принципе, тоже реализуемо ставить на паузу, если я отвечаю с телефона. А бывает такое, что я, допустим, подключаю WhatsApp, сюда пишешь и что-то как владелец бизнеса отвечаешь, система это понимает и ставит агента сразу же на, а, паузу, и я могу сам пообщаться. А, но я могу также сделать и автовозобновление через 30 минут. То есть я, допустим, могу выставить автовозобновление и через 30 минут после того, как я сам пообщался, агент снимается с паузы. И если собеседник это пишет ещё раз, агент его а подцепит.

И есть ещё фоллоуапы. Фоллоуапы - это такая штука, где можно написать промпт для AI-шки, и через количество дней, часов или минут этот промпт пойдёт в AI-шку, она подтянет историю диалога и сформирует follow-сообщений. Их тут можно добавлять до пяти штук. И, а, вот здесь перевода у меня ещё нет, так как у меня двуязычная платформа. А, к сожалению, перевод здесь я забыл сделать, но ладно. Благодаря этому видео я нашёл этот баг. А что ещё у нас есть?

Можно ли это реализовать? Да, тоже можно, но это уже сложнее. То есть это нужно будет через, нужно будет постоянно запускать крон по базе и искать, как, как и когда, кому что отправить. Уже сложнее, но в принципе терпимо. А, ну и буфер сообщений, соответственно, это стандартный буфер, где до 1 минуты можно вообще ничего не отвечать, накапливать все сообщения в одну такую большую строку и за раз это всё отправить в AI для того, чтобы сформировать только один ответ на множество коротких сообщений.

Также у меня есть здесь график доступности. Это тоже в N8N можно реализовать. Какие дни, в какие часы агент отвечает, когда он просто молчит, вообще игнорирует полностью. А передача оператору по какому-то стоп-слову. Если это произошло, агент встаёт на паузу и ничего не делает. И, соответственно, распознавание голоса. Голосовой ответ. Я ещё не решил, нужно, нужно ли это, а скорее всего это не нужно. Распознавание речи тоже всё довольно легко реализуется в N8N. Не вижу здесь особых таких проблем, да. Вот здесь аудио транскрипция и работает всё, что я сейчас сказал. Субъективно, я говорил, что да, где-то сложнее, но можно.

И вот если собрать всё-всё-всё вот это, где-то сложнее, где-то трудно, но можно, это уже очень большой объём работы на очень низком, а, уровне абстракции, чтобы это всё сделать в N8N, не используя родные библиотеки. Например, я здесь для того, чтобы работать с моделями, просто установил OpenAI, Anthropic и OpenRouter. Я, по-моему, ничего не устанавливал, потому что он на OpenAI схеме работает. И всё. Всё, что я мне нужно, я просто подаю температуру и промпт. И это очень, а, и модель, и это очень удобно. То есть я вообще не ковыряюсь. Для календаря я просто подключил библиотеку Гугла, настроил её и всё работает. Всё записывается в базу, всё хранится, токен автоматически обновляется и не соскакивает. Даже сам факт того, что пользователь сам может подключить свои календари, я не знаю, его токены, всё хранится в зашифрованной базе, это уже гораздо более безопасно.

И, наверное, самый важный момент, который хочу показать - это создание своих собственных агентов и веб-хуков. Я могу создать новый инструмент, пусть это будет, например, webhook. А, дать ему какое-нибудь название и выбрать один из вариантов. То есть я могу сделать просто отправку вебхука по какому-то событию на платформе, например, при создании нового диалога. А, например, и давайте я покажу, как это работает. Создаю в N8N новый webhook. Метод выберу POST, скопирую тестовый URL, запущу на прослушку и здесь тоже выберу метод POST, вставлю этот URL и сделаю тестовый запрос. Всё, я его сделал. Workflow started. И вот я получил N8N событие. Это позволяет мне не делать миллиард интеграций на этой платформе со всем подряд. Я могу спокойно любое событие выкидывать в N8N. И здесь у меня будет очень маленький, аккуратный workflow, допустим, создать новую сделку в CRM-системе или ещё что-то. Абсолютно вот любой вариант интеграции, который мне нужен, мне гораздо легче сделать здесь. И здесь я уже ничем не ограничен, потому что тут нужны только маленькие, маленькие workflow для каких-то кастомных интеграций.

С вебхуком понятно, что есть ряд событий, по которым я могу их отправлять. Также я могу формировать какой-то payload. Конечно же, я могу сделать, допустим, name, а-а, выбрать тип, заполняет агент, либо системное поле. Если я выберу статическое значение, я сам вбиваю. А если я хочу, чтобы система отправила, то я могу ID диалога, канал, ID пользователя, статус, метаданные, ID агента, в общем, много чего могу отправлять в N8N. Таким образом, я а могу очень точно знать, что это за пользователь. А если мне нужно какие-то записи в базу сделать, я могу это сделать. А с N8N это параметры, то есть это то, что вот к ссылке подставляется, это payload, который уже вот сюда пойдёт. Здесь всё точно то же самое. То есть я довольно гибко здесь и динамично могу формировать, а любые а запросы, связанные с вебхуками.

Но это не самое, наверное, основное. Самое основное, что я могу в режиме webhook сделать не автоматизацию, где вот система, да, моя будет сама отправлять а вебхуки, а я могу сделать инструмент, я могу сделать tool и назвать его, например, "Symbol" и сделать ему описание. Вот, допустим, такое будет название. И я здесь делаю метод POST, забиваю ссылку. И в payload добавляю, например, name, а, тип строка, заполняет агент, имя человека и агенту даю описание и говорю: "Это обязательное поле или нет". И таким образом я могу формировать, а, допустим, номер телефона. И этот инструмент агент сможет вызвать точно так же, как в N8N. Агент вызывает любые другие инструменты. Но я динамично создаю эти инструменты, а, с без каких-либо ограничений. У какого-то агента я могу какой-то инструмент включить, создать, выключить, а, в зависимости от того, как на каком канале у меня работает агент. То есть таким образом я решил вопрос а бесчисленное количество интеграции.

Могу ли я дать возможность, используя N8N, пользователям самостоятельно создавать любые интеграции и любые инструменты для агента? Скорее всего, нет, потому что это будет уже что-то запредельно сложное. Это какой-то динамичный MCP или делать какой-то свой собственный сервис, к которому будет каждый агент подключаться. Это вот как раз-таки очень серьёзное ограничение, с которым я столкнулся. Но я решил, а что, если я сделаю не просто инструмент для агента в виде какого-то, а, запроса POST или GET, а что, если я сделаю возможность создавать субагента, которого можно вызвать как инструмент? И вот здесь у меня есть такая возможность. То есть тип инструмента webhook - это то, что я показал. А субагент - это у него тоже есть описание, у него тоже есть режим работы агент, но субагент - это вообще отдельное. И я могу выбрать субагента, выбрать модели, которые доступны у меня, сделать лимит токенов, написать системный промпт. У меня вот здесь есть тоже полноценный редактор, и я ему могу создавать вот такие вот тулы. То есть я сделал здесь на уровне интерфейса вот эту трёхуровневую систему, когда основного агента я могу превратить в оркестратора. У каждого из субагентов будут уже свои инструменты. У кого-то, кто-то работает по CRM, кто-то работает по календарю, а кто-то работает по каким-то интеграциям в базу данных, в 1С или ещё куда-то. И всё это я могу очень легко настроить в таком инструменте, как N8N. То есть я всё ещё понимаю ценность, но я отвёл ему ту самую роль, где он работать будет лучше всего именно для меня, для моих задач.

И вот таким образом я решил отказаться от N8N как от основного инструмента и дать возможность пользователям своим самостоятельно создавать агентов. Я им помогаю на всех этапах и даю всё-таки возможность, если они захотят, использовать N8N для каких-то кастомных тулов, каких-то кастомных интеграций. А помимо этого, у меня здесь есть полноценный плейграунд для агентов. Я могу читать диалоги, которые у меня здесь есть, и писать и отвечать в них.

И каналы, наверное, каналы - это последнее, о чём я хочу рассказать. Чтобы это не выглядело откровенно рекламой, я просто покажу вот ограничение N8N, которое есть. Я могу прямо отсюда подключить свой собственный канал в WhatsApp, выбрать какого-то агента и нажать "подключить WhatsApp". Прямо здесь у меня выйдет QR-код, я его отсканирую, и агент сразу же работает у меня в в Ватсаппе. Или таким же образом я могу подключить Telegram и точно также выбрать агента, забить ему, а бот-токен. Вот у меня уже здесь подключен агент. Забить ему бот-токен, и сразу же он у меня заработает. Могу его, а отключить, соответственно. И я здесь уже вижу, какие у меня каналы работают. Вот. И вот этой функцией довольно сложно добиться. В WhatsApp ещё как-то можно. С телеграмом сложнее, потому что это уже встроенный credential, и его нужно будет создавать через credential, через N8N Credential App. И это сложновато. Откровенно сложновато. Просто хотя бы потому, что у N8N у N8N нету метода, который вытащит, а все credentials и их схемы, и там придётся играть в какую-то угадайку, как это всё сделать.

Ну и аналитика, её, кстати, в N8N реализовать очень легко. Даже вот такое HTML-окно можно тоже легко выгрузить из N8N. Самое основное, наверное, - это вот база знаний, это возможность динамично создавать, редактировать инструменты. Это подключать полноценно любые сервисы, которые требуют OAuth-интеграции. Например, а здесь я всё равно планирую сделать интеграцию с AmoCRM и Bitrix полноценную. И здесь пользователь легко также через OAuth сможет подключать, так же вот как и а Google календарь, который у меня уже здесь а доступен. Вот таким вот образом я решил проблему узкого горлышка, которое даёт N8N.

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

Если ты хочешь научиться создавать вот такие платформы, даже если ты не разработчик, не программист, не умеешь писать и читать код, посмотри по ссылке ниже информацию о нашем закрытом клубе, о нашем сообществе AI Vibe Club. И мы в клубе вместе развиваемся, учимся, как можно разрабатывать, даже если ты не программист, используя разные университеты, используя большие языковые модели, а используя редакторы кода для непрограммистов. У нас очень много классных ребят в клубе, абсолютно из разных ниш, из продаж, из маркетинга, из консалтинга. Есть технари, есть не технари. Но мы все вместе развиваемся и учимся создавать классные продукты. При этом мы не затрачиваем большое количество времени и денег на разработку. Также, а, изучаем N8N, изучаем, изучаем AI-driven Development. Если будет интересно и ты решишь присоединиться в наше сообщество, я тебе буду очень рад. И ещё мы каждую неделю проводим живые зумы, живые разборы, где вместе помогаем друг другу, отвечаем на вопросы и делимся своим опытом. У нас очень классное, крутое комьюнити, очень клёвые ребята, поэтому welcome.

Если видео было интересное, ставь лайк, подписывайся на канал, прожимай колокольчик, чтобы не пропускать уведомления о новых видео. Увидимся в следующем видео. Пока.