Узел — это состояние, а не скрипт
Когда агент входит в узел, Агентика настраивает LLM специально для этого узла:- Промпт узла, объединенный с промптом глобального узла, становится системным промптом и говорит LLM, что здесь нужно сказать и сделать.
- Исходящие ребра узла становятся единственными доступными выходами. LLM не может перепрыгнуть куда-то еще.
Условия — то, как LLM выбирает выход
У каждого исходящего ребра естьcondition: описание на естественном языке, когда должен произойти переход. Пока агент говорит внутри узла, LLM постоянно сопоставляет живой разговор с условием каждого исходящего ребра. Когда модель решает, что условие выполнено, она вызывает это ребро, и Агентика переключает агента на целевой узел.
Под капотом каждое исходящее ребро предлагается LLM как вызываемая функция (инструмент).
condition ребра становится описанием функции — текстом, по которому модель решает, стоит ли ее «вызвать». Поэтому четкое и конкретное условие так важно: оно полностью определяет решение о маршрутизации.Что происходит во время перехода
Когда ребро срабатывает, Агентика выполняет три действия по порядку, прежде чем следующий узел заговорит:- Извлечение переменных — если в узле, из которого агент уходит, включено извлечение данных, настроенные переменные сначала извлекаются из разговора.
- Фраза перехода — если у ребра есть необязательный
transition_speech, агент произносит его или проигрывает запись перед переходом. - Активация целевого узла — целевой узел становится текущим: загружаются его промпт и его исходящие ребра, затем цикл повторяется.
Почему это так устроено
Разговоры недетерминированы. Нельзя жестко прописать «после второго ответа перейти к узлу Y»: реальный абонент может ответить не по порядку, передумать или уйти от сценария. Решение о том, когда переходить дальше, должно исходить из живого разговора, а LLM уже понимает этот разговор. Поэтому естественный способ — дать модели каждый возможный выход как функцию, которую можно вызвать. Граф — это защитное правило. В каждый момент LLM доступны только исходящие ребра текущего узла. Она может пойти только туда, куда позволяет граф, поэтому структура ограничивает свободу модели и удерживает звонок в спроектированном сценарии. У конечных узлов просто нет выходов. Узел «Конец звонка» не регистрирует исходящие переходы, поэтому у LLM нет «двери», через которую можно выйти. Единственный результат — завершить звонок. Завершение моделируется отсутствием ребер, а не специальной командой времени выполнения. Глобальный узел никогда не бывает целью. У него нет ребер, и вы никогда не переходите в него. Вместо этого его промпт объединяется с каждым узлом, что контролируется полемadd_global_prompt. Поэтому в нем хранятся общие инструкции: персона, тон и защитные правила.
Как писать условия, которые надежно маршрутизируют
Посколькуcondition — это то, над чем рассуждает LLM, формулировка напрямую влияет на точность маршрутизации:
- Пишите полный предикат, а не тег. Используйте
"Абонент подтвердил, что хочет записаться на демо", а не"заинтересован". Модели нужно достаточно информации, чтобы сопоставить условие с живым разговором. - Делайте ветки взаимоисключающими. Если два исходящих условия могут быть истинны одновременно, агент может выбрать не то ребро. Дайте каждому выходу отдельный, непересекающийся триггер.
- Держите метки короткими и различимыми.
label— краткий идентификатор в журналах звонков и конструкторе. Делайте метки короткими и уникальными внутри узла. Логика маршрутизации живет вcondition, а не вlabel. - Одна задача на узел. Узел с двумя-тремя ясными выходами маршрутизирует намного лучше, чем узел, который пытается ветвиться в десяток сторон. Объединяйте там, где можно.
См. также
- Воркфлоу и агенты — обзор модели графа
- Схема определения воркфлоу — полный справочник полей узлов и ребер
- Глобальный узел — инструкции, общие для всех узлов
- Узел «Конец звонка» — как завершаются звонки