Как ИИ должен естественно реагировать на внезапную смену темы
Когда пользователь неожиданно спрашивает о чем-то новом, ИИ должен принять последний запрос в качестве текущей задачи, кратко подтвердить смену темы и перенести из предыдущего контекста только те детали, которые явно полезны. Если по формулировке пользователя неясно, начинает ли он с чистого листа или продолжает прежнюю мысль, задайте один точечный уточняющий вопрос об этой связи. Такая простая последовательность действий позволяет ассистенту следовать за пользователем, не теряя полезный контекст и не притягивая старый материал к несвязанному запросу.
Почему смена темы требует прямого ответа
В обычном разговоре люди переходят с одной темы на другую, и исследования диалоговых систем рассматривают смену темы как нормальную черту длительного общения. Исследование 215 диалогов в корпусе Switchboard показало, что смена темы обычно инициировалась одним из участников; другое направление исследований специально проверяло, как системы распознают этот переход и генерируют ответ на него. Эти выводы подтверждают важный практический принцип проектирования: диалоговый ИИ должен понимать, когда пользователь меняет активную задачу, а не предполагать, что каждое сообщение продолжает предыдущее. (An Empirical Study of Topic Transition in Dialogue; TIAGE: A Benchmark for Topic-Shift Aware Dialog Modeling)
Первый ответ должен сделать переход понятным, а не заставлять пользователя объяснять, почему он произошел. Если человек обсуждал меню на выходные, а затем спрашивает: «Поможешь мне написать короткую благодарственную записку?», ассистенту достаточно сказать: «Конечно, давайте займемся запиской». Пространный пересказ разговора о еде создает лишние сложности и может создать впечатление, будто ассистент застрял на предыдущей теме.
Начните с определения новой задачи
Проанализируйте последнее сообщение, чтобы понять требуемое действие: составить черновик, объяснить, сравнить, спланировать, отредактировать или ответить. Затем определите объект этого действия и любые ограничения, указанные в том же сообщении. Новый запрос, такой как «Подскажи три идеи на дождливый день», задает понятную задачу, даже если предшествующие реплики касались совершенно другого предмета. Ассистент может ответить прямо, используя общие предпочтения из предыдущих сообщений только в том случае, если они явно применимы — например, ранее упомянутое предпочтение занятий в помещении.
Полезное подтверждение перехода должно быть кратким и конкретным: «Переходим к планам на дождливый день: вот три варианта для дома». Во многих случаях сам ответ может служить подтверждением. Избегайте пространных рассуждений о мотивах пользователя; смена темы свидетельствует о другой задаче в рамках диалога, а не о причинах, по которым пользователь ее сменил. Руководство Microsoft по навигации ботов аналогично предостерегает от навязывания текущей ветки диалога, когда пользователь переключается на другую, а также от добавления устаревшей информации, если она не имеет отношения к делу. (Design bot navigation)
Сохраняйте только тот контекст, который действительно необходим
Прежде чем переносить детали через границу тем, проверьте их на релевантность: изменит ли этот факт ответ на новый запрос существенным образом? Если да, оставьте его. Если нет — опустите. Указанный бюджет может иметь значение при переходе от «помоги выбрать поездку на один день» к «что мне взять с собой». Однако точный текст несвязанного тоста на день рождения вряд ли имеет значение, когда пользователь просит составить список вещей.
Это вопрос практической пользы, а не утверждение о том, что историю разговора нужно стирать. Некоторые диалоговые модели явно сегментируют предшествующие реплики на тематические блоки, в то время как интерфейсы диалога также могут сохранять состояние между репликами. Эти механизмы показывают, что контекстом можно управлять на разных уровнях; они не определяют автоматически, какая именно старая деталь важна для конкретного запроса. На практике ассистент должен отличать постоянные ограничения от деталей одной конкретной задачи и упоминать перенесенный факт только тогда, когда это помогает обосновать ответ. (Topic-Aware Multi-turn Dialogue Modeling; Conversation state)
Краткое рабочее правило звучит так: сохраняйте явные предпочтения пользователя и активные ограничения, отбрасывайте незавершенные шаги предыдущей задачи, если пользователь к ним не возвращается, и избегайте повторного упоминания старых деталей разговора только ради того, чтобы показать, что вы их помните. Это правило представляет собой редакционный синтез результатов исследований и рекомендаций по проектированию, а не буквальную или экспериментально подтвержденную формулу.
Определите, является ли переход явным или двусмысленным
Явный переход не требует уточнений. Такие фразы, как «новый вопрос», «другая тема» или «а теперь помоги мне с...», четко обозначают намерения пользователя. То же самое относится к самодостаточному запросу, который не имеет смысловой зависимости от предыдущего диалога. Достаточно кратко подтвердить переход и продолжить.
Связующее звено двусмысленно, когда пользователь использует местоимение или отсылку, которая может указывать более чем на один предыдущий пункт, или когда неясно, хочет ли он адаптировать прежний результат или начать что-то новое. Например, после обсуждения двух возможных подарков фраза «Сделай его более персонализированным» оставляет предмет неясным. Задайте один прицельный вопрос: «Вы имеете в виду идею с книгой или кулинарный мастер-класс?» Рекомендации Microsoft по устранению неоднозначности намерений предлагают использовать точечные вопросы и варианты ответов, одновременно предостерегая, что избыток вопросов превращает взаимодействие в допрос. (Disambiguate customer intent)
Если вероятная интерпретация безопасна и ее легко скорректировать, ассистент может озвучить ее и продолжить: «Если вы имеете в виду благодарственную записку, вот более теплый вариант». Используйте этот подход только тогда, когда ошибочная догадка не приведет к напрасной трате сил пользователя и не исказит ответ. Если альтернативные варианты дают существенно разные результаты, уточните детали перед тем, как продолжить.
Практическая последовательность ответа
При каждой внезапной смене темы применяйте эту короткую последовательность:
Сформулируйте новую задачу для себя. Определите, о чем именно пользователь просит сейчас, и выделите все сопутствующие ограничения.
Проверьте наличие четкого сигнала. Если пользователь явно перешел к другой теме или предоставил самодостаточный новый запрос, примите этот переход.
Отфильтруйте предшествующий контекст. Переносите только те предпочтения, факты или ограничения, которые напрямую влияют на новый ответ.
Устраните реальную неоднозначность за один раз. Задайте один лаконичный вопрос, позволяющий различить вероятные варианты; предложите выбор, если это упростит ответ.
Ответьте на выбранную задачу. Не возвращайтесь к прежней теме, пока пользователь сам не попросит об этом.
Рассмотрим пример: сначала пользователь просит составить простое меню для пикника и отмечает, что один из гостей не ест орехи. Позже он пишет: «Другой вопрос: посоветуй небольшой подарок для соседа». Явный переход ясно показывает новое намерение. Ограничение на орехи не имеет никакого отношения к идеям подарков, поэтому повторять или применять его было бы лишним шумом. Если же пользователь вместо этого напишет: «Сделай это более безопасным для них», ассистенту следует уточнить, к чему относится «это» и кого имеют в виду под словом «них», если в предыдущих репликах фигурировало несколько подходящих предметов или людей.
Типичные ошибки, из-за которых переключение кажется неуклюжим
Продолжение брошенной задачи. Если пользователь задает новый, самостоятельный вопрос, не настаивайте на завершении предыдущего списка и не спрашивайте, уверен ли он, что хочет переключиться. В рекомендациях по проектированию для Dialogflow CX, к примеру, описываются явные интенты отмены как способ позволить людям покинуть активную тему разговора. Более широкий принцип проектирования заключается в том, чтобы оставлять пространство для изменения направления мысли пользователем. (Intents | Dialogflow CX)
Отношение к каждому новому предложению как к чистому листу. Некоторые короткие сообщения зависят от предыдущего контекста: фраза «Сделай второй вариант короче» непонятна без только что предоставленного списка. Сохраняйте непосредственный контекст, необходимый для разрешения отсылок, даже когда меняется общая тема.
Придумывание несуществующей связи. Тот факт, что две темы появились рядом друг с другом, не означает, что пользователь хочет их объединить. Если связь не подтверждается формулировкой пользователя, отвечайте на новый запрос изолированно.
Вопросы, когда намерение уже понятно. Уточнение полезно только тогда, когда оно влияет на ответ. В противном случае оно лишь затягивает выполнение задачи. Спрашивайте о недостающей смысловой связи, а не о самом факте смены темы пользователем.
Естественная передача контекста в одном предложении
Эффективный шаблон выглядит так: «Конечно — [новая задача]. Я учту [релевантную деталь из прошлого контекста], если это еще актуально; [один конкретный вопрос]?» Используйте заключительный вопрос только тогда, когда реальная двусмысленность влияет на ответ. Для самодостаточного запроса пропустите его: «Конечно — вот три недорогих варианта занятий в помещении на дождливый день».
Цель предельно проста: следовать указанному пользователем направлению, сохранять контекст только тогда, когда он действительно нужен, и задавать одно точечное уточнение, когда связь действительно неясна. Благодаря этому внезапная смена темы воспринимается как естественный поворот диалога, а ответ остается сфокусированным на том, что требуется пользователю прямо сейчас.
