一种跨场景任务型对话方法及系统与流程

文档序号:31869026发布日期:2022-10-21 18:02阅读:104来源:国知局
一种跨场景任务型对话方法及系统与流程

1.本发明涉及对话系统技术领域,更具体地说,涉及一种跨场景任务型对话方法及系统。


背景技术:

2.对话系统一般可以分成三个大类:任务型对话系统、闲聊型对话系统、问答型对话系统,本发明主要的研究对象是任务型对话系统。任务型对话通常情况下是为了满足带有明确目的的用户,例如查天气、打电话、订票、订餐等等。由于用户的需求较为复杂,通常情况下需分多轮互动,用户也可能在对话过程中不断修改与完善自己的需求,任务型机器人需要通过询问、澄清和确认来帮助用户明确目的。
3.而在任务型对话中,用户的实际的需求可能不仅仅只用一个场景就可以解决,比如:用户在订票的过程中,需要在对话进行的中途进行天气的查询以确定自己的订票需求,而当前的大部分的对话产品则无法满足用户的这种需求。现有技术的对话系统针对订票和查天气的跨场景应用,若出现任务跳转情况,针对订票和查天气的跨场景复杂任务,可能会出现词槽混乱,对话难以进行的情况。
4.目前学术界对跨场景任务的解决方案几乎是空白,针对市面上的任务型机器人对于跨场景任务主要有以下几种方案:
5.1、针对特定场景进行定制。
6.这是目前比较主流的方案。比如,针对订票场景,定制化加入查天气场景任务,将查天气的任务的词槽变成订票场景任务的可选词槽,则可以实现在订票时查询天气后继续订票的需求。
7.但是,这种方式需要对每个场景都进行一一定制、可拓展性不强,且需要人工设定大量规则,当新场景引入时,需要做大量的重复工作,且不够智能。
8.2、通过深度学习生成系统决策。
9.这种方法是指利用大量的跨场景对话数据进行训练,依据时间和之前的对话状态,学习是否应该跳转场景以及保留当前的词槽。但是,这种方式依赖于大量的训练数据,而在现实场景中,这种真实问答对的对话数据难以获得,训练的成本较高,在工业上难以实现。


技术实现要素:

10.本发明提供了一种跨场景任务型对话方法及系统,解决现有技术针对跨场景复杂任务可能会出现词槽混乱,对话难以进行;需要对每个场景都进行一一定制、可拓展性不强,且需要人工设定大量规则,当新场景引入时,需要做大量的重复工作,且不够智能;真实问答对的对话数据难以获得,训练的成本较高,在工业上难以实现的问题。
11.为解决上述问题,第一方面,本发明提供了一种跨场景任务型对话方法,包括:
12.识别对话的意图及实体;
13.依据所述对话的意图及实体激活跨场景任务;
14.依据所述对话的意图及实体执行对话场景转换动作。
15.还包括:
16.搭建redis集群及搭建rasa对话系统。
17.所述搭建redis集群,包括:
18.创建多个redis实例;
19.启动每个所述redis实例;
20.使用ruby脚本搭建集群以使所述集群可被使用;
21.创建关闭所述集群的脚本。
22.所述搭建rasa对话系统,包括:
23.设置意图和实体类别;
24.设置领域配置文件以生成任务型对话;
25.设置对话模板文件以训练对话管理模型;
26.训练自然语言理解模型并使所述自然语言理解模型可被调用。
27.所述依据所述对话的意图及实体激活跨场景任务,包括:
28.判断当前任务场景和当前对话意图所需要激活的场景是否一致;
29.若当前任务场景和当前对话意图所需要激活的场景不一致,则激活跨场景任务;
30.若当前任务场景和当前对话意图所需要激活的场景一致,则输出对应信息。
31.所述依据所述对话的意图及实体执行对话场景转换动作,包括:
32.判断是否需要直接跳转;
33.若需要直接跳转,则直接跳转进入新场景,执行新场景中对应的动作所需要的事件;
34.若不需要直接跳转,则抛出失败消息或者澄清消息,并且将当前的事件状态保存在redis集群中以使下一次交互时复现当前的对话状态;
35.若抛出的消息为澄清消息,则还需要进行下一次交互的对话;
36.判断下一次交互的对话的意图是否为确认;
37.若下一次交互的对话的意图为确认,则激活确认场景转换任务,更新消息通道及对话追踪器,执行场景转化的动作,并返回对应的事件列表;
38.若下一次交互的对话的意图为没有确认,则将对话追踪器还原为进入跨场景动作前的原始状态;
39.其中,通过重写rasa的事件类action的子类formaction和mappingaction中的run函数,定义动作的执行流程,从而实现激活场景事件动作和任务跳转事件动作。
40.第二方面,提供一种跨场景任务型对话系统,包括识别模块、激活模块及执行模块:
41.所述识别模块用于识别对话的意图及实体;
42.所述激活模块用于依据所述对话的意图及实体激活跨场景任务;
43.所述执行模块用于依据所述对话的意图及实体执行对话场景转换动作。
44.还包括搭建模块:
45.所述搭建模块用于搭建redis集群及搭建rasa对话系统;
46.其中,所述搭建redis集群,包括:
47.创建多个redis实例;
48.启动每个所述redis实例;
49.使用ruby脚本搭建集群以使所述集群可被使用;
50.创建关闭所述集群的脚本;
51.所述搭建rasa对话系统,包括:
52.设置意图和实体类别;
53.配置领域文件以生成任务型对话;
54.生成对话模板文件以训练对话管理模型;
55.训练自然语言理解模型并使所述自然语言理解模型可被调用。
56.所述激活模块包括场景判断子模块、场景激活子模块及输出子模块:
57.所述场景判断子模块用于判断当前任务场景和当前对话意图所需要激活的场景是否一致;
58.所述场景激活子模块用于在当前任务场景和当前对话意图所需要激活的场景不一致时,激活跨场景任务;
59.所述输出子模块用于在当前任务场景和当前对话意图所需要激活的场景一致时,输出对应信息;
60.所述执行模块用于包括跳转判断子模块、事件执行子模块、状态保存子模块、意图判断子模块、任务激活子模块及还原子模块:
61.所述跳转判断子模块用于判断是否需要直接跳转;
62.所述时间执行子模块用于在需要直接跳转时,直接跳转进入新场景,执行新场景中对应的动作所需要的事件;
63.所述状态保存子模块用于在不需要直接跳转时,抛出失败消息或者澄清消息,并且将当前的事件状态保存在redis集群中以使下一次交互时复现当前的对话状态;
64.所述意图判断子模块,用于在抛出的消息为澄清消息时,进行下一次交互的对话,并判断下一次交互的对话的意图是否为确认;
65.所述任务激活子模块用于在下一次交互的对话的意图为确认时,激活确认场景转换任务,更新消息通道及对话追踪器,并返回对应的事件列表;
66.所述激活子模块用于在下一次交互的对话的意图为没有确认时,将对话追踪器还原为原始状态;其中,通过重写rasa的事件类action的子类formaction和mappingaction中的run函数,定义动作的执行流程,从而实现激活场景事件动作和任务跳转事件动作。第三方面,提供一种计算机可读存储介质,其特征在于,所述存储介质中存储有多条指令,所述指令适于由处理器加载以执行如上所述的一种跨场景任务型对话方法。
67.本发明的有益效果是:
68.基于rasa和redis集群实现了跨场景任务型对话机器人,具有快速地引入支持复杂场景的对话技能,可以实现各种复杂场景的跨场景任务,避免了人工生成大量规则去定制此类复杂场景,为意图继承等相似问题提供了思路。
附图说明
69.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
70.图1是本发明提供的一种跨场景任务型对话方法的流程图;
71.图2为本发明提供的初始场景激活示意图;
72.图3为本发明提供的新场景任务跳转示意图;
73.图4为本发明提供的回溯初始场景状态示意图;
74.图5是本发明提供的针对订票和查天气的跨场景的对话效果图。
具体实施方式
75.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
76.在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
77.在本发明中,“示例性”一词用来表示“用作例子、例证或说明”。本发明中被描述为“示例性”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本发明,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现本发明。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本发明的描述变得晦涩。因此,本发明并非旨在限于所示的实施例,而是与符合本发明所公开的原理和特征的最广范围相一致。
78.本案中出现的名词解释如下:
79.1、rasa
80.rasa是一个用于构建对话系统的开源机器学习框架。它主要包含以下两个模块:
81.(1)rasa nlu:用于理解用户消息,包括意图识别和实体识别,负责将用户的输入转换为结构化的数据。
82.(2)rasa core:是一个对话管理平台,用于进行对话和决定下一步做什么。
83.2、redis
84.redis(remote dictionary server),即远程字典服务,是一个开源的使用ansi c
语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。
85.3、nlu
86.nlu(natural language understanding)一般指自然语言理解。在对话系统中,运用到的nlu技术主要包括意图识别和实体抽取(也叫词槽抽取),例如用户询问“今天天气怎么样”,这个属于询问天气的意图,要完成这个意图需要的2个实体分别是时间和地点,而对话系统的nlu模块的任务就是将这个意图和这2个实体抽取出来。
87.4、dm
88.对话管理(dialog management),实际上就是一个决策过程,它控制着人机对话的过程,它会根据对话的历史信息,决定该对用户做出什么样的反应。
89.5、跨场景对话
90.跨场景,又可称为任务跳转,即用户在执行一个特定任务的对话的中途跳到另一个场景的任务型对话的行为。
91.6、意图继承
92.意图继承是通过对话管理的对话数据追踪,针对“明天呢”等nlu无法判断或者难以判断意图的任务,可以通过继承之前的意图来达到识别当前对话意图的方法。
93.请参阅图1,图1是本发明提供的一种跨场景任务型对话方法的流程图。该跨场景任务型对话方法包括步骤s1-s3:
94.s1、识别对话的意图及实体;
95.本实施例中,根据业务查询和办理的场景,首先需要确定意图和实体的类别。意图和实体类别具体参见步骤s4中设置意图和实体类别。
96.s2、依据所述对话的意图及实体激活跨场景任务;步骤s2包括步骤s21-s23:
97.s21、判断当前任务场景和当前对话意图所需要激活的场景是否一致;
98.本实施例中,在rasa的配置文件的领域domain.yml中,意图intents中定义了switch_task、affirm_switch_task和deny_switch_task三个动作意图,分别代表激活跨场景任务、确认场景转换任务、取消场景转换任务,对应action_switch_task、action_affirm_switch_task、action_deny_switch_task三个动作。而意图的定义主要是在nlu的pipeline中的修正意图模块中实现,首先,我们需要明确什么时候需要激活跨场景任务——当前任务场景和当前对话意图所需要激活的场景不一致时,由此,再修正意图的部分。
99.s22、若当前任务场景和当前对话意图所需要激活的场景不一致,则激活跨场景任务;
100.本实施例中,引入跨场景意图修改机制,针对当前任务场景和当前对话意图所需要激活的场景不一致的情况,将当前意图修改为“switch_task”意图,对应激活“action_switch_task”动作,进而结合当前场景的情况抛出是否需要澄清还是直接执行新的场景的事件。
101.当抛出澄清时,则对于用户的下一轮反馈相对应的有两种意图,这两种意图同样的是在nlu的pipline中的修正意图模块中实现:“affirm_switch_task”意图识用户确认需要跳转场景,而“deny_switch_task”则是用户没有确认需要跳转场景,则默认停留在当前
的未完成的场景。
102.s23、若当前任务场景和当前对话意图所需要激活的场景一致,则输出对应信息。
103.s3、依据所述对话的意图及实体执行对话场景转换动作。步骤s3包括步骤s31-s36:
104.本实施例中,rasa的formaction和mappingaction的实现原理为:formaction和mappingaction都是action的子类,一个动作action的实现需要2个基本的函数:name(定义动作名)、run(定义动作的执行流程,传入消息通道dispatcher、对话追踪器tracker、领域的定义domain,返回事件列表events),由此可以看出rasa执行动作的基本方式就是将该场景所需要记录和追踪的消息以及对话状态通过dispatcher、tracker追踪,并且返回序列化的可执行对象events。
105.对应的,formaction是针对需要填槽的多轮对话场景的action,它在基本的action类中增加了词槽的填充和验证、以及submit等操作,在主要操作函数run中,执行上述动作。
106.而mappingaction是通过意图直接激活的action,通过重写run函数可以针对不同的意图定制化不同的动作事件。
107.s31、判断是否需要直接跳转;
108.本实施例中,针对跨场景意图所需要执行的动作,通过分析,应当判断是否需要直接跳转。
109.s32、若需要直接跳转,则直接跳转进入新场景,执行新场景中对应的动作所需要的事件;
110.本实施例中,如果需要跳转,那么则需要直接跳转进入新的场景的formaction中,执行对应的动作所需要的事件(即执行新的formaction的run函数)。
111.s33、若不需要直接跳转,则抛出失败消息或者澄清消息,并且将当前的事件状态保存在redis集群中以使下一次交互时复现当前的对话状态;
112.本实施例中,如果不需要跳转,则抛出失败消息或者澄清消息,并且将当前的事件状态保存进入redis中,以便下一次交互时复现当前的对话状态。
113.s34、若抛出的消息为澄清消息,则还需要进行下一次交互的对话,判断下一次交互的对话的意图是否为确认;
114.s35、若下一次交互的对话的意图为确认,则激活确认场景转换任务,更新消息通道及对话追踪器,并返回对应的事件列表;
115.本实施例中,如果需要澄清,且下一轮的对话的意图是确认,那么激活动作action_affirm_switch_task,直接在run函数中更新tracker和dispatcher为new_tracker.current_state()和temp_dispatcher.messages,并返回new_events。
116.s37、若下一次交互的对话的意图为没有确认,则将对话追踪器还原为进入跨场景动作前的原始状态;其中,通过重写rasa的事件类action的子类formaction和mappingaction中的run函数,定义动作的执行流程,从而实现激活场景事件动作和任务跳转事件动作。
117.本实施例中,如果没有确认,则将tracker还原为原始状态"current_form":tracker.current_state()。
118.优选的,该跨场景任务型对话方法还包括步骤s4:
119.s4、搭建redis集群及搭建rasa对话系统。
120.其中,所述搭建redis集群,包括步骤s41-s44:
121.s41、创建多个redis实例;
122.本实施例中,redis集群中至少应该有三个节点,要保证集群的高可用,需要每个节点有一个备份机。redis集群至少需要6台服务器,搭建伪分布式,需要6个redis实例,需要运行在不同的端口。其中,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。
123.s42、启动每个所述redis实例;
124.s43、使用ruby脚本搭建集群以使所述集群可被使用;
125.本实施例中,搭建准备需ruby的运行环境,才能使用ruby脚本搭建集群。
126.s44、创建关闭所述集群的脚本。
127.所述搭建rasa对话系统,包括步骤s45-s48:
128.s45、设置意图和实体类别;
129.本实施例中,rasa是一个强大的对话系统开源框架,针对其对话系统的搭建过程,由于本发明的重点是跨场景任务的实现,故在此仅阐述任务型对话机器人的基本搭建过程,使用的rasa版本为1.4.3。
130.确定意图和实体类别首先需要设置意图和实体类别,实现rasa对话系统一般需要4大类意图:基础意图、任务意图、填槽意图、动作意图,表1对这4类意图进行了举例说明。
131.表1
[0132][0133]
针对需要填槽的多轮对话场景,确定好领域和子意图之后,还需要确定实体,即需要提取的关键信息,如针对查天气任务,需要抽取日地点、日期和具体时间3个实体,如表2所示。
[0134]
表2
[0135][0136]
[0137]
基于上述设置,数据准备如下:
[0138]
通常项目刚开始,往往伴随着冷启动的问题。没有数据的情况下可以根据实际业务场景自行标注数据并结合规则方式先实现第一版本,线上收集真实数据(如果有机会上线的话),并反过来迭代模型。这里使用的训练数据为结合实际场景的自造数据,并转换为rasa nlu训练数据的格式,供学习使用。
[0139]
s46、设置领域配置文件以生成任务型对话;
[0140]
本实施例中,任务型对话的对话生成(nlg)采用模板方法简单实用,rasa core对模板有很好的支持,在domain.yml文件里定义所需要的意图和实体。
[0141]
s47、设置对话模板文件以训练对话管理模型;
[0142]
本实施例中,对话模板(story)文件中包含各种各样的对话流程,用于训练对话管理模型,由于缺少真实的对话数据,一开始往往采用其他方法收集数据(例如从传统对话管理方法的系统中获取真实数据)。这里使用通过与机器对话的方式来生成对话语料,教机器什么时候说什么话,数据的准备(标注)和完善是一个消耗人力物力的工作。
[0143]
s48、训练自然语言理解模型并使所述自然语言理解模型可被调用。
[0144]
本实施例中,这里使用rasa nlu的pipeline为jieba+正则意图识别+bilstm意图识别+规则实体识别+bilstm_crf实体识别+意图修正+实体修正。
[0145]
至此,基于rasa和redis的跨场景对话系统就得以实现,基于rasa和redis的跨场景对话可以分为以下三轮对话:
[0146]
1、第一轮对话:如图2所示,图2为本发明提供的初始场景激活示意图,表示初始场景的激活过程。
[0147]
(1)用户询问“我想查一下去广州的高铁”,这句话是票务查询意图,并且包含了几个关键信息的词槽。
[0148]
(2)那么我们需要在rasa对话系统中激活出行这个场景,并且借助redis集群将用户的状态(词槽、场景、意图等等用户状态信息)其存入对话状态管理器tracker中去。
[0149]
(3)最后根据rasa会话管理的预测结果生成机器人回复“请问您要查询的日期是?”。
[0150]
(4)词槽未填满,当前场景仍然在激活状态,本轮对话结束。
[0151]
2、第二轮对话,如图3所示,图3为本发明提供的新场景任务跳转示意图,表示新场景任务跳转。
[0152]
(1)用户询问“广州明天天气怎么样”,这句话是查天气意图,而上一个票务查询这个场景未完成,仍然处于激活状态,因此需要对rasa的对话管理模块优化,将用户的意图修正为跨场景意图,并且激活跨场景动作。
[0153]
(2)本发明在rasa中增加了跨场景动作模块,在这个模块中,能够从redis集群中调取用户状态的关键信息,根据词槽和意图情况智能完成是否应该跳转场景的判断。
[0154]
(3)最终完成从票务查询场景跳转到天气场景的动作,机器人回复“广州明天多云
……”

[0155]
(4)天气场景词槽填满,完成天气场景的任务,天气场景不再保持激活状态。
[0156]
3、第三轮对话,如图4所示,图4为本发明提供的回溯初始场景状态示意图,表示回溯初始场景状态。
[0157]
(1)用户询问“那帮我订明天的吧”,这句话是票务预定意图,并且需要继承上次没有完成的票务查询的词槽等状态信息。
[0158]
(2)修正意图为回溯初始场景状态意图,并且激活回溯初始场景状态动作。
[0159]
(3)从redis集群中获取之前未完成的场景状态,将对话管理追踪器tracker回溯到未完成的状态,实现场景复现。
[0160]
(4)回溯场景之后,新增填入的词槽“明天”,此时票务查询的必填词槽已经全部填满,机器人回复“正在为您查询明天去广州的高铁票”,并输出查询的结果。
[0161]
(5)票务查询场景词槽填满,不再保持激活状态,至此,跨场景任务完成。
[0162]
综上,参见图5,图5是本发明提供的针对订票和查天气的跨场景的对话效果图,解决了现有技术中需要重复提出问题的缺陷。
[0163]
同时,本案的一种跨场景任务型对话系统包括识别模块、激活模块及执行模块。
[0164]
所述识别模块用于识别对话的意图及实体;
[0165]
所述激活模块用于依据所述对话的意图及实体激活跨场景任务;
[0166]
所述执行模块用于依据所述对话的意图及实体执行对话场景转换动作。
[0167]
还包括搭建模块:
[0168]
所述搭建模块用于搭建redis集群及搭建rasa对话系统;
[0169]
其中,所述搭建redis集群,包括:
[0170]
创建多个redis实例;
[0171]
启动每个所述redis实例;
[0172]
使用ruby脚本搭建集群以使所述集群可被使用;
[0173]
创建关闭所述集群的脚本;
[0174]
所述搭建rasa对话系统,包括:
[0175]
设置意图和实体类别;
[0176]
配置领域文件以生成任务型对话;
[0177]
生成对话模板文件以训练对话管理模型;
[0178]
训练自然语言理解模型并使所述自然语言理解模型可被调用。
[0179]
所述激活模块包括场景判断子模块、场景激活子模块及输出子模块:
[0180]
所述场景判断子模块用于判断当前任务场景和当前对话意图所需要激活的场景是否一致;
[0181]
所述场景激活子模块用于在当前任务场景和当前对话意图所需要激活的场景不一致时,激活跨场景任务;
[0182]
所述输出子模块用于在当前任务场景和当前对话意图所需要激活的场景一致时,输出对应信息;
[0183]
所述执行模块用于包括跳转判断子模块、事件执行子模块、状态保存子模块、意图判断子模块、任务激活子模块及还原子模块:
[0184]
所述跳转判断子模块用于判断是否需要直接跳转;
[0185]
所述时间执行子模块用于在需要直接跳转时,直接跳转进入新场景,执行新场景中对应的动作所需要的事件;
[0186]
所述状态保存子模块用于在不需要直接跳转时,抛出失败消息或者澄清消息,并
且将当前的事件状态保存在redis集群中以使下一次交互时复现当前的对话状态;
[0187]
所述意图判断子模块,用于在抛出的消息为澄清消息时,进行下一次交互的对话,并判断下一次交互的对话的意图是否为确认;
[0188]
所述任务激活子模块用于在下一次交互的对话的意图为确认时,激活确认场景转换任务,更新消息通道及对话追踪器,并返回对应的事件列表;
[0189]
所述激活子模块用于在下一次交互的对话的意图为没有确认时,将对话追踪器还原为原始状态;其中,通过重写rasa的事件类action的子类formaction和mappingaction中的run函数,定义动作的执行流程,从而实现激活场景事件动作和任务跳转事件动作。
[0190]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种跨场景任务型对话方法中的步骤。
[0191]
其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
[0192]
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种跨场景任务型对话方法中的步骤,因此,可以实现本发明实施例所提供的任一种跨场景任务型对话方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0193]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1