Nodul LogoNodul

Узел ИИ-агент

![CleanShot 2025-05-16 at 18.38.18.png](./ cleanshot_20250516_at_18.38.18.png)

ИИ-агент — это компонент платформы Nodul, предназначенный для построения интеллектуальных сценариев на базе больших языковых моделей (LLM). Он позволяет интегрировать внешние функции, вести контекстные диалоги и выполнять последовательные действия на основе пользовательского ввода.

Назначение

ИИ-агент используется для:

  • генерации ответов на пользовательские запросы
  • вызова других узлов в сценарии как функций
  • работы с кратковременной памятью в рамках сессии
  • получения структурированных JSON-ответов
  • выполнения сценариев с ограниченным числом итераций

Интерфейс ИИ-агента

brave_fvEXfL38jp.png

Основные поля

ПолеОписание
ModelНазвание используемой LLM-модели (например, openai/gpt-4.1) определяет качество и стоимость выполнения.
Session IDИдентификатор для загрузки и разделения истории диалога. Если указан, агент включит соответствующую историю диалога в контекст. Если пуст или не указан, каждый запрос будет обрабатываться как новая сессия без истории. Например, это может быть ID чата или ID пользователя для различения разных потоков диалога.
User PromptОсновной запрос пользователя. Поддерживает интерполяцию переменных.
System MessageИнструкция для языковой модели. Управляет поведением агента (тон, стиль, ограничения и т.д.).

Дополнительные настройки

Context Window LengthУказывает количество последних пар сообщений (пользователь и ассистент), которые будут включены в контекстное окно, передаваемое LLM. Увеличение этого значения позволяет модели учитывать более длинную историю диалога, что может улучшить связность, но также может потреблять больше токенов и влиять на производительность
Max IterationsОпределяет верхний предел вызовов инструментов, разрешённых для LLM-агента в одном процессе рассуждения. Если этот порог достигнут, агент прекратит выполнение и ответит сообщением о том, что был остановлен из-за достижения максимального числа итераций.
TemperatureТемпература сэмплирования, от 0 до 2. Более высокие значения (например, 0.8) делают вывод более случайным, тогда как более низкие значения (например, 0.2) делают его более сфокусированным и детерминированным.
Max TokensВерхняя граница количества токенов, которые могут быть сгенерированы для завершения
Structured output (переключатель)При включении LLM будет вынужден отвечать в формате JSON. Вы должны определить ожидаемую структуру JSON и правила форматирования в промпте или в «Output JSON Schema»
Output JSON SchemaПри указании эта JSON Schema определяет точную структуру, типы и ограничения ожидаемого JSON-вывода от LLM. Модель будет направляться на строгое следование этой схеме при генерации. Пример: { "type": "object", "properties": { "output": { "type": "string", "description": "Provide output here" } } }
Quick Preview SchemaЭто поле позволяет форматировать данные ответа для удобного чтения. Определите пары ключ-путь в JSON, где ключ — это заголовок, а значение — путь к данным

Чтобы изучить все доступные модели, их названия, цены и описания, вы можете использовать узел List Models. Он возвращает структурированный список моделей, поддерживаемых узлом ИИ-агент.

brave_xNNZGPqEGq.png


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


ИИ-агент реализует концепцию Function Calling (как определено OpenAI) или Tool Call. При запуске он формирует стандартный чат-запрос с ролями (system, user) и списком доступных инструментов на основе подключённых узлов.

Запрос включает:

brave_9uh4VMBrnf.png

  • User Prompt (1) — запрос пользователя (role: user),

  • System Message (2) — системное сообщение (role: system),

  • Метаданные инструмента — каждый подключённый узел должен предоставить:

    brave_oShdIMhDhh.png

    • имя (3) (берётся из заголовка узла),
    • описание (4) (из поля Tool Description),
    • список аргументов (5), определённых через fromAIAgent() в полях ввода.

Пример:

{{fromAIAgent("Email Body"; "Включите тело письма как обычный текст или HTML. Если HTML, убедитесь, что свойство «Body Type» установлено в html")}}

Каждый такой узел рассматривается как вызываемая функция с именем, аргументами и описанием. Если модель решит вызвать одну из функций, Nodul выполнит соответствующий узел и вернёт результат ИИ-агенту.

Модель сама решает, какие инструменты вызывать, в зависимости от смысла пользовательского запроса. Вы можете подключить несколько инструментов — только релевантные будут запущены в зависимости от контекста.

AI Chat

brave_sIdzBuBDiw.png

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


Подключение инструментов к агенту

brave_ZlaQrPlTp8.png

Чтобы ИИ-агент использовал другие блоки сценария, они должны быть визуально подключены снизу через интерфейс конструктора.

Есть два способа сделать это:

  • Перетащите нужный узел (например, HTTP Request, Telegram, Search и т.д.) и подключите его к нижнему коннектору узла ИИ-агента.
  • Или нажмите на коннектор ИИ-агента и вручную свяжите его с существующим узлом.

После подключения связанный узел становится доступным как вызываемый инструмент для агента.


Передача параметров в подключённые инструменты

brave_xiqvZfU4oX.png

Чтобы передать данные от ИИ-агента в подключённый узел, используйте оператор fromAIAgent(). Этот оператор действует как плейсхолдер для динамического ввода — агент автоматически подставит в него релевантные значения во время выполнения.

Вы можете разместить {{fromAIAgent("parameter_name"; "parameter description")}} внутри любого поля ввода подключённого узла (например, Request Body, Prompt, Text и т.д.).

Это выражение определяет ожидаемый аргумент для инструмента:

  • "parameter_name" — внутреннее имя параметра
  • "parameter description" — показывается модели и используется в схеме функции

Формат:

{{fromAIAgent("parameter_name"; "description")}}

Пример:

brave_h72MlkiWPY.png

{{fromAIAgent("Email Body"; "Включите тело письма как обычный текст")}}

Это зарегистрирует узел как доступную функцию с:

  • её именем (берётся из заголовка узла),
  • описанием (берётся из поля Tool Description),
  • списком параметров, определённых через выражения fromAIAgent().

Каждый узел должен иметь уникальное имя. Если имя отсутствует, выполнение завершится ошибкой.


Пример: Прогноз погоды (без авторизации)

brave_dhJzbkPo2S.png

Посмотрим, как работает ИИ-агент на примере запроса прогноза погоды.

  1. Поместите ИИ-агент на рабочую область.

  2. В поле System Message напишите:

    Ты ассистент, который может получать погоду. Используй соответствующий инструмент.
  3. Добавьте узел HTTP Request ниже.

  4. Назовите узел, например, Weather forecast

  5. Установите метод: GET

  6. В поле URL вставьте:

    https://wttr.in/{{fromAIAgent("city"; "Название города для прогноза погоды")}}?format=3
  7. Запустите ИИ-агент с промптом:

    Какая погода в Берлине?

В результате:

  • ИИ-агент получает запрос пользователя;
  • анализирует, что нужен прогноз погоды;
  • находит узел с именем weather_forecast, который использует fromAIAgent с параметром city;
  • подставляет значение «Берлин» и выполняет HTTP-запрос;
  • получает краткий прогноз и отправляет его обратно пользователю.

brave_ahtqYMQUqg.png


Пример: Гибкий Telegram-чатбот

ИИ-агент также хорошо работает в формате чатбота. Вы можете подключить несколько узлов и позволить модели решать, какой использовать.

Например, вот базовый Telegram-чатбот:

brave_kclShZkQHU.png

Триггер Telegram подключён к ИИ-агенту, а от ИИ-агента к:

  • Web Search (Perplexity);
  • Create Note (Notion);
  • Current Weather

В этом сценарии:

  • Если пользователь отправляет обычное сообщение, агент просто отвечает текстом, не вызывая инструменты.

brave_68lN7zAoQd.png

  • Если пользователь просит создать заметку, он использует узел Create Note.

brave_cua2kt18nf.png

  • Если пользователь просит сделать что-то сложное, например, получить погоду и найти информацию в интернете, два инструмента — Web Search и Current Weather — будут запущены последовательно, и их результаты будут включены в ответ.

brave_lL4T52yY0g.png

Каждый узел регистрируется с fromAIAgent() для передачи параметров. Модель понимает, какой инструмент использовать — и игнорирует остальные.

Это делает чатбота динамичным и модульным.


Мультиагентские сценарии

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

brave_TStf2Ey04h.png

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

Эти паттерны особенно полезны для:

  • многошагового рассуждения;
  • оркестрации инструментов;
  • ИИ-пайплайнов, требующих чёткого разделения логики и внутренних циклов обратной связи.

📘 Для более детальных пошаговых примеров того, как ИИ-агенты ведут себя и координируются в различных сценариях, смотрите полную статью: