Привет. Я тут в своей мастерской опять ковырял n8n и собрал нормальную связку, где ассистент не тупит на втором сообщении и не делает вид, что вы только что познакомились. Если коротко: для памяти в n8n тебе нужна не «волшебная галочка», а правильная сцепка из Chat Trigger, AI Agent и одного общего memory-узла.
В статье покажу рабочую схему, объясню, где народ чаще всего спотыкается о session ID, когда хватает Simple Memory, а когда уже пора тащить Redis или Postgres. Плюс дам чек-лист запуска и список косяков, которые я сам словил на тестах.
- Зачем вообще цеплять память к Chat Trigger
- Какая схема реально работает
- Пошаговая настройка в n8n
- Почему память может отвалиться
- Что ставить для боевого сценария
- Чек-лист перед публикацией
- Что ещё почитать по теме
Зачем вообще цеплять память к Chat Trigger
Когда ты собираешь чат-ассистента в n8n, первая эйфория обычно длится ровно до второго сообщения. На первом вопросе всё красиво. На втором ассистент уже не помнит имя клиента, не держит тему разговора и отвечает так, будто ему формат диалога вообще не знаком. Причина простая: сам по себе Chat Trigger лишь принимает сообщение и запускает workflow. Контекст разговора должен храниться отдельно.
Вот в чём соль: если память подключена правильно, ассистент может держать линию беседы, помнить последние уточнения, не переспросить одно и то же по кругу и отвечать более по-человечески. Для сайта, формы консультации, внутреннего помощника или бота поддержки это уже не приятная мелочь, а базовая гигиена.
По моему опыту, запросы вокруг этой темы крутятся вокруг одних и тех же формулировок: n8n Chat Trigger с памятью, n8n Simple Memory session id, как сохранить контекст диалога в n8n, почему n8n memory не работает, как сделать AI Agent, который помнит предыдущие сообщения. И да, все они упираются в одну и ту же механику.

Какая схема реально работает
Рабочая связка выглядит так:
-
Chat Trigger принимает сообщения из hosted chat или embedded chat.
-
AI Agent получает текст пользователя и собирает ответ.
-
Chat Model выступает мозгом ассистента.
-
Memory node хранит недавнюю историю диалога.
Ключевой момент тут такой: один и тот же memory-узел надо подключить и к Chat Trigger, и к AI Agent. Вот тут народ чаще всего и мажет. Подключают память только к агенту, а потом удивляются, почему предыдущие сообщения не подтягиваются в новую итерацию чата.
Для старта я обычно беру Simple Memory. Он удобный, быстрый и даёт понятную логику. Для тестового стенда или первого прототипа — самое то. Но если у тебя уже не игрушка, а живая нагрузка, несколько воркеров или желание держать историю стабильно, тогда лучше смотреть в сторону Redis Chat Memory или Postgres Chat Memory.
Пошаговая настройка в n8n
1. Создай базовый workflow
Я собираю основу так: Chat Trigger → AI Agent. Внутрь агента добавляю Chat Model. Если нужен потоковый ответ, сразу держу в голове, что его удобнее тестировать на hosted chat, где видно поведение вживую.
2. Включи публичный чат
У Chat Trigger есть важный нюанс: настройка загрузки прошлой сессии появляется только после публикации чата. Поэтому сперва включаешь публичную доступность, потом выбираешь режим — hosted chat или embedded chat. Для первого запуска hosted chat обычно практичнее: открыл, постучал вопросами, быстро увидел, живёт память или нет.
3. Подключи загрузку прошлой сессии
Теперь заходишь в опции Chat Trigger и включаешь загрузку предыдущей сессии из памяти. После этого у триггера появляется memory-коннектор. Это важный сигнал: значит, workflow уже готов принимать не просто новое сообщение, а беседу с историей.
4. Добавь один общий memory-узел
Вот тут нужна аккуратность. Не два разных узла, не какая-то хитрая развилка на глазок, а один общий memory node. Подцепляешь его к Chat Trigger и этим же узлом цепляешь AI Agent. Логика простая: одна история, один источник правды, один session key.
Если берёшь Simple Memory, то в параметрах смотри на длину контекстного окна. Я обычно не жадничаю и ставлю размер, которого хватает на несколько последних обменов сообщениями. Слишком маленькое окно режет полезный контекст. Слишком большое тащит лишний шум, токены и тормоза.
5. Не сломай session ID
В стандартном сценарии самый спокойный вариант — привязать Session ID к подключённому Chat Trigger. Тогда n8n сам понимает, к какой беседе относится память. Если ты начинаешь мудрить с кастомными значениями, обязательно следи, чтобы один и тот же идентификатор использовался последовательно в рамках конкретного диалога. Иначе история распадается на куски, и ассистент внезапно «забывает» то, что знал минуту назад.
Кастомный session ID нужен, когда ты тащишь пользователя снаружи, например из встроенного чата на сайте или из другой точки входа. В таком случае удобно передавать свой идентификатор через metadata и дальше уже строить логику вокруг него.
6. Пропиши нормальный системный промпт
Память сама по себе не делает ассистента внятным. Если системный промпт сырой, он начнёт запоминать мусор и отвечать криво, хоть у тебя там три слоя хранения. Я обычно пишу коротко: кто он, что делает, где должен быть осторожен, когда спрашивать уточнение и как вести разговор. Этого хватает, чтобы память работала на пользу, а не превращала чат в кашу.
7. Прогони короткий сценарий тестов
Я проверяю не одним сообщением, а серией. Сначала даю имя. Потом задаю вопрос, где это имя надо вспомнить. Потом меняю условие. Потом возвращаюсь к теме через пару реплик. Если ассистент держит связку и не путает детали, значит настройка живая. Если начинает плавать, смотри memory node, session key и то, куда реально подключён триггер.
Почему память может отвалиться
Вот набор проблем, которые встречаются чаще всего.
Память подключена только к агенту
Очень популярный фейл. Агент что-то хранит локально в рамках шага, а Chat Trigger при следующем сообщении не подтягивает прошлую историю. Внешне выглядит как «первый ответ норм, потом память исчезла».
Сессия не тащится из Chat Trigger
Если у memory-узла сломан или неверно задан session ID, история будет либо пустая, либо смешанная. Особенно весело это всплывает, когда в одном workflow пытаются руками собирать идентификатор из разных полей.
Взял старый memory-узел из шаблона
Если шаблон древний, можно словить ошибку на устаревшей версии Simple Memory. Я в таких случаях не чиню старьё до бесконечности, а просто удаляю узел и добавляю заново свежий.
Слишком много надежд на Simple Memory
Тут надо трезво смотреть на задачу. Simple Memory хорош для быстрого запуска и локальных сценариев. Но если workflow у тебя крутится в queue mode, память на нём становится слабым местом. Разные выполнения могут прилетать на разные воркеры, и история начинает жить рвано.
Ожидал вечную память, а получил память сессии
Это вообще классика. Люди ждут, что ассистент будет помнить клиента через день, через перезапуск и после нового открытия виджета. А у них при этом стоит базовая краткосрочная память для текущего диалога. Тут надо сразу разделять: память разговора и долговременное хранение истории — это разные задачи.
Что ставить для боевого сценария
Если ты только собираешь MVP, Simple Memory вполне годится. Ты быстро проверишь механику, структуру промпта, тон ответа и общую логику. Но как только у тебя появляется реальный трафик, несколько пользователей, отдельные воркеры или требование держать контекст надёжнее, я бы уже переходил на внешний storage.
Практический расклад у меня такой:
-
Simple Memory — для первых тестов, демо и черновой сборки.
-
Redis Chat Memory — когда нужен быстрый и понятный shared state с TTL.
-
Postgres Chat Memory — когда хочется хранить историю в базе и жить спокойнее на длинной дистанции.
Если нужен ещё более гибкий контроль, тогда уже пригодится Chat Memory Manager. Он помогает загружать сообщения, вставлять их вручную, чистить куски истории и в целом жёстче рулить контекстом, когда простого окна памяти уже мало.
Ещё один практический совет от меня: не пытайся запихнуть в память вообще всё подряд. История должна помогать ответу, а не превращать каждый запрос в вагон токенов. Для ассистента консультаций, саппорта или предварительного брифа обычно хватает компактного контекста и аккуратного session key.
Чек-лист перед публикацией
-
Chat Trigger опубликован и реально принимает сообщения.
-
Load Previous Session включён.
-
Один memory-узел подключён и к Chat Trigger, и к AI Agent.
-
Session ID берётся из Chat Trigger или стабильно задаётся вручную.
-
Контекстное окно не слишком маленькое и не раздутoе.
-
Тест пройден на серии из 4–6 сообщений, а не на одной фразе.
-
Боевой storage выбран под нагрузку, если проект уже вышел из режима эксперимента.
Если хочешь совсем короткий вывод, то он такой: n8n Chat Trigger с памятью собирается быстро, когда не пытаешься изобретать экзотику. Делай общий memory node, аккуратно работай с session ID и не возлагай на Simple Memory задачи, для которых уже нужен внешний storage. Тогда ассистент начинает держать нить разговора, а не играть в рыбку с амнезией.
Что ещё почитать по теме
Чтобы докрутить такого ассистента до вменяемого рабочего состояния, я бы ещё заглянул в материалы про агента с инструментами в n8n, про согласование действий ассистента человеком, про проверку качества ответов и про queue mode в n8n. А для отладки очень выручает материал про partial execution для AI tools.
Я бы начал именно с этой пятёрки. После неё уже гораздо легче собирать ассистента, который не просто отвечает, а реально держит разговор в руках.