Цели разговора
Цель модуля: задать машинно-проверяемые цели, чтобы агент не переспрашивал то, что уже получил.

Цели разговора. Две цели учебного агента: «визит подтверждён или перенесён» (обязательная) и «согласие на SMS-напоминание» (отзываемая, с предусловием).
Показать панель целиком
Показать панель целиком

{{confirm_text}} != "". Отметку ставит код, а не модель: модель состояние целей только читает и никогда в него не пишет. Отсюда свойства, которых не даёт промпт:
- закрытую цель агент не переспрашивает — сводка выполненного уходит в хвост промпта и обновляется на каждом ходу, поэтому из памяти не выпадает;
- цель можно сделать отзываемой — клиент передумал, условие отмены сработало, цель снова открыта;
- предусловия задают порядок: согласие на SMS не имеет смысла до подтверждения визита;
- в формулах переходов доступен предикат
goals_completed()— «всё главное получено, можно прощаться».
Две вещи, которые часто спрашивают. Первая: сводка не попадает в расшифровку разговора — в записи звонка вы увидите только реальные реплики. Вторая: дополнительных обращений к языковой модели механизм не делает, на задержку и стоимость звонка он не влияет. И ещё: дописывать сводку руками в промпты узлов не нужно — она подмешивается сама, а рукописная копия быстро разъедется с настройками.
Как задаются условия
Условие выполнения и Условие отмены собираются тем же конструктором условий, что работает на переходах: выбираете переменную, операцию и значение, а карточки складываются в выражение. Правка текстом осталась — но теперь это выбор автора, а не единственный способ. Отдельной карточкой добавляется проверка «Узел пройден»: узел выбирается из списка. Это единственное значение в условии цели, которое автору негде подсмотреть, — поэтому его и вынесли в отдельный элемент. Формулировка цели — это утверждение о факте («личность подтверждена»), а не поручение («подтвердить личность»): текст уходит агенту, и текст-задание он начинает зачитывать вслух — «так, мне ещё нужно уточнить причину неплатежа». Формулировки стоит вычитывать на тестовых звонках с тем же вниманием, с каким вы вычитываете реплики агента.Шпаргалка по условиям
Регистр в сравнениях не учитывается:
"Да" и "да" — одно и то же. Выражения со скобками и со смесью AND и OR правятся только текстом — карточки такую форму не показывают.
Откуда берутся значения полей
Это главный практический вопрос настройки. Источников три:- Извлечение из разговора — то, что агент выясняет у человека: имя, дата, причина, ответ на вопрос. В свободном режиме извлечение идёт на каждом ходу, в жёстком сценарии — только на шагах, где оно настроено.
- Результаты обращений к вашим системам — у каждого запроса автоматически есть
{{имя}}_success,{{имя}}_status,{{имя}}_errorплюс поля, которые вы назначили из ответа. Полезный побочный эффект: если тот же запрос повторить и он вернёт неуспех, цель сама перестанет быть закрытой — отдельное условие отмены для этого не нужно. - Данные, известные до звонка — переменные звонка и кампании: имя из файла контактов, сумма долга, номер договора.
Задержка ровно в одну реплику. Состояние целей пересчитывается один раз в конце каждого хода, поэтому цель, закрытая ответом на текущей реплике, попадает в сводку и в признак
goals_completed() начиная со следующего хода. Это нормально, а не сбой.Цель с неразбираемым условием черновик сохранит — но заблокирует публикацию агента и тестовый звонок. То есть недописанное условие не мешает отложить работу до завтра, но и незамеченным на прод не уедет.
Что видно в истории звонка
В хронологии появляются три события: Цель закрыта (видно, на какой реплике), Отметка цели снята (с причиной — сработало условие отмены, условие выполнения перестало быть истинным или отозвано предусловие) и Ошибка условия цели. Если условие сломалось уже во время звонка — например, переменную переименовали, — звонок не прерывается: цель считается незакрытой, предупреждение пишется один раз, разговор идёт нормально.Признак «всё выяснено» ≠ успешность звонка
Признакgoals_completed() поднимается, когда закрыты все цели, отмеченные обязательными — необязательные его не удерживают. Звонок при этом не завершается сам: разговор редко заканчивается на последней галочке, человек ещё прощается и переспрашивает срок. Куда вести признак, решаете вы — в блок прощания, к переводу на оператора, к финальному подтверждению.
Оценка успешности звонка из пост-аналитики считается независимо и означает другое: «всё запланированное выяснено» против «звонок успешен по вашему критерию». В записи видны оба.
Чего цели не делают
- Не работают у агентов на моделях «речь-в-речь» (realtime) — такие агенты не заполняют переменные по ходу разговора, а без них проверять нечего. Галочку включить можно, эффекта не будет.
- Не заменяют обязательные раскрытия. Уведомление о записи, идентификация до обсуждения долга — это не цели: цель подсказывает агенту, а подсказку можно проигнорировать. Там, где произнести что-то обязательно, нужен жёсткий маршрут в сценарии.
- Не навязывают порядок — только предусловия, и недоступная цель агенту не показывается вообще, чтобы он не поднял заблокированную тему раньше времени. При этом ответ, данный заранее, не теряется: значение сохранится, и цель закроется в момент выполнения предусловия.
- В жёстком сценарии цель на переменную, которую сценарий нигде не заполняет, не закроется — у свободного режима такого ограничения нет.
- Цели живут на агенте и версионируются вместе с ним.