Переменные и память
Граф исполняется один раз на сообщение и сам по себе ничего не помнит. Состояние живёт в двух разных механизмах: переменные, которыми управляете вы, и память, которую наполняет диалог с моделью.
Переменные
Переменную объявляет нода var: имя, тип (string, integer, float,
boolean, json, csv, dataframe), область видимости и значение по умолчанию. Сама
нода только читает; запись делает var_set — на порт Input
приходит значение, на порт Var — ссылка на объявляющую ноду.
- Исполнение + данные
- Данные
При записи значение приводится к объявленному типу: строка "1" в переменной типа
integer станет числом, и следующее сравнение не сломается. Неприводимое значение
записывается как есть.
Три области видимости
| Область | Сколько живёт | Когда выбирать |
|---|---|---|
session |
Один запуск воркфлоу | Счётчики циклов, промежуточные значения между ветками одного хода. |
thread |
Между сообщениями, хранится в базе | Состояние диалога: язык клиента, номер заявки, стадия сценария. |
call |
Не хранится вовсе | Значение по умолчанию при каждом чтении — когда нужна константа, а не память. |
Ключ для thread — чат-тред: сессия веб-чата, чат Telegram. У запуска без чата
(ручной запуск, вебхук без сессии) тредом становится сам запуск, поэтому thread в нём
ведёт себя как session.
Чтение в шаблонах
{{ variables.<имя> }} видит переменные области session и служебный loop_index внутри
while_loop. Переменная области thread в это пространство имён
не попадает — читайте её через выход объявляющей ноды: {{ nodes.<id var-ноды>.output }}.
Память диалога
Память хранит историю сообщений и подключается к ai_agent ребром
link_memory. Три ноды отличаются тем, что происходит с историей по мере роста:
- buffer_memory — вся история целиком;
- window_memory — только последние N сообщений
(
window_size, по умолчанию 10); - summary_memory — старые сообщения сжимаются в резюме через
модель: по умолчанию сжатие включается после 20 сообщений, последние 6 остаются
дословно. Модель берётся у родительского агента либо задаётся своим ребром
link_llm.
Область видимости у всех трёх та же тройка thread / session / call, по умолчанию
thread — то есть история переживает сообщения одного чата. Ключ — пара «нода + тред»,
поэтому две ноды памяти в одном графе хранят разные истории.
У llm_response памяти нет: ему нужна либо собственная опция истории чата, либо нода chat_history.
Память агента
agent_memory — это не история, а долгоживущий словарь
«ключ — значение», который агент ведёт сам. Нода подключается ребром link_extension, и
модель получает инструменты записи, удаления и очистки (expose_tools, набор задаётся
полем enabled_tools). Начальное состояние задаётся в конфигурации.
Отличие от переменных — в том, кто пишет:
| Переменные | Память агента | |
|---|---|---|
| Кто записывает | Ноды графа — вы решаете, когда | Модель, вызовом инструмента |
| Кто читает | Шаблоны и ноды | Модель, в своём контексте |
| Форма | Одно типизированное значение на имя | Словарь ключ — значение |
Если значение нужно вам в графе (условие, фильтр, поле запроса) — берите переменную. Если его должна помнить модель между ходами — память агента.
Где посмотреть и очистить
Откройте запуск, нажмите на ноду и перейдите на вкладку «Состояние». Для нод памяти там
видна история сообщений, для памяти агента — словарь; рядом указана область видимости и
есть действие «Очистить состояние». Вкладка появляется только у нод, которые состояние
отдают; значение thread-переменной так посмотреть нельзя — выведите его нодой в граф.
Инспектор ноды
agent_memory_1
Область: thread
| Ключ | Значение |
|---|---|
| client_name | Мария |
| order_id | A-1043 |
| stage | waiting_payment |