具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
在相关技术中,语音交互***中各个装置之间的通信接口与所连接的各个装置的功能和性能具有较强的耦合性,从而,导致在对某个装置进行功能更新和/或性能更新时,该装置与其他装置之间的通信接口将不再适用,需要重新调配该装置与其他装置之间的通信接口,从而,增加了语音交互***的更新繁琐度,降低了语音交互***的更新效率。
为了解决上述技术问题,本发明实施例提供了一种语音交互***。其中,该语音交互***可以适用于任一进行语音交互的应用场景,例如,车辆控制场景、商场导购场景、景区导游场景等,这都是合理的。
从而,针对该语音交互***所应用的场景不同,该语音交互***可以应用于各类不同的电子设备中,例如,在车辆控制场景,该语音交互***即为车载的语音交互***,从而,可以安装在车辆的控制设备中;在商场导购场景,该语音交互可以安装在智能导购机器人上。这都是合理的。
以上,本发明实施例不对该语音交互***的应用场景和执行主体进行限定。
本发明实施例提供的一种语音交互***可以包括:调度装置、信息输出装置、网络连接装置和本地引擎装置;
其中,所述调度装置分别通过第一通信接口模块、第二通信接口模块和第三通信接口模块与所述信息输出装置、所述网络连接装置和所述本地引擎装置通信连接;
所述本地引擎装置,用于识别用户语音信息,得到用户指令,并通过所述第三通信接口模块,将所述用户指令发送给所述调度装置;
所述调度装置,用于通过所述第三通信模块接收到所述用户指令,并通过所述第二通信接口模块,将所述用户指令发送至所述网络连接装置,并接收所述网络连接装置通过所述第二通信接口模块反馈的指令响应结果;通过所述第一通信接口模块,将所述指令响应结果发送至所述信息输出装置;
所述网络连接装置,用于获取所述用户指令对应的指令响应结果,并通过所述第二通信接口模块,向所述调度装置反馈所述指令响应结果;
所述信息输出装置,用于通过所述第一通信接口模块接收所述指令响应结果,并执行所述指令响应结果。
基于此,第一通信接口模块、第二通信接口模块和第三通信接口模块不是根据各个装置的功能和性能,针对每个装置所设计的,而是根据语音交互***中信息传输的特征,在调度装置中的处理器上统一设计实现的功能模块,从而,可以实现调用,降低语音交互***中的各个通信接口与所连接的各个装置的功能和性能的耦合性。这样,在对某个装置进行功能更新和/或性能更新时,由于并未改变该装置与其他装置之间的信息传输的特征,从而,可以无需重新调配该装置与其他装置之间的通信接口。
这样,应用本发明实施例提供的方案,可以通过降低语音交互***中的各个通信接口与所连接的各个装置的功能和性能的耦合性,降低语音交互***的更新繁琐度,提高语音交互***的更新效率。
下面结合附图,对本发明实施例提供的一种语音交互***,进行具体说明。
图1为本发明实施例提供的一种语音交互***的结构示意图。
如图1所示,该语音交互***包括:调度装置101、信息输出装置102、网络连接装置103和本地引擎装置104;
其中,调度装置101分别通过第一通信接口模块110、第二通信接口模块120和第三通信接口模块130与信息输出装置102、网络连接装置103和本地引擎装置104通信连接。并且,第一通信接口模块110、第二通信接口模块120和第三通信接口模块130用通信接口类实现。
本地引擎装置104,用于识别用户语音信息,得到用户指令,并通过第三通信接口模块130,将用户指令发送给调度装置101;
调度装置101,用于通过第三通信接口模块130接收用户指令,并通过第二通信接口模块120,将用户指令发送至网络连接装置103,并接收网络连接装置103通过第二通信接口模块120反馈的指令响应结果;通过第一通信接口模块110,将指令响应结果发送至信息输出装置102;
网络连接装置103,用于获取用户指令对应的指令响应结果,并通过第二通信接口模块120,向调度装置101反馈指令响应结果;
信息输出装置102,用于通过第一通信接口模块110接收指令响应结果,并执行指令响应结果。
其中,第一通信接口模块110、第二通信接口模块120和第三通信接口模块130是在调度装置101中设计的分别与信息输出装置102、网络连接装置103和本地引擎装置104进行信息传输的接口模块,因此,第一通信接口模块110、第二通信接口模块120和第三通信接口模块130可以位于调度装置101中。
为了便于理解上述本发明实施例提供的一种语音交互***中,各个装置之间的信息传输,如图2所示,为本发明实施例提供的一种语音交互***中,各个装置之间的信令传输的示意图。其中,各个装置之间的信令传输过程可以包括如下步骤:
S201:本地引擎装置104识别用户语音信息,并从用户语音信息中得到用户指令;
S202:本地引擎装置104通过第三通信接口模块130,将用户指令发送给调度装置101;
S203:调度装置101通过第二通信接口模块120,将所接收到的用户指令发送至网络连接装置103;
S204:网络连接装置103获取所接收到的用户指令对应的指令响应结果;
S205:网络连接装置103通过第二通信接口模块120,向调度装置101反馈指令响应结果;
S206:调度装置101通过第一通信接口模块110,将所接收到的指令响应结果发送至信息输出装置102;
S207:信息输出装置102执行所接收到的指令响应结果。
下面,结合上述图1和图2,对本发明实施例提供的一种语音交互***进行具体说明。
当用户希望语音交互***完成某项指令时,可以通过语音发出指令,例如,用户希望获取天气情况,则可以发出语音信息“今天上海的天气怎么样”。
这样,本地引擎装置104(local engine)在获取到用户语音信息后,便可以对该用户语音信息进行识别,以得到用户语音信息中所包含的用户指令。
其中,可选的,一种具体实现方式中,本地引擎装置104可以与语音采集装置通信连接,从而,语音采集装置可以采集用户语音信息,并将所采集到的用户语音信息发送至本地引擎装置104,以使本地引擎装置104可以获取到用户语音信息。例如,该语音采集装置可以为麦克风。
可选的,语音采集装置在采集到用户语音信息后,还可以进一步对用户语音信息进行降噪、滤波以及回音消除等处理,从而,将处理后的用户语音信息发送至本地引擎装置104。
可选的,一种具体实现方式中,本地引擎装置104可以包括语音识别子装置和语言处理子装置。
其中,语音识别子装置,用于将用户语音信息转换为文本信息,并将文本信息发送至语音处理子装置;语音处理子装置,用于识别所接收到的文本信息的意图和词槽,得到用户指令。
在本具体实现方式中,语音识别子装置可以获取语音采集装置采集到的用户语音信息,从而,将该用户语音信息转换为文本信息,并将所转换得到的文本信息发送至语音处理子装置。进而,语音处理子装置便可以对所接收到的文本信息进行识别,得到文本信息的意图和词槽,则所得到的意图和词槽即可以构成用户指令。
例如,当用户语音信息为“今天上海的天气怎么样”时,则语音处理子装置1042所输出的用户指令可以表示为:
{
“意图”:“查询天气”,
“日期词槽“:“今天“,
“地点词槽“:“上海“
}
可选的,上述语音识别子装置可以为ASR(Automatic Speech Recognition,自动语音识别技术)处理引擎,而语音处理子装置可以为NLP(Natural Language ProcessingUnit,自然语言处理单元)处理引擎。
这样,ASR处理引擎便可以将接收到的用户语音信息,从音频数据转换为文本数据,得到文本信息,例如,得到汉字文本;NLP通常包括意图分类和命名实体识别两部分,其中,意图分类用于识别文本信息的意图,命名实体识别用于识别文本信息的词槽。从而,NLP处理引擎可以对上述文本信息进行识别,输出意图和词槽,从而,得到用户指令。
其中,可选的,NLP处理引擎还可以得到关于所识别得到的意图和词槽的置信度,该置信度可以表征上述文本信息被识别为上述意图和词槽的可能性的大小。若所输出的置信度过低,则NLP处理引擎可以放弃本次结果,输出用于表征无法识别的提示信息。这样,用户可以再次重复发出语音信息,或者,可以直接放弃语音控制。
在得到上述用户指令后,由于本地引擎装置104与调度装置101通过第三通信接口模块130连接,从而,本地引擎装置104便可以通过第三通信接口模块130,将所识别得到的用户指令发送给调度装置101。
其中,上述调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输可以通过消息通信实现,所谓消息是指按照预设格式传输的数据块。
例如,上述本地引擎装置104识别得到的用户指令表示为:
{
“意图”:“查询天气”,
“日期词槽“:“今天“,
“地点词槽“:“上海“
}
则上述本地引擎装置104可以将上述用户指令以字符串的格式,通过第三通信接口模块130发送给调度装置101。
其中,由于消息可以通过消息队列和线程进行处理,基于此,可选的,上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130可以包括消息队列和线程。其中,一个或多个线程用于往消息队列后面堆数据,而另外的一个线程用于从消息队列前面取数据,并对所取到的数据进行处理。
则上述调度装置101便可以分别通过第一通信接口模块110、第二通信接口模块120和第三通信接口模块130所包括的消息队列和线程,完成与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输。
其中,本发明的一种实施例中,上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130均包括消息队列,则上述调度装置101便可以分别通过第一通信接口模块110、第二通信接口模块120和第三通信接口模块130所包括的消息队列,完成与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输。
其中,消息队列中所存放的消息采用的是FIFO(First Input First Output,先进先出)的执行方式。
这样,通过消息队列进行信息传输,便可以增加上述语音交互***的鲁棒性,便可以使得在上述调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输过程中,不会因为某次信息传输的时间过长或者发生故障,导致整个语音交互***的崩溃。从而,可以提高上述语音交互***的交互性能。
本发明的另一种实施例中,在上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130均包括消息队列的情况下,上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130均可以包括线程;并且,上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130所包括的线程,分别用于执行调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输任务。
其中,上述信息传输任务包括:将信息放入消息队列或者从消息队列中取出信息。
基于此,在本实施例中,调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104的信息传输可以分别通过上述第一通信接口模块110、第二通信接口模块120和第三通信接口模块130所包括的消息队列和线程实现。
基于此,可选的,一种具体实现方式中,第一通信接口模块110、第二通信接口模块120和第三通信接口模块130调用同一个通信接口基类,进行信息传输时,利用通信接口基类分别形成第一通信接口模块110、第二通信接口模块120和第三通信接口模块130,其中,通信接口基类包括消息队列和线程。
在本具体实现方式中,在调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104之间进行信息传输时,可以利用相同的通信接口基类,在调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104之间,分别形成包括消息队列和线程的第一通信接口模块110、第二通信接口模块120和第三通信接口模块130。这样,第一通信接口模块110、第二通信接口模块120和第三通信接口模块130调用同一个通信接口基类。
其中,线程可以理解为一个用于进行信息传输的执行单元,而消息队列中包括待传输的各个信息数据。进而,对于一个同时包括线程和消息队列的通信接口模块而言,当该通信接口模块的一个硬件接口接收到一个信息数据后,线程便可以从该硬件接口的驱动程序中获取该信息数据,并将该信息数据放入消息队列中,进而,线程还可以从该消息队列中获取该信息数据,并将该信息数据传输至目标装置的驱动程序中。至此,线程完成对一消息数据的移动和传输。
并且,不同的线程还可以按照预设的方式完成对信息数据的处理,例如,消息接收线程用于从通信接口模块的硬件接口的驱动程序中获取该硬件接口所接收的信息数据,并将该信息数据发送消息接收队列中;消息发送线程用于从消息发送队列中读取信息数据,并将所读取到的信息数据发送至目标装置的驱动程序中等。
进一步的,由于在调度装置101与信息输出装置102、网络连接装置103和本地引擎装置104之间的信息传输过程中,消息可以有接收和发送两个传输方向,则在进行信息传输的两个装置之间的接口中,可以包括用于接收消息的通道和用于发送消息的通道,并且,这两个通道分别利用消息接收队列和消息发送队列进行消息处理。从而,根据信息传输过程中各条消息的传输方向,将各条消息存储至消息接收队列或消息发送队列,进而,便可以从消息接收队列或消息发送队列取得各条消息,并进行进一步的消息传输或消息处理。这样,可以提高信息传输效率,避免消息处理不及时造成的消息堵塞的情况发生。
其中,可选的,消息发送队列和消息传输队列可以表示为:
Queue sendQ;//发送队列
Queue recvQ;//接收队列
进而,分别利用消息接收队列和消息发送队列进行消息处理时,所调用的函数可以包括:
void send(Msg msg);//往消息发送队列***一条消息
Msg recv();//从消息接收队列取出一条消息,并删除队列中所取出的消息
virtual void doSend(Msg msg)=0;//纯虚函数,需要根据不同的接口重新实现适配
Msg doRecv();//外部模块调用该函数往调度装置101发送消息
基于此,可选的,一种具体实现方式中,如图3所示,上述第三通信接口模块可以包括第一消息接收队列。
相应的,在图3所示的本具体实现方式中,上述本地引擎装置104便可以具体用于:通过第一消息接收队列,将用户指令发送给调度装置101;
可选的,本地引擎装置104可以向第三通信接口模块130发送用户指令,以使第三通信接口模块130将所接收到的用户指令存放至第一消息接收队列,并将存储至第一消息接收队列的上述用户指令发送给调度装置101,或者,在接收到调度装置101发送的第一指令获取请求时,将存储至第一消息接收队列的用户指令发送给调度装置101。
其中,本地引擎装置104可以向第三通信接口模块130发送用户指令,从而,第三通信接口模块130可以将所接收到的用户指令存放至第一消息接收队列。
这样,第三通信接口模块130可以自动将存储至第一消息接收队列的上述用户指令发送给调度装置101。例如,第三通信接口模块130可以按照预设周期从第一消息接收队列中读取消息,并在读取到上述用户指令时,将该用户指令发送给调度装置101。
第三通信接口模块130也可以在接收到调度装置101发送的第一指令获取请求时,将存储至第一消息接收队列的用户指令发送给调度装置101。
例如,调度装置101可以按照预设周期向第三通信接口模块130发送第一指令获取请求,在每次接收到上述第一指令获取请求时,第三通信接口模块130便可以从第一消息接收队列中读取消息,并在确定所读取到的消息为上述用户指令时,将该用户指令发送给调度装置101。
接着,调度装置101在接收到上述用户指令后,可以确定用于响应该用户指令的装置为网络连接装置103。进而,由于网络连接装置103与调度装置101通过第二通信接口模块120连接,从而,调度装置101便可以通过第二通信接口模块120,将所接收到的用户指令发送至网络连接装置103。
其中,上述网络连接装置103可以包括至少一个内容提供商(Content Provider,CP),所谓CP用于提供用户指令所指示的需要获取的各类信息。例如,用于查询天气信息的网站,用于提供订餐信息的订餐客户端等。
这样,上述网络连接装置103在接收到上述用户指令后,便可以根据该用户指令所指示的获取的信息,确定用于提供上述信息的CP,从而,上述网络连接装置103可以与所确定的CP建立网络连接,以使得所确定的CP可以根据上述用户指令,提供上述信息。从而,网络连接装置103便可以获取上述信息,作为用户指令对应的指令响应结果。之后,网络连接装置103便可以通过上述第二通信接口模块120,向调度装置101反馈所获取到的指令响应结果。
例如,当用户指令用于指示获取A地在B时间段内的天气信息时,上述网络连接装置103可以确定用于查询天气信息的网站,从而,上述网络连接装置103可以与该网站建立通信连接,这样,该网站便可以查询A地在B时间段内的天气信息,并向上述网络连接装置103反馈所查询到的天气信息结果。
然后,上述调度装置101,便可以接收网络连接装置103通过第二通信接口模块120反馈的指令响应结果。
可选的,一种具体实现方式中,如图3所示,上述第二通信接口模块120可以包括第二消息发送队列和第二消息接收队列;
在图3所示的本具体实现方式中,上述调度装置101便可以具体用于:通过第二消息发送队列,将所接收到的用户指令发送至网络连接装置103;通过第二消息接收队列,接收网络连接装置103反馈的指令响应结果。
可选的,调度装置101可以将所接收到的用户指令发送至第二通信接口模块120,以使第二通信接口模块120将所接收到的用户指令存储至第二消息发送队列,并将存储至第二消息发送队列的用户指令发送给网络连接装置103;或者在接收到网络连接装置103发送的第二指令获取请求时,将存储第二消息发送队列的用户指令发送给网络连接装置103。
其中,调度装置101在接收到用户指令后,可以将用户指令发送至第二通信接口模块120,从而,第二通信接口模块120可以将所接收到的用户指令存储至第二消息发送队列。
这样,第二通信接口模块120可以自动将存储至第二消息发送队列的用户指令发送给网络连接装置103。例如,第二通信接口模块120可以按照预设周期从第二消息发送队列中读取消息,并在读取到上述用户指令时,将该用户指令发送给网络连接装置103。
第二通信接口模块120也可以在接收到网络连接装置103发送的第二指令获取请求时,将存储至第二消息发送队列的用户指令发送给网络连接装置103。例如,网络连接装置103可以按照预设周期向第二通信接口模块120发送第二指令获取请求,在每次接收到上述第二指令获取请求时,第二通信接口模块120便可以从第二消息发送队列中读取消息,并在确定所读取到的消息为上述用户指令时,将该用户指令发送给网络连接装置103。
其中,可选的,第二通信接口模块120中可以设置有任务池或线程池(threadpool),该任务池或线程池中存在多个发送线程(sendThread),并且,每个发送线程用于从第二通信接口模块120所包括的第二消息发送队列中获取消息,并向网络连接装置103发送所获取到的消息。具体的,当上述第二消息发送队列中被放入了用户指令时,则该该任务池或线程池中的发送线程就得到通知,从而,会从该任务池或线程池中,获取一个发送线程来执行具体的发送动作,即获取上述第二消息发送队列中的消息,并针对所获取到的消息执行具体的发送动作doSend(),并在消息发送成功后把上述所获取的消息从发送队列中删除。
相应的,与第二通信接口模块120相似的,第一通信接口模块110和/或第三通信接口模块130中也可以设置有任务池或线程池。
其中,因为每一个消息发送动作的耗时是不确定的,因此,通过使用线程进行消息发送,便可以避免由于发送消息被阻塞所造成的整个通信接口的阻塞,并且,使用线程池或任务池,而不是动态创建新线程的目的是,避免线程资源的频繁创建与销毁带来的开销。
由于上述调度装置101与信息输出装置102通过第一通信接口模块110连接,从而,调度装置101在接收到上述指令响应结果,便可以通过第一通信接口模块110,将该指令响应结果发送至上述信息输出装置102。
其中,信息输出装置102可以理解为安装有本发明实施例提供的语音交互***的执行主体上,用于可以看得到和触摸得到的外部设备。从而,信息输出装置102可以显示信息、播放声音,也可以采集用户的触摸操作。
这样,信息输出装置102在接收到上述调度装置101通过第一通信接口模块110发送的指令响应结果后,便可以执行上述指令响应结果。其中,上述信息输出装置102可以包括多种执行设备,每种执行设备可以通过不同的方式执行与该输出设备相匹配的指令响应结果。
例如,上述信息输出装置102可以包括GUI(Graphic User Interface,用户图形界面)、语音播放装置等。其中,在车载的语音交互***中,GUI可以理解为汽车的显示屏,上述语音播放装置可以包括扬声器等。
基于此,可选的,信息输出装置102在接收到上述指令响应结果后,可以根据该指令响应结果的表现形式和内容,确定相匹配的执行设备,并通过所确定的执行设备执行上述指令响应结果。
可选的,一种具体实现方式中,如图3所示,上述第一通信接口模块110可以包括第一消息发送队列;
在图3所示的本具体实现方式中,上述调度装置101便可以具体用于:通过第一消息发送队列,将所接收到的指令响应结果发送至信息输出装置102。
其中,调度装置101可以将所接收到的指令响应结果发送至第一通信接口模块110,以使第一通信接口模块110将所接收到的指令响应结果存储至第一消息发送队列,并将存储至第一消息发送队列的用户指令发送给信息输出装置102;或者,在接收到信息输出装置102发送的第三指令获取请求时,将存储至第一消息发送队列的用户指令发送给信息输出装置102。
其中,调度装置101在接收到指令响应结果后,可以将该指令响应结果发送至第一通信接口模块110,从而,第一通信接口模块110可以将所接收到的指令响应结果存储至第一消息发送队列。
这样,第一通信接口模块110可以自动将存储至第一消息发送队列的指令响应结果发送给信息输出装置102。例如,第一通信接口模块110可以按照预设周期从第一消息发送队列中读取消息,并在读取到上述指令响应结果时,将该信息输出装置102发送给信息输出装置102。
第一通信接口模块110也可以在接收到信息输出装置102发送的第三指令获取请求时,将存储至第一消息发送队列的指令响应结果发送给信息输出装置102。例如,信息输出装置102可以按照预设周期向第一通信接口模块110发送第三指令获取请求,在每次接收到上述第三指令获取请求时,第一通信接口模块110便可以从第一消息发送队列中读取消息,并在确定所读取到的消息为上述指令响应结果时,将该指令响应结果发送给信息输出装置102。
此外,可选的,一种具体实现方式中,上述第一通信接口模块110还可以包括第三消息接收队列,第三通信接口模块130可以包括第三消息发送队列。
其中,可选的,第一通信接口模块110所包括的第三消息接收队列可以用于存储除调度装置101之外的其他装置所发送的消息,例如,第一通信接口模块110可以接收信息输出装置102所发送的消息,并将该消息存储至第三消息接收队列。
相应的,可选的,第三通信接口模块130所包括的第三消息发送队列可以用于存储向除调度装置101之外的其他装置发送的消息,例如,存储向本地引擎装置104发送的消息,示例性的,第三通信接口模块130可以接收调度装置101所发送的消息,并将该消息存储至第三消息发送队列,进而,便可以从该第三消息发送队列中读取该消息,并将该消息发送至本地引擎装置104。
在一些情况中,用户希望可以通过语音控制本地的功能装置,例如,在车载的语音交互***中,用户希望可以通过语音控制车窗的开关、播放音乐等。而在这些情况下,用于响应用户指令的目标功能装置为本地功能装置,而非网络连接装置103。
基于此,可选的,一种具体实现方式中,本地引擎装置104通过第三通信接口模块130,将用户指令发送给调度装置101,包括:
若用于响应用户指令的目标功能装置为网络连接装置103,通过第三通信接口模块130,将用户指令发送给调度装置101。
在本具体实现方式中,在识别得到用户指令后,本地引擎装置104可以首先确定用于响应用户指令的目标功能装置,进而,若用于响应用户指令的目标功能装置为网络连接装置103,则本地引擎装置104便可以通过第三通信接口模块130,将用户指令发送给调度装置101。
进一步的,可选的,一种具体实现方式中,本地引擎装置104还可以用于:若用于响应用户指令的目标功能装置为本地功能装置,调用目标功能装置,以使目标功能装置响应用户指令。
在本具体实现方式中,若本地引擎装置104确定出用于响应用户指令的目标功能装置为本地功能装置,则本地引擎装置104可以不将用户指令发送给调度装置101,而直接调用目标功能装置,这样,所调用的目标功能装置便可以响应用户指令。
基于此,为了能够实现对目标功能装置的调用,可选的,一种具体实现方式中,本地引擎装置104可以包括:本地功能调用子装置(System API)。
其中,本地功能调用子装置便可以用于:若用于响应用户指令的目标功能装置为本地功能装置,调用目标功能装置,以使目标功能装置响应用户指令。
也就是说,若本地引擎装置104确定出用于响应用户指令的目标功能装置为本地功能装置,则可以启动本地功能调用子装置调用目标功能装置,这样,所调用的目标功能装置便可以响应该用户指令。
可以理解的,不同类型的消息的处理流程可以不一样,其中,为了提高代码可读性,可以使用消息列表记录各个消息。其中,每个消息在消息列表中占用一行,用消息号码作为索引,并且,每个消息的消息号码为一个唯一的整数值,并且,消息列表中还可以包括消息来源、消息目的、消息处理函数等与消息有关的信息。
可选的,可以将消息分为无状态消息和有状态消息,两种消息。
其中,所谓无状态消息是指:在接收到消息后,可以直接进行简单处理的消息,例如,在接收到一个消息后,可以根据该消息调用一个***函数,或者,转换该消息的格式,从而,将格式转换后的消息发送给下一个接收者等。
所谓有状态消息是指收:在接收到消息后,需要与其他的线程或装置进行交互,并且通过交互结果确定后续对该消息的处理方式。例如,所接收到的消息是“启用麦克风录音设备”,则需要查看录音设备是否启用,如果启用,则可以忽略该“启用麦克风录音设备”的消息。
如表1所示,为无状态消息的消息列表:
表1
其中,message表示消息号;source表示消息来源;dest表示消息转发的目的地,可选的,部分消息不需要转发,直接在调度装置101中终结;proHandle表示预处理函数指针,用于表示消息接收后的第一个处理函数;instance表示消息对应的通信接口模块实例,或者,消息对应的处理模块实例。
如图4所示,为有状态消息的消息列表;其中,最左边的每一个消息对应中间的一个FSM(Finite State Machine,有限状态机),每个FSM为用于表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,进而,每个FSM可以利用右边的一张状态机列表进行表示。
每个状态机列表中可以包含消息、当前状态、下一个状态和调用函数4个元素,下面详细介绍每一个元素:
消息:指当前接收到的消息,例如,从GUI用户界面接收到启动录音命令VR_START。
当前状态:指FSMD当前所处的状态,例如,如表2所示的录音设备的状态机列表中,可以包括5种状态,分别为:STOPPED(关闭状态)、STARTED(开启状态)、STARTING(正在开启状态)、STOPPING(正在关闭状态)和VR_STARTED,进而,当前状态可以是STOPPED,也可以是STARTING,还可以是STARTED。
下一个状态:指收到消息以后状态切换到下一个的状态。
调用函数:指收到消息以后调用的处理函数。
表2:
消息 |
当前状态 |
下一个状态 |
调用函数 |
Event |
State |
Nextstate |
Action |
VR_START |
StopPED |
STARTING |
doVRstart() |
VR_Stop |
STARTED |
StopPING |
doVRstop() |
START_TIMEOUT |
STARTING |
StopPED |
None |
Stop_TIMEOUT |
StopPING |
StopPED |
None |
VR_START |
STARTED |
None |
None |
…… |
…… |
…… |
…… |
其中,消息包括:VR_START(开启录音设备);VR_STOP(关闭录音设备);START_TIMEOUT(开启录音设备超时);STOP_TIMEOUT(关闭录音设备超时);
当前状态和下一状态包括:STOPPED;STARTED;STOPPING;STARTING;
调用函数包括:doVRstart()(执行开启录音设备的动作);doVRstop()(执行关闭录音设备的动作)。
进而,表2中第1行表示:收到VR_START消息,如果当前状态是STOPPED状态,则进入下一个状态STARTING,并且执行doVRstart()函数。
表2中第2行表示:收到VR_STOP消息,如果当前状态是STARTED,则进入下一个状态STOPPING,并且调用doVRstop()函数。
表2中第3行表示:收到START_TIMEOUT消息,该消息代表在启用录音设备时超过了预定时间后没有启用成功,如果当前状态为STARTING,则进入下一个状态STOPPED状态,调用函数字段为none,则表示不调用任何函数。
进而,表2中的其他行所表示的内容与前3行的内容类似,在此不再赘述。
进一步的,录音设备状态机的状态转移如图5所示,其中,位于弧线上的文字表示收到的消息,圆圈上的文字表示当前状态,弧线箭头方向表示状态变化趋势。
基于此,由于在实际应用中,可以将上述用户指令作为一种消息,那么,针对不同的消息指令,本地功能调用子装置所采用的处理流程也可以是不同的。
其中,可选的,一种具体实现方式中,上述本地功能调用子装置具体用于:
若用户指令的指令类型为无状态消息,则调用目标功能装置,以使目标功能装置响应用户指令;
若用户指令的指令类型为有状态消息,且目标功能装置处于可用状态,则调用目标功能装置,并更新目标功能装置的状态,以使目标功能装置响应用户指令。
进一步的,可选的,一种具体实现方式中,上述网络连接装置103在接收到上述用户指令后,可以首先确定该用户指令的指令类型,以及用于提供该用户指令所指示的获取的信息的CP。
进而,当用户指令的指令类型为无状态消息,则上述网络连接装置103可以与所确定的CP建立网络连接,以使得所确定的CP可以根据上述用户指令,提供上述信息。
相应的,当用户指令的指令类型为有状态消息,则需要进一步确定上述CP是否处于可用状态,从而,若该CP处于可用状态,则上述网络连接装置103可以与所确定的CP建立网络连接,以使得所确定的CP可以根据上述用户指令,提供上述信息;否则,可以忽略上述用户指令。
相应于本发明实施例提供的一种语音交互***,在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述语音交互***中,任一装置所执行的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述语音交互***中,任一装置所执行的步骤。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于计算机可读存储介质实施例,以及计算机程序产品实施例而言,由于其基本相似于***实施例,所以描述的比较简单,相关之处参见***实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。