← AI process automation with n8n
02 / 07 · 45 min

Connecting LLMs: the AI Agent node

n8n cluster nodes: AI Agent, chat models, memory, and tools; system message, $fromAI(), and structured output for predictable answers.

Lesson content is currently available in Russian.

What you will learn

  • →Выбирать между Basic LLM Chain и AI Agent под задачу.
  • →Настраивать system message, память по sessionId и параметры модели.
  • →Подключать инструменты с $fromAI() и получать предсказуемый JSON через Structured Output Parser.

Cluster-ноды: AI Agent и его sub-ноды

В разделе Advanced AI n8n использует особый вид нод — cluster-ноды: корневая нода плюс подключаемые к ней sub-ноды. AI Agent — корневая: сам по себе он не умеет ничего, пока к нему не подключены Chat Model (например, OpenAI Chat Model, Anthropic Chat Model, Google Gemini Chat Model или локальная Ollama Chat Model), опционально Memory и Tools. Credentials модели создаются один раз и переиспользуются всеми workflow.

Важно отличать AI Agent от Basic LLM Chain. Chain — один вызов модели: промпт вошёл, текст вышел, никаких решений. Agent работает циклом: получает задачу, сам решает, нужен ли инструмент, вызывает его, смотрит на результат и повторяет, пока не соберёт ответ. За гибкость платишь токенами и непредсказуемостью, поэтому правило выбора простое: детерминированная трансформация текста (перевести, суммаризовать, классифицировать) — Basic LLM Chain; задача «сам разберись, какие данные достать» — AI Agent.

Для быстрого старта есть Chat Trigger («When chat message received»): он открывает встроенное чат-окно для теста и отдаёт в workflow поля chatInput (текст пользователя) и sessionId (идентификатор диалога), которые агент подхватывает автоматически.

System message, промпт и память

По умолчанию агент берёт текст задачи из {{ $json.chatInput }} — режим Take from previous node automatically. В API-сценариях переключите Prompt на Define below и соберите его expression-ами из данных workflow: например, ={{ 'Классифицируй обращение: ' + $json.body.message }}.

System message (в Options агента) — место для роли, ограничений и тона. Пишите его как инструкцию сотруднику:

Ты — ассистент поддержки Vorcl. Отвечай кратко и на русском.
Про статус заказа отвечай ТОЛЬКО по данным инструмента get_order.
Если данных нет — скажи об этом прямо и предложи оператора.

Память по умолчанию отсутствует: каждый запуск — чистый лист. Подключите Simple Memory (window buffer): она хранит последние N обменов по ключу sessionId. Из Chat Trigger ключ приходит сам; в API-сценарии передавайте свой — например, {{ $json.body.userId }}, иначе все пользователи окажутся в одном диалоге. Окно в 10-20 сообщений покрывает большинство сценариев; больше — дороже и медленнее.

Параметры модели настраиваются в sub-ноде Chat Model: temperature ближе к 0 для фактических задач и классификации, выше — для генерации идей; maxTokens ограничивает длину ответа и защищает бюджет. Каждый промежуточный шаг агента виден в execution — открывайте лог агента и смотрите, что модель реально получила на вход.

Инструменты и $fromAI(): агент вызывает мир

Инструменты — то, что превращает модель в агента. К AI Agent подключаются: HTTP Request Tool (вызов любого API), Code Tool (JavaScript-функция), Calculator, Call n8n Workflow Tool (запуск под-workflow — самый мощный вариант: любая логика n8n становится инструментом), Vector Store Tool (поиск по базе знаний, урок 4).

Модель решает, когда вызвать инструмент, ТОЛЬКО по его названию и описанию. Поэтому description — не формальность, а мини-документация: что инструмент возвращает, когда его использовать, какие параметры обязательны.

Параметры инструмента заполняются выражением $fromAI() — модель сама подставит значение из контекста диалога:

{
  "toolDescription": "Возвращает статус заказа по его номеру. Используй, когда клиент спрашивает про доставку.",
  "url": "https://api.example.com/orders/{{ $fromAI('orderId', 'Номер заказа из сообщения клиента', 'string') }}"
}

В execution агента видны intermediate steps: какие инструменты вызваны, с какими аргументами и что вернули — первое место для отладки жалобы «агент не пользуется инструментом». Обычно причина в пустом или расплывчатом description.

Антипаттерн: агент с пятнадцатью инструментами и описаниями вида «инструмент 1». Модель начинает гадать, вызовы дорожают, качество падает. Три-пять хорошо описанных инструментов почти всегда бьют пятнадцать безымянных.

Structured output и место агента в workflow

Пока агент болтает в чате, свободный текст уместен. Но как только ответ поедет дальше по workflow — в IF, Switch, запись в CRM — нужен гарантированный формат. Подключите к агенту Structured Output Parser и включите опцию Require Specific Output Format. Парсер получает JSON-схему:

{
  "type": "object",
  "properties": {
    "intent": { "type": "string", "enum": ["question", "complaint", "order_status"] },
    "urgency": { "type": "number" }
  },
  "required": ["intent", "urgency"]
}

n8n добавит к промпту инструкции формата; для упрямых моделей есть Auto-fixing Output Parser — обёртка, которая при невалидном ответе просит модель исправить формат повторным вызовом.

Главный архитектурный паттерн урока: агент — деталь внутри детерминированного каркаса, а не весь workflow. Вход валидируется ДО агента (IF/Code: есть ли обязательные поля), выход проверяется ПОСЛЕ (IF: intent входит в допустимый список), side effects — записи в БД, письма — делают обычные ноды. Так агента можно тестировать изолированно, а стоимость предсказуема: один вызов модели на item.

Антипаттерн — «агент делает всё»: сам пишет в CRM, сам шлёт письма через инструменты без подтверждения. Красиво на демо, неуправляемо в production.

Practice

Чат-агент с одним инструментом

Соберите Chat Trigger → AI Agent с chat-моделью, Simple Memory и одним HTTP Request Tool к публичному API (например, прогноз погоды или курсы валют). Напишите system message с ролью и правилами и осмысленный description инструмента.

Deliverable

JSON workflow и скриншот диалога, где по логу агента видно вызов инструмента и его аргументы из $fromAI().

Checkpoint

Объясните, как ваш агент решает, когда вызвать инструмент, и как вы гарантируете формат его ответа.

  • ✓ Названы роль system message и описаний инструментов в выборе действия агентом.
  • ✓ Показана работа памяти: два связанных вопроса в одной сессии.
  • ✓ Продемонстрирован structured output или обосновано, почему в этом сценарии достаточно свободного текста.

Check yourself

В чём ключевая разница между AI Agent и Basic LLM Chain?

01В чём ключевая разница между AI Agent и Basic LLM Chain?

Откуда AI Agent по умолчанию берёт текст запроса при работе с Chat Trigger?

02Откуда AI Agent по умолчанию берёт текст запроса при работе с Chat Trigger?

Что делает выражение $fromAI('city', 'Город для прогноза', 'string') в параметре инструмента?

03Что делает выражение $fromAI('city', 'Город для прогноза', 'string') в параметре инструмента?

Зачем подключать Structured Output Parser к агенту?

04Зачем подключать Structured Output Parser к агенту?

Почему description инструмента так важен?

05Почему description инструмента так важен?

Sources

Connecting LLMs: the AI Agent node · AI process automation with n8n · VORCL