Skip to main content

Цели разговора

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

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

Секция «Цели разговора» с двумя целями
Проблема, которую это решает, звучит так: агент помнит разговор не целиком, а последними репликами. На длинном звонке ранняя реплика, где человек уже назвал имя, из этой памяти выпадает — и агент спрашивает второй раз. Просьба «не переспрашивай» в промпте тут не помогает: он не забывает правило, он забывает факт. Цель — это факт разговора, выраженный условием по переменным: {{confirm_text}} != "". Отметку ставит код, а не модель: модель состояние целей только читает и никогда в него не пишет. Отсюда свойства, которых не даёт промпт:
  • закрытую цель агент не переспрашивает — сводка выполненного уходит в хвост промпта и обновляется на каждом ходу, поэтому из памяти не выпадает;
  • цель можно сделать отзываемой — клиент передумал, условие отмены сработало, цель снова открыта;
  • предусловия задают порядок: согласие на SMS не имеет смысла до подтверждения визита;
  • в формулах переходов доступен предикат goals_completed() — «всё главное получено, можно прощаться».
Первое действие в секции — галочка «Отслеживать цели разговора». Пока она снята или список пуст, механизм выключен целиком и на поведение агента не влияет никак.
Две вещи, которые часто спрашивают. Первая: сводка не попадает в расшифровку разговора — в записи звонка вы увидите только реальные реплики. Вторая: дополнительных обращений к языковой модели механизм не делает, на задержку и стоимость звонка он не влияет. И ещё: дописывать сводку руками в промпты узлов не нужно — она подмешивается сама, а рукописная копия быстро разъедется с настройками.

Как задаются условия

Условие выполнения и Условие отмены собираются тем же конструктором условий, что работает на переходах: выбираете переменную, операцию и значение, а карточки складываются в выражение. Правка текстом осталась — но теперь это выбор автора, а не единственный способ. Отдельной карточкой добавляется проверка «Узел пройден»: узел выбирается из списка. Это единственное значение в условии цели, которое автору негде подсмотреть, — поэтому его и вынесли в отдельный элемент. Формулировка цели — это утверждение о факте («личность подтверждена»), а не поручение («подтвердить личность»): текст уходит агенту, и текст-задание он начинает зачитывать вслух — «так, мне ещё нужно уточнить причину неплатежа». Формулировки стоит вычитывать на тестовых звонках с тем же вниманием, с каким вы вычитываете реплики агента.

Шпаргалка по условиям

Регистр в сравнениях не учитывается: "Да" и "да" — одно и то же. Выражения со скобками и со смесью AND и OR правятся только текстом — карточки такую форму не показывают.

Откуда берутся значения полей

Это главный практический вопрос настройки. Источников три:
  1. Извлечение из разговора — то, что агент выясняет у человека: имя, дата, причина, ответ на вопрос. В свободном режиме извлечение идёт на каждом ходу, в жёстком сценарии — только на шагах, где оно настроено.
  2. Результаты обращений к вашим системам — у каждого запроса автоматически есть {{имя}}_success, {{имя}}_status, {{имя}}_error плюс поля, которые вы назначили из ответа. Полезный побочный эффект: если тот же запрос повторить и он вернёт неуспех, цель сама перестанет быть закрытой — отдельное условие отмены для этого не нужно.
  3. Данные, известные до звонка — переменные звонка и кампании: имя из файла контактов, сумма долга, номер договора.
Задержка ровно в одну реплику. Состояние целей пересчитывается один раз в конце каждого хода, поэтому цель, закрытая ответом на текущей реплике, попадает в сводку и в признак goals_completed() начиная со следующего хода. Это нормально, а не сбой.
Грабли: цель по переменной, которую никто не заполняетЕсли переменная условия не заполняется ни одним узлом, цель не закроется никогда — валидация об этом предупреждает, но не запрещает: переменная может законно приходить из кампании или из API. Проверьте, что она действительно приходит.
Цель с неразбираемым условием черновик сохранит — но заблокирует публикацию агента и тестовый звонок. То есть недописанное условие не мешает отложить работу до завтра, но и незамеченным на прод не уедет.

Что видно в истории звонка

В хронологии появляются три события: Цель закрыта (видно, на какой реплике), Отметка цели снята (с причиной — сработало условие отмены, условие выполнения перестало быть истинным или отозвано предусловие) и Ошибка условия цели. Если условие сломалось уже во время звонка — например, переменную переименовали, — звонок не прерывается: цель считается незакрытой, предупреждение пишется один раз, разговор идёт нормально.

Признак «всё выяснено» ≠ успешность звонка

Признак goals_completed() поднимается, когда закрыты все цели, отмеченные обязательными — необязательные его не удерживают. Звонок при этом не завершается сам: разговор редко заканчивается на последней галочке, человек ещё прощается и переспрашивает срок. Куда вести признак, решаете вы — в блок прощания, к переводу на оператора, к финальному подтверждению. Оценка успешности звонка из пост-аналитики считается независимо и означает другое: «всё запланированное выяснено» против «звонок успешен по вашему критерию». В записи видны оба.

Чего цели не делают

  • Не работают у агентов на моделях «речь-в-речь» (realtime) — такие агенты не заполняют переменные по ходу разговора, а без них проверять нечего. Галочку включить можно, эффекта не будет.
  • Не заменяют обязательные раскрытия. Уведомление о записи, идентификация до обсуждения долга — это не цели: цель подсказывает агенту, а подсказку можно проигнорировать. Там, где произнести что-то обязательно, нужен жёсткий маршрут в сценарии.
  • Не навязывают порядок — только предусловия, и недоступная цель агенту не показывается вообще, чтобы он не поднял заблокированную тему раньше времени. При этом ответ, данный заранее, не теряется: значение сохранится, и цель закроется в момент выполнения предусловия.
  • В жёстком сценарии цель на переменную, которую сценарий нигде не заполняет, не закроется — у свободного режима такого ограничения нет.
  • Цели живут на агенте и версионируются вместе с ним.
Полная справка по полям цели и по блокирующим проверкам — на странице Цели разговора.