Узел — это состояние, а не скрипт
Когда агент входит в узел, Агентика настраивает LLM специально для этого узла:- Prompt узла, объединенный с prompt global node, становится system prompt и говорит LLM, что здесь нужно сказать и сделать.
- Исходящие ребра узла становятся единственными доступными выходами. LLM не может перепрыгнуть куда-то еще.
Conditions — это то, как LLM выбирает выход
У каждого исходящего ребра естьcondition: описание на естественном языке, когда должен произойти переход. Пока агент говорит внутри узла, LLM постоянно сопоставляет live-разговор с condition каждого исходящего ребра. Когда модель решает, что condition выполнен, она вызывает это ребро, и Агентика переключает агента на целевой узел.
Под капотом каждое исходящее ребро предлагается LLM как вызываемая function (tool).
condition ребра становится описанием функции — текстом, по которому модель решает, стоит ли ее “вызвать”. Поэтому четкое и конкретное condition так важно: оно полностью определяет routing-решение.Что происходит во время перехода
Когда ребро срабатывает, Агентика выполняет три действия по порядку, прежде чем следующий узел заговорит:- Извлечение переменных — если в узле, из которого агент уходит, включено извлечение данных, настроенные переменные сначала извлекаются из разговора.
- Transition speech — если у ребра есть необязательный
transition_speech, агент произносит его или проигрывает запись перед переходом. - Активация целевого узла — целевой узел становится текущим: загружаются его prompt и его исходящие ребра, затем цикл повторяется.
Почему это так устроено
Разговоры недетерминированы. Нельзя жестко прописать “после второго ответа перейти к узлу Y”: реальный абонент может ответить не по порядку, передумать или уйти от сценария. Решение о том, когда переходить дальше, должно исходить из live-разговора, а LLM уже понимает этот разговор. Поэтому естественный способ — дать модели каждый возможный выход как функцию, которую можно вызвать. Граф — это guardrail. В каждый момент LLM доступны только исходящие ребра текущего узла. Она может пойти только туда, куда позволяет граф, поэтому структура ограничивает свободу модели и удерживает звонок в спроектированном сценарии. У конечных узлов просто нет выходов. End Call node не регистрирует исходящие переходы, поэтому у LLM нет “двери”, через которую можно выйти. Единственный результат — завершить звонок. Завершение моделируется отсутствием ребер, а не специальной runtime-командой. Global node никогда не бывает destination. У него нет ребер, и вы никогда не переходите в него. Вместо этого его prompt объединяется с каждым узлом, что контролируется полемadd_global_prompt. Поэтому в нем хранятся общие инструкции: персона, тон и guardrails.
Как писать условия, которые надежно маршрутизируют
Посколькуcondition — это то, над чем рассуждает LLM, формулировка напрямую влияет на точность routing:
- Пишите полный предикат, а не тег. Используйте
"The caller confirmed they want to book a demo", а не"interested". Модели нужно достаточно информации, чтобы сопоставить условие с live-разговором. - Делайте ветки взаимоисключающими. Если два исходящих condition могут быть истинны одновременно, агент может выбрать не то ребро. Дайте каждому выходу отдельный, непересекающийся trigger.
- Держите labels короткими и различимыми.
label— краткий идентификатор в call logs и builder. Делайте labels короткими и уникальными внутри узла. Логика маршрутизации живет вcondition, а не вlabel. - Одна задача на узел. Узел с двумя-тремя ясными выходами маршрутизирует намного лучше, чем узел, который пытается ветвиться в десяток сторон. Объединяйте там, где можно.
См. также
- Workflows и агенты — обзор модели графа
- Workflow Definition Schema — полный справочник полей узлов и ребер
- Global Node — инструкции, общие для всех узлов
- End Call Node — как завершаются звонки