Руководство арендатора

Построить сюжет

Как превратить агента в многошаговый процесс с состоянием — узлы, условия переходов, измерения, обратные вызовы третьих сторон, версионирование и миграция пользователей «в пути».

Для чего нужен сюжет

Обычный агент хорошо делает одно дело. Сюжет позволяет одному агенту вести целый многошаговый процесс с каждым человеком — обучать курсу, вести программу коучинга, доводить заявку до решения — и помнить, где находится каждый человек, между сессиями и каналами. Если идея для вас нова, начните со страницы концепции «Сюжеты»; эта страница — руководство «как сделать».

Сюжеты — это возможность уровня Pro. Как только она включена для вашего арендатора, вы найдёте редактор сюжетов в консоли. Вы также можете строить сюжеты через API (/v1/storylines) — именно так мастер настройки или ассистент может сгенерировать сюжет для вас.

Форма сюжета

Сюжет — это граф. Вы рисуете узлы и соединяете их переходами.

Каждый узел — это один шаг. Для этого шага вы задаёте:

  • задачу — что агент должен делать здесь (можно вставить {dimension} или {blackboard.key}, и это подставится текущими значениями человека);
  • его знания, навыки и инструменты — добавленные поверх базового набора агента или, с переключателем «расширенно», заменяющие их только для этого шага;
  • необязательную вступительную реплику, которую агент произносит при входе в шаг (оставьте пустой, чтобы переключиться молча);
  • является ли он входным шагом и является ли он терминальным (завершающим) шагом.

Личность и границы безопасности агента никогда не меняются между узлами — меняются только задача, знания и инструменты.

Как шаг продвигается: условия переходов

Каждый переход из узла несёт условие. Есть пять видов, и выбор правильного важен:

  • Правило — порог на измерении или сохранённом значении, построенный выбором поля, оператора и числа (listening ≥ 70 and attempts ≥ 3). Детерминированно, бесплатно, без вызова модели. Используйте это для решений, которые должны быть надёжными.
  • Выбор пользователя — кнопка, которую нажимает человек. Хорошо для «готовы продолжить?» или ветвления по явному предпочтению.
  • ИИ — предложение, описывающее нечёткий критерий («когда ученик может составить предложение в прошедшем времени без подсказки»), которое оценивает модель. Вы также пишете, когда его проверять, чтобы оно не оценивалось на каждом шаге. Используйте это для оценочных суждений, а не для барьеров, которые должны быть точными.
  • Обратный вызов (callback) — ждёт сигнала от внешней системы (см. ниже).
  • Перейти к сюжету — переходит к другому сюжету (ветвление по итогу или сцепление классов).

Когда сработать могут несколько переходов, они оцениваются сверху вниз — поэтому ставьте детерминированные первыми.

Измерения: профиль, который путешествует с человеком

В настройках сюжета вы определяете измерения для своего предмета — для языкового курса listening, speaking, reading, writing, каждое 0–100. Они накапливаются на человеке по всем сюжетам (поэтому переносятся из класса в класс), и каждое можно пометить видимым для пользователя или оставить только для ваших глаз. Измерения записываются тремя способами: ИИ может периодически их оценивать, правило может их установить, или обратный вызов третьей стороны может о них сообщить.

Наряду с измерениями у каждого зачисления есть черновая доска (blackboard) — свободная область заметок для передачи, идущих от одного узла к следующему. Она сбрасывается, когда человек переходит к новому сюжету.

Подключение третьей стороны (обратные вызовы)

Узел может передать человека внешней системе и действовать на основе того, о чём она сообщит обратно — оценённый тест, KYC-проверка, встроенная мини-игра. Есть две формы:

  • Бэкенд — данные уходят в инструмент, и результат возвращается невидимо.
  • Редирект-и-ожидание — беседа показывает ссылку, блокируется и возобновляется, когда внешний шаг завершается (как работает окно оплаты). Если человек отменяет или истекает время ожидания, это отдельный итог, по которому можно ветвиться.

Консоль выдаёт каждому обратному вызову URL и имя сигнала для передачи третьей стороне. Результаты проверяются короткоживущим токеном, привязанным к этому человеку и шагу, применяемым один раз (повторы игнорируются), а любые измерения, о которых сообщают, проверяются на соответствие вашей схеме — внешняя система не может записать поле, которое вы не определили. Относитесь ко всему, что записывает обратный вызов, как к данным, а не к инструкциям.

Публикация, версии и изменение живого сюжета

Сюжет остаётся черновиком, пока вы его не опубликуете. Публикация сначала валидирует граф — нет пропущенного входа, нет тупиков, ничего недостижимого, нет висящих или неизвестных целей — и блокирует, если что-то не так. Публикация замораживает неизменяемую версию; тот, кто уже проходит сюжет, остаётся закреплённым за версией, на которой начал, поэтому изменение никогда не срывает того, кто «в пути».

Когда вы удаляете или меняете узел, на котором сейчас находятся люди, вы выбираете, что с ними произойдёт: переместить их на другой узел (безопасно), отправить обратно к началу или сбросить их прогресс. Последние два теряют прогресс пользователя, поэтому консоль просит подтвердить и показывает, сколько людей затронуто.

Проверка до публикации

У редактора есть два способа тестирования. Логическая прогонка трассирует граф без вызова модели (бесплатно, мгновенно), чтобы проверить достижимость и условия. Живой прогон реально прогоняет сообщения через модель (он расходует вашу квоту, и редактор об этом говорит), чтобы почувствовать настоящую вещь.