本章节是这份系列指南的最后一节,关于"出错"情况的应对策略,以及一些具体的提出类型范例,正文如下。 对话UI设计中难度最大也最容易被忽略的一点,就是对于"无法匹配"(系统无法识别用户的话)和"没有输入"(用户没有说话)的状态中进行复原。 我们经常会把这些状态错误的理解为一种边缘状态,而只是做一些简单的处理应对,例如像用户道歉、把同样的问题再问一遍,或是用过于正规、机械的方式,使对话呆板,甚至更严重的,让用户产生受挫感。 当用户听到"我没听懂那句话",或是"抱歉我没理解",他们会理解为"我什么都听不懂",或是"这个技术不能运行"。所以对"错误"的修复极其重要。无论是对用户体验,还是对于应用本身要取得成功来说。 对话修复的关键点概述 以下内容概述了如何把"错误"转化为对话UI中自然的一部分: 不要把技术上的"出错"当做用户的错误。 对于不同类型的"出错"提供对应适合的处理方式。 通过提供帮助来避免出错。 要知道在什么情况下放弃。 使完成任务的路径更强,来掩盖错误。 把出错看成是机会 任何请求都是有目的的,用户总是希望完成某些任务,即使没有明确说出来。可以用新的方式来处理错误,把它们当做是对话中的转折点。通过对出错的可以建立成为营造和用户有效互动的机会,通过建立信任,以及利用用户与生俱来的对日常对话方式的期望。 在人与人的谈话中,出现犹豫或是错误纠正都是很正常的。但是在人与机器交互的过程中,这些情况会造成超时问题和识别错误。这种差异是因为人与人之间会本能的实时互相纠正、回到正确的谈话轨道上。但是对于机器编程产生的对话,必须要提前考虑、设计应对这些错误的处理方式。 要做到这一点,唯一的方式就是把不要把这些问题当成是"错误",而是当成用户输入内容的一部分。在对话开始时,需要采用一些提示机制。(可以参考"确认与应答"这一章)。之后,需要通过一些策略来规避这些问题的出现,然后还要制定一种能够适应不同场景和情况的应对策略。 要知道什么会导致出错 要使对话能够顺利进行,需要很多条件很好的结合在一起,才能达成,包括:语言信号处理、语言分析、音频数据传输、软件触发等。所有的机制必须要能够合理的获取分析用户的输入,并提供一个对应的输出。一旦用户的输入不符合预设,那么就会引发"出错",而这个时候也是恰恰开始变的有趣的时刻。 区分机器逻辑和用户的真实互动情景 要记住的关键一点是机器的触发与响应时,所处的环境条件与用户视角所感受到的是完全不同的。譬如噪音、中断、话说到一半被打断,以及选择太多,用户在真实交互的过程中,会遇到很多问题,可能和程序预设的逻辑存在非常多的差异。 从机器角度来看,有4种常见的情况会导致出错: 没有获取到任何输入。可能是因为确实没有,也可能是系统没有检测到。结果就是造成系统获取信息超时。 虽然获取到了信息,但是却不能识别或解析,这种情况可能是因为背景噪音,或是有多个用户一起说话。 识别了用户的输入信息,但是系统不知道如何去回应处理。例如,用户可能会说:"I don’t know, what can I do?",此时系统也许会错误的解析信息,无法正确的处理请求。 错误的识别了用户的输入信息,这种情况可能是最坏的一种结果。因为用户会被误导,而谈话会继续向错误的方向继续。 要想解决这些问题,第一步可以先把问题简单的归类,其实问题都可以归为以下两种: 输入缺失(no-input error)——系统未获取到用户输入 无法匹配(no-match error)——获取到了输入,但是系统无法正确的分析处理 目前你已经知道用程序化的方式来入手解决问题,但是那只是最简单的第一步,接下来需要用更有策略性的方式来解决问题,例如下面的这些方式: 设计处理错误的策略 我们来看看如何通过策略来处理这些问题,你可以使用一些工具,通过代码和逻辑来实现这些策略,例如API.AI。 1、有效的提示 以下是一些应对错误的提示策略。 (1)无内容的快捷重复提示 "What was that?" "Say that again?" (2)有内容的快捷重复提示 "Sorry, what time?" "I missed that number." (3)重复询问 "First, what’s your favorite color?"——"What’s your favorite color?" "Sure, what movie would you like to see?"——"To get started, what movie do you want to see?" (4)更改问题 "What time is this for?"——"Sorry,what time?" "For when?"—— "What time would you like to book this for?" (5)回答一个没有明说的请求 "I have your name and email from your account, so now all I need is your phone number." "You can give me the day, the time, or both." (6)积极主动询问 "I could put you down for 6 p.m. for now, does that work? "Do you want to finish this later?" 2、及时提供帮助 修复问题很重要的一点,就是要准备好去帮助用户,当他们出现困惑、没有听懂问题,或是不知道该说什么的时候。为了应对这些问题,采用预防机制,例如设定好一些提示。此外,也需要准备好去应对用户的一些寻求帮助的要求,可能是想要重复听某些内容,例如:"能再说一遍吗?",也可能是说出像是"帮助"或"我不知道"之类的话。 3、知道合适的退出时机 另一种防止用户受挫的策略,就是提供一种让用户可以轻松结束对话的方式,他们想要结束可能会有多种原因,毕竟生活充满了多种多样的情况。为用户的离开做准备是非常关键而且正确的技巧。同时,通过这样的方式,也可以让用户知道如何再回来,并接着上一次的服务继续。 (1)系统主动退出的例子 (2)用户主动退出的例子 4、提供规避错误的路径 如果用户没有直面出错,那么就会感觉到对话还在顺利继续,这样的话,即使他们之后真的面临了错误,也不会感到沮丧。 (1)始终保持人性化的表达 听起来自然,并可以掩盖错误的方式之一,就是提供多样性,让对话听起来更吸引人。这种原则不仅仅是针对提示,而是要贯穿整个对话始终。应该要使用随机的、多样化的提问内容和回答。 以下是一些有用的策略,能够帮助你的程序听起来更人性化: 提供一个用于提示的文案列表。 随机的从这个列表中选择进行提示。 通过排列组合可以创建大量不同的提示。 在提示中,把固定的文字用占位符来替代,当做一种变量,在正式运行时,就可以生成多变的内容,例如:"Welcome,%s"。 要记录曾使用过的提示语,在下一次随机生成提示时,不要用之前用过的。 (2)努力获取用户的信任 有时候用户可能会只是随意尝试下,看系统会如何回应,所以也需要为这部分做好准备。其实可以想象下,平时你是怎么跟邻居打好关系的,比如要向人家借割草机之前,可以先借给他们一杯糖。与用户的相处也是这样,他们可能会先试探下系统能否为他们提供期望的信息。 (3)积极主动的协助用户达成目标 可以提醒用户任务完成进度,处于何处,以及回到主路径的方式。有时候,可能也需要主动的把控局面,根据你程序的角色画像以及自信的程度,去推动对话继续进行。 至此,这份指南的主体内容就完结了,绝大部分是一些指导性的设计原则。目前对话交互是一个相对比较新的领域,大家说起AI,可能通常会觉得是技术驱动的一个概念,但是其实要把它落地到应用层面,面向用户,就少不了涉及到"体验"。Google的这份规范找到了一个很好的切入点,就是从人们真实的对话中去归纳原则,把它复用到人机对话当中。遵循这份文档,就可以有一个比较好的框架开始展开设计。 相关阅读 Google对话式交互规范指南(一):对话式UI以及它的影响力 Google对话式交互规范指南(二)理解对话机制,优化对话体验 Google对话式交互规范指南(三):设计原则与方法 Google对话式交互规范指南(四):对话UI设计流程与步骤 Google对话式交互规范指南(五):设计走查清单 Google对话式交互规范指南(六):像你的用户一样,善于合作化的表达 Google对话式交互规范指南(七):开启口语表达的力量 Google对话式交互规范指南(八):通过确认和应答给予用户信心