>_
automate_this
Г
Это демо
Потыкай, посмотри как устроено — а чтобы начать, заведи аккаунт: M0 бесплатно.

M0-16Чат-бот с памятью

тренажёрfree
Представь: обычные AI-чаты забывают предыдущее сообщение сразу после ответа. Спросишь «как варить рис», а потом «а сколько по времени?» — бот переспросит «о каком блюде речь?». Это раздражает, диалог рассыпается. Соберём чат-бота с памятью: он запоминает последние пять пар «вопрос-ответ» и отвечает с учётом контекста, как нормальный собеседник. Внутри — AI Agent с двумя sub-нодами: языковая модель готовит ответ, Simple Memory хранит историю диалога.
#chat#ai#agents#memory

Что собираем

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

Chat Trigger принимает сообщения из встроенного чата n8n.

AI Agent — кластерная нода. Она читает сообщение пользователя, обращается к языковой модели и формирует ответ. Сама по себе она не работает — ей нужны две sub-ноды снизу: «мозг» (языковая модель) и «память» (хранилище истории диалога).

OpenAI Chat Model — sub-нода, обращается к языковой модели deepseek-chat через школьный прокси.

Window Buffer Memory (она же Simple Memory) — sub-нода хранения истории. Запоминает последние несколько пар «вопрос-ответ» прямо в памяти n8n, без баз данных. Сессии разделены: у каждого пользователя своя история.

Готовый воркфлоу: Chat Trigger → AI Agent, снизу к AI Agent подключены две sub-ноды — OpenAI Chat Model и Window Buffer Memory
Итоговый воркфлоу

Шаги выполнения

1Подключи Chat Trigger

Первая нода — Chat Trigger. Она запускает воркфлоу при сообщении во встроенном чате n8n и кладёт текст сообщения в поле chatInput.

💬Встроенный чат n8n — как открыть и зачем он нуженстатья · ~2 мин

Встроенный чат для отладки AI-воркфлоу

Встроенное окно чата открывается прямо в редакторе n8n. Оно нужно, чтобы быстро проверить, как AI-воркфлоу отвечает на сообщения, без подключения Telegram или сайтового виджета. Чат работает только вместе с нодой Chat Trigger — без неё кнопка открытия не появляется.

Окно не генерирует ответы само. Чтобы получить ответ, воркфлоу должен выполниться: либо в режиме разработки, либо после публикации.

Как это работает

Нода Chat Trigger добавляется так: на пустом холсте нажми + → в списке триггеров What triggers this workflow? выбери On chat message. На холсте нода появится под именем When chat message received. После добавления появляется кнопка Open chat — и на карточке самой ноды, и в нижней панели инструментов canvas.

Для отладки используй Test this trigger внутри настроек ноды или сразу открывай чат кнопкой Open chat. Каждое сообщение в таком режиме запускает воркфлоу один раз.

Для постоянной работы без повторных запусков нажми Publish в заголовке воркфлоу. В этом режиме чат слушает сообщения постоянно, пока воркфлоу опубликован.

Отдельной кнопки сохранения нет — все изменения сохраняются автоматически.

Правило одной строкой
Чат требует запущенный воркфлоу

Чтобы получить ответ, воркфлоу должен быть запущен через Test this trigger, Open chat или Publish. Само окно чата только отправляет и показывает сообщения.

Типичные ошибки

  • Кнопки Open chat нет → в воркфлоу не добавлена нода Chat Trigger; добавь её, кнопка появится.
  • Отправил сообщение, бот молчит → воркфлоу не запущен; нажми Test this trigger или Open chat, либо Publish.
  • Поменял системный промпт, ответы прежние → Test this trigger подхватывает правки только при новом запуске, а не на лету.
  • Ищешь кнопку Save → её нет, воркфлоу сохраняется автоматически.
  • Ждёшь, что в этом чате будут сидеть реальные пользователи → это инструмент разработки, для прода нужен внешний канал.
1.1
Добавь Chat Trigger

На пустом canvas нажми + → в поиске нод начни вводить chat → выбери Chat Trigger (значок чата).

Нода появится на canvas. Никакие параметры менять не нужно — дефолтные настройки уже подходят. По умолчанию Chat Trigger возвращает в чат ответ от последней ноды воркфлоу, а раздел Options остаётся пустым.

📖Как добавить ноду в n8nстатья · ~2 мин

Добавление ноды на canvas

Чтобы продолжить цепочку, нужно вставить новую ноду после существующей или на пустой canvas. Для этого открывают панель выбора нод тремя способами: кнопка Open nodes panel в центре canvas, кнопка Add node на стрелке соединения и + на output-коннекторе любой ноды.

Панель называется What happens next?. В ней сразу видно категории и поле поиска.

Как это работает

  • Клик по Open nodes panel или Add node открывает список.
  • В поле Search nodes... вводят имя ноды или сервиса (например http, slack, schedule). Список фильтруется по мере ввода.
  • Навигация по категориям: AI, Action in an app, Data transformation, Flow, Core, Human review, Add another trigger.
  • Клик по названию ноды ставит её на canvas и сразу открывает панель Parameters.
  • На пустом canvas можно нажать клавишу Tab — откроется та же панель без клика мышью.

Первая нода любого воркфлоу должна быть триггером (Schedule Trigger, Webhook, Manual и подобные). Обычные ноды-действия в начало ставить нельзя.

Правило одной строкой
Первая нода — всегда триггер

Если первой стоит обычная нода-действие, воркфлоу не запустится. Начинай всегда с триггера.

Типичные ошибки

  • Поставил обычную ноду первой → воркфлоу не из чего стартовать → замени первую ноду на триггер из категории Core или через поиск.
  • Ищут ноду по русскому названию → список остаётся пустым → вводи английское имя сервиса в поле Search nodes....
  • Целятся мышью в мелкий + на стрелке → промахиваются → нажми Tab прямо на canvas.
  • Открывают категорию Add another trigger после уже существующей ноды → добавляют лишний триггер → для обычного шага используй поиск или категории Action in an app и Data transformation.

Триггер добавлен. Теперь нужно получить от чата реальные данные, чтобы дальше с ними работать.

1.2
Открой встроенный чат

Внизу canvas найди оранжевую кнопку Open chat (с иконкой сообщения) — она открывает встроенный чат-виджет n8n.

Нажми её. Можно использовать горячую клавишу L.

Внизу откроется окно чата.

1.3
Отправь тестовое сообщение в чат

В окне чата напиши тестовое сообщение Привет, кто ты? и отправь.

Чат отправит сообщение в Chat Trigger, воркфлоу запустится. На триггере появится зелёная галочка и метка 1 item на стрелке.

Chat Trigger на canvas с зелёной обводкой, галочкой и меткой 1 item на стрелке
После первого сообщения — Chat Trigger выполнился
📖JSON: формат данных, синтаксис и типыОткрыть
1.4
Запинь данные триггера через Pin data

В правой панели Output нажми иконку пина 📌 (горячая клавиша P).

Данные триггера зафиксируются — нода получит фиолетовую обводку. Теперь следующая нода сможет читать эти данные без повторной отправки сообщения в чат.

📖Pin Data в n8n: как зафиксировать тестовый вход нодыстатья · ~2 мин

Pin Data в n8n: как зафиксировать тестовый вход ноды

Pin Data — это способ «прибить» к ноде заранее заготовленные данные, которые n8n будет подставлять вместо настоящего входа на каждом тестовом запуске. Полезно, когда дёргать реальный источник (внешний воркфлоу, веб-хук, API) на каждое нажатие Execute workflow неудобно или невозможно.

Зачем это нужно

Часто отлаживается не сам триггер, а ноды после него — логика, маппинг, запрос в базу. Чтобы не звать каждый раз источник данных (другой воркфлоу, бот, форму), удобнее один раз получить пример настоящего входа, зафиксировать его на триггере и потом крутить запуски сколько нужно.

Поэтому Pin Data — это инструмент разработчика на этапе сборки, не часть рабочего воркфлоу. В боевом режиме закреплённые данные перестают использоваться: n8n берёт реальный вход.

Как это работает

К любой ноде с выходом можно прикрепить «запинённый» JSON. После этого:

  • При запуске воркфлоу через UI (Execute workflow, тестовый прогон) n8n не вызывает саму ноду, а сразу выдаёт следующим нодам зафиксированные данные.
  • Pin Data привязана к конкретной ноде, не к workflow целиком — можно запинить триггер и оставить остальные ноды живыми.
  • На холсте у запинённой ноды появляется визуальный значок (булавка/иконка), чтобы не забыть, что данные «искусственные».

Удобнее всего пинить триггер: на нём поле выхода — то, что в боевом режиме приходит снаружи (Telegram-апдейт, тело веб-хука, поля Execute Workflow Trigger). Тестовый JSON собирают с теми же ключами, что отдаёт реальный источник.

К примеру
Где это встречается

К примеру, в Sub-Workflow с триггером Execute Workflow Trigger пин на триггере позволяет запускать сам Sub-WF кнопкой сверху и отлаживать ноды после триггера, не запуская вызывающий workflow. Иногда — пин ставят на ноде HTTP Request к платному API, чтобы при разработке не жечь квоту запросами «ещё разок проверить парсинг».

Типичные ошибки

  • Забыли про пин при отладке — в редакторе тестовые прогоны идут по закреплённым данным, а не по реальным, поэтому новый вход «не доходит». Боевому запуску пин не мешает, но перед проверкой на живых данных его лучше снять.
  • Структура запинённого JSON не совпадает с реальным — отладка проходит идеально, но в проде ломается на полях, которых не было в тестовом примере; делайте пин из реальной execution, а не «на глаз».
  • Запинили середину воркфлоу, забыли — переименовали поле в ноде до пина, а пин остался со старой структурой. Следующие ноды читают «фантомные» данные.
  • Pin Data перепутали с переменными среды — пин не передаётся между воркфлоу и не сохраняется при экспорте на другую инсталляцию n8n как «конфиг»; это именно отладочный фиксаж.

Когда не подходит

Pin Data не заменяет настоящие тесты — это удобство в редакторе, не автоматизация. Если нужна повторяемая проверка с разными входами, лучше делать отдельный тестовый workflow или мини-набор тест-кейсов; пин подходит, когда хочется быстро прогнать «один и тот же» сценарий N раз.

Воркфлоу после шага 1: одна нода Chat Trigger с пином
Воркфлоу после шага 1 — Chat Trigger с запиненными данными
2Подключи AI Agent и OpenAI Chat Model

Вторая нода — AI Agent. Это кластерная нода, центр всего воркфлоу.

Она забирает текст пользователя из Chat Trigger, обращается к языковой модели через подключённую снизу sub-ноду и возвращает ответ — он автоматически приходит обратно в чат.

В отличие от Basic LLM Chain, агент умеет ещё две вещи: использовать память диалога (если подключить sub-ноду памяти) и вызывать внешние инструменты (поиск, базы данных, API). В этой задаче ты подключишь только модель и память — инструменты появятся в более поздних модулях курса.

📖Нативные AI-ноды, Basic LLM Chain и AI Agent — в чём разницастатья · ~3 мин

Три ноды — одна модель, три разных задачи

В n8n запрос к языковой модели можно отправить тремя классами нод: нативная нода вендора (OpenAI, Anthropic, Google Gemini — пункт «Message a Model»), Basic LLM Chain и AI Agent. У всех трёх под капотом — вызов LLM, но устроены они по-разному и решают разные задачи. Выбор не на вкус: для одного кейса подходит одна, для другого — другая.

Сравнение по основным свойствам
  • Нативная нода вендора — одна нода, один HTTP-запрос к API конкретного провайдера. Без sub-нод. Модель и её параметры (название, температура, max_tokens) задаются прямо в полях ноды. Память, инструменты, парсеры — не поддерживает. Используется как обычное «действие»: на вход — твой промпт, на выход — текст ответа модели.
  • Basic LLM Chain — нода-родитель из стека LangChain. Модель подключается sub-нодой снизу (Chat Model OpenAI, Chat Model Anthropic и т. д.) — поэтому одну и ту же ноду можно перевести с одного вендора на другого, не переписывая логику. Один проход: собрал prompt → отдал модели → получил ответ. Опционально подключается Output Parser sub-нода для структурированного вывода (JSON по схеме).
  • AI Agent — тоже LangChain-родитель, но с циклом внутри. Принимает sub-ноды Chat Model, Memory (история диалога), Tools (инструменты, которые модель может вызывать). Внутри работает ReAct-loop: модель сама решает, какой tool позвать, агент его выполняет, результат возвращает в модель, повторяет — пока модель не выдаст финальный ответ.

Когда что выбирать

  • Нативная нода вендора — когда нужен один простой вызов к конкретной модели и больше ничего: классификатор текста, переписать одно сообщение, извлечь сущности по промпту. Минимум абстракций, максимум контроля над параметрами вендорского API (например, response_format у OpenAI). Память истории придётся собирать руками — нода её не ведёт.
  • Basic LLM Chain — когда нужен один вызов, но с возможностью менять модели и/или вытаскивать структурированный вывод через парсер. Типичный кейс: «сгенерируй JSON по схеме». Сегодня модель OpenAI, завтра — Gemini, ноду переключать не надо, меняешь только sub-ноду Chat Model.
  • AI Agent — когда модели нужны инструменты (поиск в БД, вызов API, доступ к Sub-Workflow) или память диалога между сообщениями пользователя. Бот, который помнит разговор, ассистент с инструментами, агент с RAG — это AI Agent. Бот, который отвечает на каждый вопрос отдельно, без памяти и инструментов, обходится Basic LLM Chain.
Главная тонкость
AI Agent без tools — это не Basic LLM Chain

Если поставил AI Agent без подключённых инструментов, по сути получишь дорогой Basic LLM Chain с лишним loop'ом. Память и tools — единственная причина использовать Agent вместо Chain. Без них Chain быстрее, дешевле и предсказуемее.

Типичные ошибки

  • Поставил AI Agent, потому что «звучит модно», без инструментов и памяти → переплачиваешь токенами на служебный ReAct-промпт, получаешь то же, что дал бы Basic LLM Chain. Без tools — Chain.
  • Взял нативную ноду OpenAI ради «структурированного JSON» → парсера у нативной ноды нет, ответ парсишь сам в следующей Code-ноде. Если нужен валидированный JSON по схеме — Basic LLM Chain с Output Parser sub-нодой.
  • Подключил Chat Memory к Basic LLM Chain и ждёшь, что бот «запомнит» предыдущее сообщение → Basic LLM Chain не ведёт диалог, он делает один запрос за вызов. Для памяти диалога нужен AI Agent.
  • Сменил вендора в нативной ноде → надо переписывать всю ноду заново (поля разные у OpenAI и Anthropic). В Basic LLM Chain / AI Agent — меняется только sub-нода Chat Model, остальное остаётся.
2.1
Добавь ноду AI Agent

На canvas нажми + справа от Chat Trigger. В поиске нод начни вводить ai agent → выбери AI Agent. Нода появится на canvas и автоматически подключится к триггеру.

2.2
Проверь параметры AI Agent

Открой ноду. Все настройки уже подходят — ничего менять не нужно. Поле Source for Prompt (User Message) стоит в режиме Connected Chat Trigger Node, агент сам подхватит сообщение из подключённого выше триггера.

Параметры AI Agent
ПараметрЗначение
Source for Prompt (User Message)Connected Chat Trigger Node
Require Specific Output Formatoff
Options(пусто, дефолт)

Нода добавлена. Теперь ей нужен «мозг» — sub-нода с языковой моделью.

2.3
Добавь sub-ноду OpenAI Chat Model

Закрой ноду. Под AI Agent ты увидишь несколько коннекторов с подписями — Chat Model*, Memory, Tool. Звёздочка у Chat Model* означает, что это обязательная sub-нода — без неё агент не работает.

Кликни на коннектор Chat Model* → в окне выбора ноды начни вводить openai chat → выбери OpenAI Chat Model.

Sub-нода появится снизу и автоматически подключится к AI Agent через коннектор Chat Model.

🔀Что такое sub-нода в n8n и как её заменитьстатья · ~2 мин

Что такое sub-нода

В n8n AI-ноды устроены как «родитель + дети». Родитель — основная нода (AI Agent, Qdrant Insert, Qdrant Vector Store…). Дети — sub-ноды, которые подключаются к специальным кружкам на нижней стороне родителя. Каждая sub-нода — это «поставщик ресурса» для родителя.

AI Agent (родитель) с подключёнными sub-нодами Chat Model и Tool, и пустым слотом Memory

Какие бывают sub-ноды

  • Embeddings — поставляет векторы (OpenAI / Cohere / Voyage / Google Gemini / bge / …).
  • Chat Model — поставляет LLM для AI Agent, Basic LLM Chain и других AI-нод, например Guardrails.
  • Document Loader — поставляет «нарезанные» куски документа.
  • Text Splitter — внутри Document Loader, разбивает на чанки.
  • Memory — поставляет историю диалога для AI Agent.
  • Tool — поставляет инструменты, которые AI Agent может вызвать.

Когда родитель запускается (например, Qdrant Insert получил файл и собирается записать его в БД), он по очереди обращается к sub-нодам: «дай мне чанки», «переведи каждый чанк в вектор». Sub-ноды отвечают, родитель собирает результат.

Как выглядит sub-нода в параметрах родителя

Если открыть параметры родителя двойным кликом — справа выезжает панель параметров, а на нижней границе панели видны кружки sub-нод. Подключённая sub-нода показана как круглый цветной индикатор с иконкой провайдера. При наведении — всплывающая подсказка с именем и статусом.

Панель параметров ноды Qdrant Insert TXT — на нижней границе видны слоты Embedding и Document, к Embedding подключена sub-нода Embeddings (видна всплывающая подсказка)

Как заменить sub-ноду

  1. Закрой панель параметров родителя (Esc).
  2. На canvas найди подключённую sub-ноду — она расположена под родителем. Кликни на ней, нажми Delete (или правый клик → Delete). Sub-нода удалится, у родителя освободится слот.
  3. На родителе освободившийся слот покажет «+» (например, Add document embedding). Нажми — справа откроется список доступных sub-нод нужного типа.
Список доступных Embedding sub-нод: Cohere, AWS Bedrock, Azure OpenAI, Google Gemini, Google Vertex, Hugging Face и др.
  1. Выбери нужную sub-ноду — она автоматически подключится к родителю на освободившемся слоте.
  2. Заполни параметры новой sub-ноды (credential, модель, режим).
Важно
Заменяешь sub-ноду — проверь всех её родителей

Одну sub-ноду можно подключить к нескольким родителям: например, одну модель — к агенту и к цепочке Basic LLM Chain, одну ноду памяти — к агенту и к Chat Memory Manager (n8n 2.20.7). Тогда замена этой sub-ноды меняет поведение всех родителей сразу. А если у каждого родителя своя sub-нода (например, две ноды Qdrant Insert — для txt и для pdf — и у каждой своя Embeddings), заменить нужно в каждом родителе отдельно.

2.4
Проверь credential OpenAI

Открой sub-ноду OpenAI Chat Model. В поле Credential должен быть выбран credential OpenAi account (он создан в твоём инстансе заранее школой).

Если credential не подставился автоматически — выбери его из выпадающего списка.

🔑Как добавить credential в n8nстатья · ~1 мин

Универсальный процесс добавления credential

Credential в n8n — это сохранённая «учётка» для подключения к сервису (API-ключ, OAuth-токен, логин/пароль и т.д.). Любая нода, которой нужна авторизация, выбирает credential из общего списка — поэтому добавлять его нужно один раз, а использовать можно из любого количества нод того же типа.

Пошагово

  1. В левом меню n8n открой раздел Credentials.
  1. Нажми кнопку Add credential (правый верхний угол).
  1. В поиске введи название нужного типа credential — например, OpenAI, Header Auth, Postgres, Google — и выбери его из списка.
  1. В шапке формы дай credential понятное имя — например, OpenAI школа или Postgres prod. По этому имени ты будешь выбирать его в нодах.
  1. Заполни поля формы. Какие именно — зависит от типа: для API-ключевых это обычно одно поле API Key, для Header Auth — Name и Value заголовка, для Postgres — host/port/database/user/password, для OAuth — запуск OAuth-flow по кнопке.
  1. Нажми Save. Готово — credential можно подключать к любой ноде, которая поддерживает этот тип.
Подсказка
Один credential — много нод

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

Кстати
Какие поля заполнять у конкретного типа

Этот гайд — про универсальный процесс. Какие поля и какие значения вводить у конкретного credential (OpenAI API, Header Auth, Postgres и т.д.) — смотри в inline-статье на этот тип, она будет рядом со ссылкой на текущую.

⚙LiteLLM-прокси школы — единый шлюз для платных моделейстатья · ~2 мин

Один URL вместо ключей всех провайдеров

LiteLLM-прокси — это единый шлюз, который принимает запросы в формате OpenAI и пересылает их к разным платным моделям: OpenAI, Anthropic, DeepSeek, Cohere и другим. Студент работает только с одним адресом и одним набором настроек.

Школа поднимает прокси, чтобы все студенты ходили через общий счёт. Школа платит провайдерам по одному договору и видит расход токенов каждого студента по отдельности. Студенту не нужно заводить личные billing-аккаунты и следить за лимитами.

OpenAI-совместимый интерфейс позволяет использовать прокси в n8n и SDK без изменений кода. Ноды и библиотеки отправляют запросы на школьный адрес, а не напрямую на api.openai.com.

Как это работает

В n8n credential OpenAi account указывает Base URL школьного прокси. Все запросы к моделям DeepSeek, Claude и остальным идут через этот credential. Модель указывается в параметре model как обычно.

Прокси не хранит модели у себя. Он только маршрутизирует запросы к внешним API и возвращает ответы. Поэтому он не заменяет self-hosted решения вроде Ollama.

Прямой ключ провайдера нужен только в двух случаях: когда требуется Assistants API или когда нужны параметры, которые прокси ещё не поддерживает. В остальных задачах весь трафик идёт через OpenAi account.

Правило одной строкой
Прокси — это маршрутизатор, а не модель

LiteLLM-прокси не запускает модели локально и не добавляет новых провайдеров. Он принимает OpenAI-формат и пересылает запросы дальше.

Типичные ошибки

  • Считаешь OpenAi account отдельной моделью → запрос уходит не туда → выбирай имя модели из списка, который даёт школа.
  • Меняешь значение model на имя из документации провайдера → модель не находится → уточняй у школы, какое имя доступно через прокси.
  • Пытаешься вызвать Assistants API через прокси → запрос падает → используй прямой ключ OpenAI.
  • Думаешь, что личный ключ запрещён → можно использовать, но по умолчанию весь учебный трафик должен идти через OpenAi account.
  • Путаешь прокси с self-hosted моделью → ждёшь, что модели работают без интернета → LiteLLM только пересылает запросы к платным API.
2.5
Выбери модель deepseek-chat

В поле Model оставь режим From list и выбери из выпадающего списка значение deepseek-chat.

2.6
Выключи переключатель Use Responses API

Прямо в параметрах ноды найди переключатель Use Responses API и убедись что он выключен (off).

Это особенность школьного LiteLLM-прокси. При включённом тоггле нода обращается к эндпоинту /v1/responses, который прокси не поддерживает, и нода падает с ошибкой. С выключенным тоггл нода идёт на /v1/chat/completions — это стабильный путь.

📖Responses API vs Chat Completions: два разных эндпоинта OpenAIстатья · ~3 мин

Два эндпоинта к одним моделям

У OpenAI два разных эндпоинта для одних и тех же моделей: /v1/chat/completions и /v1/responses. Оба принимают запросы к gpt-4o и другим моделям, но формат запроса и ответа у них несовместим.

Chat Completions — старый и до сих пор поддерживаемый путь. Responses API — новый интерфейс, который OpenAI рекомендует для агентских сценариев.

Ключевое отличие не в модели, а в том, как ты передаёшь данные и хранишь контекст.

Как это работает

Chat Completions принимает массив messages. В ответе модель возвращает одно сообщение в choices[0].message. Всю историю разговора клиент должен хранить и отправлять заново при каждом запросе.

Responses API использует параметр input — это может быть строка или массив typed items. Поле instructions вынесено отдельно от сообщений. В ответе приходит массив typed output items (message, reasoning, function_call и другие).

Responses поддерживает stateful-цепочки через previous_response_id: OpenAI хранит предыдущие сообщения на своей стороне. Токены предыдущих запросов при этом всё равно учитываются при биллинге.

В Responses встроены инструменты Web Search, File Search и Code Interpreter — их можно включить без написания собственных функций.

В n8n-ноде OpenAI Chat Model есть переключатель Use Responses API, который меняет эндпоинт запроса. Через школьный прокси LiteLLM результат зависит от ноды, к которой подключена модель: AI Agent отвечает в обоих положениях, но с включённым переключателем n8n записывает в выполнение только оценку расхода — tokenUsageEstimate, где токены ответа модели всегда 0; Text Classifier с включённым переключателем падает на каждом элементе. С выключенным переключателем запрос идёт на /v1/chat/completions, и в выполнении виден настоящий расход — блок tokenUsage. Поэтому в задачах школы переключатель выключают всегда.

Это именно разные эндпоинты: формат Chat Completions, отправленный на /v1/responses, не сработает, и наоборот.

Правило одной строкой
Разные форматы — разные эндпоинты

Выбор эндпоинта определяет структуру запроса и ответа. Модель при этом остаётся той же. Передача полей input, instructions или previous_response_id на /v1/chat/completions приводит к ошибке валидации.

Типичные ошибки

  • Оставили Use Responses API включённым при работе через школьный LiteLLM-прокси → у AI Agent в выполнении нет настоящего расхода токенов, только оценка с нулём на ответе, а Text Classifier падает на каждом элементе → выключи переключатель.
  • Перенесли готовый воркфлоу с прямого OpenAI на прокси и не тронули тоггл → часть нод падает, у остальных пропадает настоящий расход токенов → проверь состояние переключателя в каждой OpenAI-ноде.
  • Передали в запрос к /v1/chat/completions поля input, instructions или previous_response_id → ошибка валидации или поля просто игнорируются → используй только массив messages и храни историю на стороне клиента.
  • Решили, что Responses API нужен только для новых моделей → gpt-4o доступен по обоим эндпоинтам, разница только в формате → не путай выбор эндпоинта с выбором модели.
2.7
Проверь параметры OpenAI Chat Model
Параметры OpenAI Chat Model
ПараметрЗначение
CredentialOpenAi account
Model (режим)From list
Model (значение)deepseek-chat
Use Responses APIoff (выключено)

Связка AI Agent + OpenAI Chat Model готова. Можно сделать первый тест.

2.8
Запусти Execute step на AI Agent

Открой ноду AI Agent и нажми кнопку Execute step в правом верхнем углу.

Нода выполнится на запиненных данных триггера:

возьмёт текст Привет, кто ты? из поля chatInput → передаст его в sub-ноду OpenAI Chat Model → получит ответ модели → положит ответ в output ноды и в поле output.

📖Кнопка «Execute step»: запуск одной ноды без всего воркфлоустатья · ~2 мин

Запустить одну ноду, не дёргая весь workflow

Execute step — это кнопка внутри панели ноды (открывается двойным кликом по ноде). По смыслу — младший брат большой кнопки Execute workflow внизу холста: та запускает весь воркфлоу с начала, эта — только текущую ноду. Удобно, когда настраиваешь параметры и хочешь сразу видеть, что отдаёт нода, не перезапуская всю цепочку.

Как это работает

Когда ты жмёшь Execute step, n8n берёт уже существующие данные на входе ноды (output предыдущей ноды из последнего прогона) и прогоняет через эту ноду. Сама нода выполняется реально: HTTP-запрос уходит, запись в базу пишется, письмо отправляется. Это не «сухой прогон», а полноценное выполнение — только одного шага.

  • key: Execute workflow

value: Запускает весь воркфлоу от триггера. Нужен полный прогон с самого начала. Каждый раз заново дёргает все API.

  • key: Execute step

value: Запускает только эту ноду. Берёт вход из последнего output предыдущей ноды. Идеально для подбора параметров и отладки.

  • key: Когда работает

value: Только если на входе ноды есть данные с прошлого прогона. Если ни разу не запускал предыдущие — кнопка либо ничего не вернёт, либо упадёт «No input data».

Типичный сценарий: запустил весь воркфлоу один раз (Execute workflow), увидел что нода HTTP Request отдаёт не то, поправил поле URL, нажал Execute step — увидел новый результат за секунду. Предыдущие ноды повторно не выполнялись.

У триггеров кнопка называется иначе
Смысл тот же — запустить один шаг и получить тестовое событие

У некоторых триггерных нод n8n кнопка Execute step подписана по-другому, потому что у триггера нет «входа» — он сам должен сходить за событием. Например, у RSS Trigger она называется Fetch Test Event: клик подтянет последние записи из ленты и положит их на выход ноды как тестовый input для остального воркфлоу. Работает идентично Execute step обычной ноды — точно так же используется для отладки и подбора параметров без полного прогона.

Важно про побочные эффекты
Каждый Execute step — это реальный вызов

Нода с записью в базу или отправкой сообщения каждое нажатие Execute step делает реально: 5 нажатий = 5 записей / 5 писем. Для отладки таких нод используй тестовые данные или подменяй credentials.

Типичные ошибки

  • Жать Execute step на ноде, у которой ещё не было входных данных → «No input data», нода не запустится. Сначала прогони весь воркфлоу через Execute workflow или хотя бы триггер вручную, чтобы у каждой ноды появился output.
  • Использовать Execute step для проверки изменений в предыдущих нодах → текущая нода работает со старым output, изменения не подхватятся. Если поправил предыдущую ноду — перезапусти её, а потом уже текущую.
  • Тестировать ноду с побочным эффектом (запись в БД, отправка письма) на проде → каждый клик создаёт реальную запись. Использовать тестовый credential или временно подменять параметры на безопасные.
Воркфлоу после шага 2: Chat Trigger → AI Agent, снизу к AI Agent подключена sub-нода OpenAI Chat Model. Все три ноды с зелёными галочками после Execute step
Воркфлоу после шага 2 — три ноды с галочками после Execute step

Попробуй спросить бота Что я только что спрашивал? Он помнит, о чем вы говорили?

3Подключи Simple Memory

Третья нода — Simple Memory (внутри n8n она называется Window Buffer Memory). Это вторая sub-нода AI Agent, она отвечает за память диалога.

Без неё агент работает изолированно: каждое сообщение обрабатывается с нуля, бот не помнит, о чём говорил минуту назад. С памятью агент видит предыдущие пары «вопрос-ответ» и может ссылаться на них в новых ответах.

Simple Memory хранит историю прямо в оперативной памяти n8n — никаких баз данных, никаких credentials. По умолчанию запоминает последние 5 пар сообщений и привязывает их к сессии чата автоматически.

📖Simple Memory — буфер памяти диалога в n8nстатья · ~2 мин

Что такое Simple Memory

Simple Memory — sub-нода n8n, которая хранит историю диалога прямо в оперативной памяти n8n. В поиске нод и на холсте она называется Simple Memory; в старых версиях n8n и в англоязычных гайдах её зовут Window Buffer Memory.

Нода не использует базы данных или внешние сервисы. История видна только своему воркфлоу и стирается при перезапуске n8n или после часа без обращений к ней (n8n 2.20.7). Между запусками одного воркфлоу в пределах этого часа история сохраняется (кухня, 25.10.2026, выполнения k1 996–998).

Как работает буфер

Нода хранит последние N пар «вопрос-ответ» — это называется «окно контекста» (Context Window).

По умолчанию Context Window Length = 5: агент помнит последние 5 сообщений пользователя и 5 ответов. Старые сообщения вытесняются новыми. Вызов инструмента агентом тоже занимает место в окне: при окне 1 агент с инструментом на следующей реплике уже не помнит, о чём шла речь (n8n 2.20.7, кухня k4 1697–1706).

Session ID

Каждый пользователь получает свою отдельную историю диалога. ID сессии определяется автоматически — из поля sessionId, которое Chat Trigger передаёт при каждом сообщении.

Автоматически — только пока поле sessionId доходит до агента во входящем элементе. Если перед агентом стоит нода, которая это поле убирает (например Guardrails), память падает с ошибкой No session ID found. Тогда в поле Session ID выбирают Define below и подают ключ сами — выражением из ноды чата.

У Telegram Trigger поля sessionId нет вовсе — ключ задают сами: Define below, Key = {{ $('Telegram Trigger').item.json.message.chat.id }}; число принимается как есть, у каждого чата своя история (n8n 2.20.7, кухня k1 996–999).

Разные сессии (разные вкладки браузера или разные пользователи) → разные истории диалога.

Когда использовать

  • Простой чат-бот с памятью без необходимости сохранять историю между перезапусками n8n
  • Быстрое прототипирование агентов с памятью
  • Задачи, где история диалога нужна только в рамках одной сессии

<!-- TODO: дописать секцию «Ограничения и альтернативы» (Postgres Chat Memory, Zep) -->

3.1
Добавь sub-ноду Simple Memory

Под нодой AI Agent найди коннектор с подписью Memory (без звёздочки — память не обязательна, но в этой задаче она нужна).

Кликни на коннектор Memory → в окне выбора ноды начни вводить simple memory → выбери Simple Memory.

Sub-нода появится снизу с именем Window Buffer Memory и автоматически подключится к AI Agent через коннектор Memory.

3.2
Проверь параметры Simple Memory

Открой sub-ноду. Все настройки уже подходят — ничего менять не нужно.

Session ID определяется автоматически по подключённому Chat Trigger — у каждого пользователя своя история. Context Window Length = 5 — агент будет помнить последние 5 пар «вопрос-ответ».

Параметры Simple Memory
ПараметрЗначение
Session IDConnected Chat Trigger Node (дефолт)
Context Window Length5 (дефолт)

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

3.3
Сними пин с Chat Trigger

Кликни по Chat Trigger на canvas. В правой панели Output нажми ту же иконку пина 📌 (горячая клавиша P) — пин снимется, фиолетовая обводка исчезнет.

Это нужно, чтобы при каждом новом сообщении в чате триггер реально срабатывал и пускал свежие данные через воркфлоу.

3.4
Открой встроенный чат

Внизу canvas снова нажми Open chat (или горячую клавишу L). Внизу откроется окно чата — там будем тестировать память.

3.5
Установи контекст — отправь первое сообщение

В чат отправь: Привет, меня зовут Алекс, я учусь собирать ботов в n8n.

Бот должен поздороваться и обратиться по имени. Если он это сделал — он прочитал твоё сообщение и зафиксировал имя в текущем ответе.

3.6
Проверь память — отправь второе сообщение

Отправь следом: Как меня зовут и что я изучаю?

Бот должен ответить Алекс и упомянуть n8n. Это и есть проверка памяти — без неё бот сейчас не помнил бы имя, потому что в chatInput второго сообщения имени Алекс нет.

3.7
Проверь глубокую память — отправь третье сообщение

Отправь следом: Расскажи, о чем мы говорили до этого

Бот должен рассказать, о чем вы говорили до этого. Если он это сделал — Window Buffer Memory действительно хранит последние пары «вопрос-ответ» и передаёт их в агента вместе с новым сообщением.

Готовый воркфлоу: Chat Trigger → AI Agent, снизу к AI Agent подключены две sub-ноды — OpenAI Chat Model и Window Buffer Memory. Все ноды с галочками после нескольких реплик в чате
Готовый воркфлоу после диалога — четыре ноды с галочками
4Опубликуй воркфлоу

До этого момента бот работал только пока редактор открыт и ты держишь окно Open chat. Это тестовый режим — закроешь вкладку, и Chat Trigger замолчит. Чтобы воркфлоу жил сам по себе и был доступен по своему публичному адресу — включи в Chat Trigger публичный режим и нажми Publish.

🚩Publish и режимы воркфлоу в n8nстатья · ~2 мин

Два режима воркфлоу: Unpublished и Published

В n8n у воркфлоу два состояния. Unpublished — черновик: ты редактируешь и можешь запускать его только вручную через Execute workflow, триггеры молчат. Published — живая версия: триггеры включены, Schedule срабатывает по расписанию, Webhook и Form принимают запросы по Production URL, polling-триггеры (Telegram, Gmail) слушают обновления. Переключает между состояниями кнопка Publish в правом верхнем углу редактора.

Что включает Publish
  • Schedule-триггер — начинает запускаться по расписанию. В Unpublished не сработает ни разу.
  • Webhook / Form Trigger — Production URL начинает принимать запросы. До Publish этот URL возвращает 404.
  • Test URL у Webhook / Form — работает только пока ты нажал Execute workflow в редакторе. От статуса Publish не зависит.
  • Polling-триггеры (Telegram, Gmail и подобные) — начинают слушать события.
  • Воркфлоу-исполнитель — для триггеров берёт именно опубликованную версию, не текущее состояние редактора.
Главная тонкость
Без Publish триггеры молчат

Частая ошибка новичка: настроил Telegram Trigger, протестировал через Execute workflow — всё пришло, обрадовался. Закрыл редактор. Бот молчит. Потому что Telegram-вебхук и любая боевая активность триггеров включаются только после Publish. Test-режим Execute workflow живёт лишь пока редактор открыт и кнопка нажата.

Version Name и Describe changes — каждая публикация это новая версия

При нажатии Publish n8n показывает диалог с двумя полями:

  • Version Name — обязательное короткое имя версии. Любая строка, по которой ты потом узнаешь эту версию в истории. Хорошие примеры: журнал менеджера добавлен, webhook: новая схема заявки, fix: timezone for cron. Плохие: 123, update, асдф — через неделю ты не поймёшь что в этой версии было.
  • Describe changes (опционально) — что именно поменялось с прошлой версии. Это короткий журнал в свободной форме: «добавил Stretch-ветку ai-классификации жалоб», «починил Switch L2 — было kebab-case, стало snake_case». Заполняй обязательно для значимых правок — себе через месяц спасибо скажешь.

Каждая публикация создаёт новую версию workflow. История версий доступна через Versions (рядом с Editor/Executions) — можешь посмотреть какой код был на каждой версии, откатиться на любую из них одной кнопкой Restore. Это и есть встроенный git-подобный version control для воркфлоу.

Привычка
Маленькая правка → отдельный Publish с осмысленным именем

Кажется заманчивым копить много правок в одной публикации, чтобы не возиться с именами. На практике это плохо: если позже сломается какая-то ветка, и захочется откатиться — придётся откатить всё сразу, теряя другие изменения. Лучше публиковать мелкими шагами: подключил ветку — Publish с именем «ветка orders собрана»; залогировал действие — Publish с именем «orders + лог». Каждая версия = одно атомарное улучшение.

Sub-Workflow тоже публикуют

Воркфлоу, который вызывается из другого через Execute Workflow Trigger, тоже нужно публиковать. Родитель при вызове берёт последнюю опубликованную версию Sub-WF — если ты внёс правки и не нажал Publish, родитель их не увидит. Управляется той же кнопкой Publish.

Типичные ошибки

  • Поправил опубликованный воркфлоу, забыл Publish заново → триггеры исполняют старую версию. После каждой правки — Publish.
  • Дёргаешь Production URL у Unpublished воркфлоу → возвращает 404. Либо публикуй, либо открой редактор, нажми Execute workflow и шли на Test URL.
  • Хочешь временно остановить воркфлоу → нажми Unpublish. Триггеры замолкают, Production URL перестаёт принимать запросы. Чтобы запустить обратно — снова Publish.
4.1
Включи Make Chat Publicly Available в Chat Trigger

Открой ноду Chat Trigger двойным кликом по ней на canvas.

В параметрах включи переключатель Make Chat Publicly Available — он станет зелёным.

После этого нода развернёт дополнительные параметры.

Сверху появится Chat URL — публичный адрес твоего чата.

Ниже будут параметры:

  • Mode со значением Hosted Chat — n8n сам создаёт и хостит страницу чата.
  • Authentication со значением None — чат будет доступен без авторизации.
  • Initial Message(s) — приветственное сообщение, которое пользователь увидит при открытии чата.

В Initial Message(s) замени дефолтный текст на своё приветствие. Например: Привет! Я твой AI-помощник. О чём поговорим?

⚙Публичный чат Chat Trigger — Make Chat Publicly Availableстатья · ~2 мин

Публичный чат Chat Trigger — Make Chat Publicly Available

Тоггл Make Chat Publicly Available находится в Parameters ноды Chat Trigger. Он превращает встроенный чат в отдельную веб-страницу, доступную по ссылке. Без этого тоггла чат остаётся только внутри редактора n8n.

По умолчанию тоггл выключен. После включения появляются четыре дополнительных поля: Chat URL, Mode, Authentication и Initial Message(s).

Зачем это нужно

Тоггл нужен, когда чат должен работать как публичный интерфейс, а не только для теста внутри n8n. Он открывает доступ к воркфлоу через обычный браузер. До публикации workflow ссылка возвращает 404, поэтому тоггл только готовит адрес, но не делает страницу живой.

Как это работает

После включения тоггла в разделе Parameters раскрываются поля:

  • Chat URL — Production-адрес страницы. Работает только после нажатия Publish.
  • Mode — выбор между Hosted Chat и Embedded Chat. Подробности в соседней статье.
  • Authentication — уровень доступа: None, Basic Auth или n8n User Auth.
  • Initial Message(s) — текст первого сообщения бота. По умолчанию стоит стандартное английское приветствие n8n, его меняют на текст своего бота.
Важно
Тоггл не публикует workflow

Включение тоггла только создаёт URL. Чтобы страница стала доступна, нужно нажать Publish в верхней панели.

Типичные ошибки

  • Включил тоггл и сразу открыл Chat URL — получил 404. Нужно нажать Publish, тоггл только готовит адрес.
  • Внёс изменения в workflow после публикации — посетители чата не видят обновлений. После каждой правки требуется повторный Publish.
  • Оставил Authentication = None и передал URL коллегам — любой, у кого есть ссылка, получает доступ к чату. Для закрытых сценариев ставь Basic Auth.
  • Не заменил Initial Message(s) — посетитель видит стандартное английское приветствие n8n вместо текста своего бота.
💬Моды Chat Trigger: Hosted Chat и Embedded Chatстатья · ~2 мин

Два способа показать чат: отдельная страница или виджет

Параметр Mode в ноде Chat Trigger появляется после включения Make Chat Publicly Available. Он решает, как именно пользователи будут открывать чат: через отдельную ссылку или через код на своём сайте.

Hosted Chat отдаёт готовую страницу по адресу из поля Chat URL. Embedded Chat даёт блок кода, который вставляют в HTML своей страницы. Оба режима работают только после нажатия Publish.

Как это работает

Mode находится в секции Parameters ноды Chat Trigger. Доступны два значения:

  • Hosted Chat — n8n сам публикует страницу чата по адресу Chat URL. Пользователь переходит по ссылке и сразу видит интерфейс.
  • Embedded Chat — n8n показывает блок с тегом <script>. Этот код копируют в HTML своей страницы, и чат появляется как виджет.

До публикации воркфлоу любой из адресов или скриптов возвращает 404. После Publish чат становится доступен в выбранном режиме.

Правило одной строкой
Выбор мода определяет, где живёт интерфейс чата

Hosted Chat даёт отдельную страницу, Embedded Chat — только код для вставки на свой сайт. Переключить режим можно в любой момент, но после изменения нужно снова нажать Publish.

Типичные ошибки

  • Включил Mode, скопировал Chat URL или код, но чат отдаёт 404 → не нажал Publish → нажать Publish после любых изменений.
  • Выбрал Hosted Chat, а ждёшь виджет в углу своего сайта → Hosted Chat всегда отдаёт отдельную страницу → переключить на Embedded Chat.
  • Скопировал код встройки, но не можешь вставить его в HTML → Embedded Chat требует доступа к разметке страницы → выбрать Hosted Chat.
  • Изменил Initial Message(s) или другие поля, а в чате старые данные → страница и виджет работают с последней опубликованной версией → нажать Publish заново.
  • Embedded Chat не появляется на сайте → браузер блокирует внешний скрипт по CSP → добавить домен n8n в script-src.
4.2
Нажми кнопку Publish в правом верхнем углу

В правом верхнем углу редактора найди тоггл Publish и нажми его. n8n откроет диалог и попросит назвать версию и кратко описать что в ней — версию назови по делу (v1 или Первая версия), описание дай одной фразой о том, что эта версия умеет (например, Бот-чат с памятью и публичной страницей чата).

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

Теперь скопируй Chat URL из ноды Chat Trigger и открой его в любом браузере — увидишь свою публичную страницу чата с заданным приветствием. Этот же URL можно скинуть в мессенджер или открыть на телефоне.

Всё, воркфлоу собран и опубликован. Можешь потестировать его в чате, а потом выполнить Stretch (задачу со звёздочкой).

🚀Stretch

Сделай бота более «живым».

В параметрах AI Agent найди поле System Message и задай агенту постоянный характер: например, ворчливый библиотекарь, строгий консультант, саркастичный программист или любой другой стиль общения.

После этого попробуй поменять модель и сравни, как изменились ответы агента.

Затем отправь боту больше шести сообщений и спроси, что ты писал в начале диалога. Если агент забудет начало разговора — увеличь память в ноде Memory.

Тест-кейсы

ВходОжидаем
«Привет, меня зовут Алекс, я учусь собирать ботов в n8n.»Бот приветствует Алекса, отвечает в нейтральном тоне, может уточнить, чем помочь.
«Как меня зовут и что я изучаю?» (следующее сообщение в том же чате)Бот воспроизводит имя Алекс и тему n8n из первого сообщения — память работает в рамках сессии Chat Trigger.
«Расскажи, что я говорил три сообщения назад.»Бот воспроизводит содержание из истории, если оно укладывается в Context Window Length (5 пар сообщений).
Обновить страницу или открыть новый чат и задать тот же вопрос про имяАгент не помнит предыдущую сессию — память привязана к Session ID, который зависит от подключённого Chat Trigger.
Помощь
Застрял где-то по ходу? Покажи в учебном чате скрин ноды и текст ошибки — разберёмся.
Написать в чат
Собрал воркфлоу? Сдай на ревью
Это демо — задачу можно прочитать целиком. Свой n8n, сдача на ревью и разбор открываются в аккаунте. Заведи аккаунт — модуль M0 бесплатно.

Можно аналитические cookie?

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