Эффективность вашего бота зависит от количества ошибок, которые он совершит во время разговора. Если “глупый” и непонятливый бот будет лишь раздражать ваших клиентов, то умный бот будет ваших клиентов радовать, а также не уступит в эффективности живым операторам.
В этой статье я постараюсь кратко рассказать о том, какие ошибки наиболее распространены и как их избежать.
- Из фразы не был выделен верный интент (намерение)
- Из фразы был выделен неверный интент (намерение)
- Не было перехода по интенту
- Интент - это посыл фразы, которую сказал человек. Например из фразы “мне не надо ваши услуги и неудобно разговаривать” можно выделить 2 посыла, что услуги не нужны и что сейчас человеку разговаривать неудобно. Робот на базе платформы Даша не слышит речь собеседника, не видит текст, который транскрибировался из фразы, а ориентируется исключительно по выделенному интенту. Соответственно, если интент не был выделен, то робот не сможет понять, что ему сказал человек, а если был выделен неправильно, то не поймет его так же неправильно.
- Переход - это путь из одной ноды диалога в другую. Переход всегда осуществляется по условию. Это может быть интент, определенная цифра, адрес, имя и т.п. Если вы л выделен верный интент, но в данном месте диалога нет перехода, то робот не сможет адекватно отреагировать и его поведение не будет отличаться от того, как если бы интент вообще не был выделен.
Теперь к основным ошибкам пользователей при создании голосовых моделей на базе платформы Даша:
- callBack.dsl - дайгрешн (т.е. Нода, доступная из любого места диалога) - отвечающий за реакцию на просьбу человека перезвонить позже
- canHearYou.dsl - дайгрешн отвечающий за реакцию на вопрос человека “вы меня слышите?”
- dontUnderstand.dsl - реакция, если робот не понял, что ему сказали. Механизм такой - если из фразы человека не выделено интентов, по которым можно совершить переход в данном месте диалога, то срабатывает этот дайгрешн.
- Hangup.dsl - если человек положил трубку первый, то робот корректно завершит этот разговор
- hello.dsl - если человек замолчал, то робот будет пинговать
- iAmRobot.dsl - если человек напрямую спросит “а вы робот” то робот признается, что он робот.
- repeatAndPing.dsl - реакция на просьбу человека повторить или если человек скажет “алло”
- swearWords.dsl - если человек ругается матом, то по умолчанию робот извинится, положит трубку и поставит статус “DontCall”
- wait.dsl - если человек просит подождать, то робот будет ждать
- wontCallAnymore.dsl - если робота попросят больше не звонить, то он извинится, завершит разговор и пометит такой разговор статусом “DontCall”
- Используйте наши системные интенты и сентименты. Особенно обратите внимание на #messageHasSentiment("positive") и #messageHasSentiment("negative") - используйте их для перехода по позитивному и негативному высказыванию. Примеры позитивного высказывания: да, согласен, интересно, хочу, думаю, что да и т.п. Примеры негативного высказывания: нет, не интересно, не удобно говорить, не хочу и т.п.
- Если вы хотите, чтобы собеседник мог перебить робота, используйте функцию #say("название фразы", interruptible:true);
- Если важно, чтобы робот выслушивал собеседника дольше обычного и не перебивал, используйте в ноде в разделе do добавьте #setVadPauseLength(1.5); Это увеличит паузу, когда Даша ждёт ответа в 1.5 раза. Только потом в след ноде верните на дефолтное значение 1.
- При создании ваших кастомных интентов не добавляйте больше пяти примеров фраз “из головы”. Старайтесь добавлять реальные фразы из разговора робота, причем в том виде, в каком эти фразы распознались. Никогда не добавляйте в кастомные интенты в раздел excludes примеры фраз, которые вы сами придумали. Раздел excludes служит, чтобы убрать ложноположительные срабатывания интентов и добавлять туда фразы можно только те, из которых действительно был ложно выделен данный интент. Дело в том, что нейросеть не обладает логикой человека и при добавлении разумных на ваш взгляд исключающих интентов, не будут выделяться правильные фразы, а также увеличится количество ложных срабатываний. Наглядный пример ниже - есть интент "schedule_haircut" в разделе "includes" у него есть примеры фраз и они достаточно логично сочетаются между собой, однако в разделе excludes есть фразы, из которых этот интент выделялся ложно - посмотрите на из “логичность” с точки зрения человека
"schedule_haircut": "schedule_haircut": { "includes": [ "хочу записаться на стрижку", "хотел бы к вам на стрижку записаться", "запишите меня на стрижку пожалуйста", "могу я записаться на стрижку", "здравствуйте я бы хотел записаться на стриж", "здравствуйте я бы хотел записаться на подстрижку", "здравствуйте я бы хотел подстричься", "здравствуйте я бы хотел записаться на подстриж", "мне надо волосы подстричь", "записаться на стрижку" ], "excludes": [ "да", "нет", "повторите", "повторите ещё раз", "хочу отменить зап" ] }