APP下载

基于微信公众号的医学检验仪器故障智能问诊系统

2020-06-29张喜红王玉香

关键词:图灵知识库仪器

张喜红,王玉香

(亳州职业技术学院,安徽 亳州 236800)

0 引言

医疗设备在疾病诊查、临床治疗、术后评估等方面具有重要的意义,现已成为评价医院医疗水平高低的关键指标之一[1]。随着医疗设备产业的蓬勃发展,厂家售后服务出现了巨大的人才缺口。招纳、培养新人是厂家快速补给人才的主要渠道,然而多数医疗设备具有技术先进、多学科交叉、知识密集、结构复杂、集成度高等特点,新入职维修人员很难在短时间内精通各类仪器的维修方法。其次,维修人员的培养需采用“传、帮、带”的模式[2],然而现实情况是有经验的工程师因工作繁忙,无法顾及人才培养工作。因此,本文开发了一款故障智能问诊系统,协助新入职维修人员较早胜任维修工作。

自1968年推断化学分子结构的专家系统问世以来,在各领域掀起了以人工智能专家系统替代真人专家工作内容的研究热潮。经过多年的研究积累,故障诊断专家系统在机械设备、电力设备、航天设备等领域的应用已日趋成熟,但大多运行于PC机上,存在便携性、移动性较差的缺点,难以满足工作人员外出维修作业的要求[3]。近年来,随着移动互联网技术的发展,特别是智能手机的普及,基于移动终端开发的故障诊断系统相继出现。目前,基于移动终端开发的故障诊断系统主要有两类:一类是基于安卓原生态APP模式,另一类是基于微信小程序或公众号前后台交互模式。因前者需安装本地APP软件,对移动终端硬件配备有要求,相比之下后者更受青睐。其次,伴随着图灵API开放应用接口应用平台的出现,因其提供NLP服务、支持自定义知识库,对于功能不太复杂的人工智能问诊系统,在开发时为了提高效率、降低开发难度,大多采用图灵API服务器充当专家系统推理机与知识库后台[4]。

基于上述背景,本文以微信公众号为交互前端,微信后台与自定义公众号服务器为中间件,图灵机器人为故障问诊后台,设计了一款医学检验仪器故障智能问诊系统。

1 系统总体设计

故障智能问诊系统属人工智能专家系统范畴。专家系统发展至今,大致可分为两大类,一类是基于知识的专家系统,另一类是基于神经网络等算法的系统。基于知识的专家系统是一种将专家经验知识采用某种知识表示方式(如产生式),建立故障现象与故障原因间的映射关系,并将其存储到知识数据库中,当故障发生时,输入故障现象,通过特定的推理方法从知识数据库中推究故障原因的计算机程序[5]。鉴于医学检验仪器维修工作人员能否做好维修工作与其经验积累程度呈正相关,在系统设计时采用基于知识的专家系统结构。

基于知识的专家系统由人机对话前端、知识库和推理机3部分组成。人机对话模块是用户发起故障问诊的交互前端,设计时应以易于交互、方便推广为原则。鉴于微信公众号运行于移动终端、易于推广的优势,在系统设计时选用微信公众号作为人机对话前端[6-7]。

知识库与推理机好比整个系统的大脑,自行构建知识库与推理机运行平台是一项艰巨的工作,且后期需要投入大量的人力物力进行维护。鉴于医学检验仪器故障问诊系统的业务逻辑相对单一,在设计中选用图灵机器人实现智能问答功能,以其等效替代专家系统的推理机。通过行业专家访谈、文献整理等多种渠道获取各类仪器的故障排查经验,并将其转化为图灵机器人平台的定制化语料库,作为专家系统的知识库。由于图灵服务器平台对一个机器人所能存储的自定义知识库有容量限制,在设计时采用多账号多机器人方式,每个机器人分别与一类检验仪器的故障知识相对应。

微信公众号在信息交互时采用的是XML格式消息,图灵API服务器平台采用的是JSON格式消息,两者之间无法直接交互,需通过一公众号服务器进行格式变换与中转。基于Python开发的Flask Web服务器框架简洁易用,在系统设计时采用Flask Web服务器框架构建公众号服务器[8-10]。最终设计的医学检验仪器故障智能问诊系统的系统结构如图1所示。

图1 系统总体结构框图Fig.1 Systematic block diagram

2 系统关键环节的实现方法

2.1 故障知识库的整理

多数医学检验仪器在设计时为了方便后期的维护,采用了模块化设计的理念。即以功能为尺度将仪器划分为相对独立的单元模块,各个模块间通过总线相连进行信号传递。此种设计理念促使医学检验仪器的维修内容从元件级的维修简化为板卡级的维修,在一定程度上降低了故障排查的难度。无论是元件级维修还是板卡级维修,工程师故障诊查活动的本质是一个由现象到原因的推理过程,即依据故障现象推断故障原因,定位故障位置的过程。其次,同一故障现象可能由多种故障原因引起,即一个故障现象发生时,可能是由单一因素引起,也有可能是多种因素共同作用的结果。再者,引发同一故障现象的各种故障原因发生的概率有大有小。因此,在某一故障现象发生时,对各种可能原因的排查应有先后之分。概率较大的因素称之为常见故障,是故障现象出现时应该优先检查的内容;概率较小的因素称之为罕见故障,是故障排查时靠后检查的内容。

基于上述分析,设计了如下所示的知识库整理流程,以优利特干化学式尿液分析仪试纸感应模块的故障诊断知识库整理为例进行说明,具体实施步骤如下:

1)按仪器功能模块收集故障征兆集:参照厂家说明书,依据仪器的原理及组成结构将仪器模块化分解,收集各功能模块故障时的故障征兆集。如试纸感应模块故障时,对应的征兆现象为“放入试纸条后,拨杆不动作!”。

2)故障征兆产生原因的罗列:采用产生式方法的逻辑,由现象为顶层尽可能多地罗列引起现象发生的原因。如:“放入试纸条后,拨杆不动作!”对应的原因有:红外感应模块被遮挡;红外感应模块线路损动;红外感应模块的红外对管元件损坏;拨杆电机故障。

3)对故障原因进行优先级排序:采用专家打分或实例统计方法,对某一故障现象对应的多种原因按发生的概率大小进行排序。例如:“放入试纸条后,拨杆不动作!”这一现象产生时,经行业专家打分,由“红外感应模块被遮挡”引起的可能达80%以上;由“红外感应模块线路损动”引起的可能达60%左右;由“红外感应模块红外对管元件损坏”引起的可能不到20%;由“拨杆电机故障”引起的可能仅为5%;由此可见,当“放入试纸条后,拨杆不动作!”这一故障现象出现时,依据各原因的概率大小排列,在故障排查时,首先应引导用户先排查红外感应模块是否被遮挡;如故障仍未解决,接着引导用户检查红外感应模块与主控板线路间是否有接触不良,依次类推,若故障还是未能解决才引导用户做后两项检查。

2.2 图灵机器人的接入设计

图灵API服务器注册一个账号可同时创建5个独立的机器人,图灵机器人支持用户自定义语料库,一个图灵机器人可允许用户添加内容容量不超过5 M,问题条数不超过1 027条的自定义语料库[11]。针对检验仪器设备种类较多、故障问诊条数较多、故障知识库所需存储空间较大,及图灵机器人自定义语料库受限的情况,在接入图灵机器人时采用多账号、多机器人方式,即每个机器人负责一种检验仪器故障问题的回答,机器人数量的扩增方法采用注册多个账号,每个账号创建5个独立的机器人实现;访问时通过“userId”参数标识用户账号,通过“apiKey”标识某一账号下的机器人编号。

图灵机器人对自定义语料的格式也有相应的要求,语料库的格式如表1所示,其中问题长度不多于64个字符,答案长度不超过600个字符。所以需将文中2.1节中的原始知识库进行简化处理。其中“问题”一行与2.1节中原始知识库的故障现象相对应,当仪器故障时,是用户向机器人发问的首选描述方式,在内容设计时应采用行业专家的标准述语。“相似问法”是同一问题的不同问法,也是体现机器人智力水平的重要因素,在内容设计时要与标准述语的语义相同。“答案”是引起故障现象的可能原因,在内容设计时依据发生概率的优先级按序编号罗列,用户排除故障时按编号从小到大依次进行。

表1 图灵机器人自定义语料库格式示例Tab.1 Examples of Turing Robot Custom Corpus format

2.3 Flask微信公众号服务器接入的实现

微信公众号为用户提供了基础模式与开发者模式两种模式[8],基础模式只能按公众号的约定规则进行简单的业务处理,本系统需使用开发者模式接入自定义Web服务器,即采用“开发者模式”+“Flask Web框架服务器”方式。Flask Web服务器框架通过简单route()装饰器配置便可实现GET、POST等多种方法的HTTP请求[9]。依据公众号开发者模式的消息交互流程,用户接入开发者模式可归纳为如下两步:

1)在微信公众号管理后台填写、配置自定义服务器URL地址、Token参数,其中Token参数可自定义,但与Flask微信公众号服务器要保持一致。

2)自定义公众号服务器的接入校验,其流程是:当用户向微信后台提交了开发者模式配置请求后,微信后台会通过GET方法携带signature、timestamp、nonce、echostr 4项参数,向自定义服务器发出校验请求;自定义服务器在收到请求后,首先将1)中填写Token与timestamp、nonce参数按序拼接成一个字符串后,进行SHA1加密,接着将加密得到的字符串与signature参数对比,若二者相同则原样返回echostr参数的内容,代表接入验证成功,反之接入失败。

2.4 微信后台与Flask微信公众号服务器消息交互的实现

微信后台与自定义服务器之间的消息交互统一采用如图2所示的XML格式模板进行交互[12],其中ToUserName、FromUserName与标签之间的内容为收、发双方的帐号,二者在请求与回应消息时需对调,用于标识消息的来源与去向;CreateTime为消息创建时间;MsgType标签间的内容用于标识消息的类型,本系统中只存在文本消息的交互,因此将其参数固定为“text”;Content标签间的内容是具体的消息内容。

图2 微信后台XML格式消息模板Fig.2 WeChat backstage XML format message template

Flask微信公众号服务器向微信后台回复消息的函数代码如下所示:

2.5 Flask微信公众号服务器与图灵机器人消息交互的实现

由2.2节可知,在系统设计时图灵机器人的接入采用多账号、多机器人方式接入,一种检验仪器对应一个图灵机器人。因此用户在发送信息时需携带访问哪个图灵机器人的标志信息,具体的做法是采用“(仪器名称)+(故障现象)”的格式作为公众号前端用户请求的模板,“+”前“仪器名称”用于标识将要访问的图灵机器人,“+”后的“故障现象”是向对应图灵机器人提出的问诊内容。在Flask微信公众号服务器中事先将图灵机器人账号userId与图灵机器人密钥apiKey按仪器名称为索引进行定义,访问时可通过tl_userId[′尿液分析仪′]、tl_apiKey[′尿液分析仪′]的格式取到对应的账号与机器人密钥,示例代码如下所示。

#图灵机器人用户账号:userId与机器人密钥:apiKey的设置

Flask微信公众号服务器故障问诊业务的处理流程如下所示:

1)微信后台向Flask微信公众号服务器上传消息的请求方式采用POST方法,因此首先判断来自公众号的请求是否是POST请求消息,如果是,则从XML格式消息中分别提取ToUser-Name、FromUserName、CreateTime、MsgType、Content中的内容。公众号消息的解析通过 xml.etree.ElementTree包实现,具体实现代码如下所示:

2)如果内容类型是文本消息,则以“+”为标识拆分解析Content标签中的消息内容,得到相应机器人的账号标识字符串,以及故障问诊内容字符串。具体实现代码如下所示:

3)依据2)中的机器人标识查找对应机器人的用户账号userId与机器人密钥apiKey,连同2)得到故障问诊内容,构造访问图灵机器人的JSON格式数据包,并通过POST方式携带JSON格式数据包请求图灵机器人响应;图灵机器人成功响应后,将返回JSON格式的故障诊查流程数据包。具体实现代码如下所示:

4)解析步骤3)中图灵机器人返回的JSON数据包内容,提取包中的“故障诊查建议”,将1)中的ToUserName、FromUserName对调后,构造微信XML格式数据包,将数据返回到微信服务器端。

3 系统测试

在PyCharm2016.3.3中创建Flask微信服务器Python脚本文件,并将启动脚本运行app.run()语句中的host参数设为host= '0.0.0.0',端口号参数设为port= 8 000,实现支持外网访问。接着使用花生壳内网穿透软件,将本机IP地址、端口号绑定到花生壳的域名上,为了与微信公众号的规定一致,需将花生壳的外网端口设为80。接着将花生壳提供的Flask微信服务器域名填入微信公众号管理后台的对应页面中。关注微信公众号后,进行故障问诊模拟测试,图3和图4为部分测试结果,测试结果显示系统运行稳定。

图3 测试实例一Fig.3 Test example 1

图4 测试实例二Fig.4 Test example 2

4 结语

本文以医学检验仪器的故障诊查为例,以微信公众号为交互前端,Flask Web框架公众号服务器为中间桥梁,图灵机器人为后台,实现了一款医学检验仪器故障智能问诊系统。经实际应用测试显示,其运行稳定,能为维修人员提供可靠的维修建议。本系统的设计方案可为快速开发医疗设备行业的故障智能问诊系统提供参考。

猜你喜欢

图灵知识库仪器
《现代仪器与医疗》2022年征订回执
哈啰电动车发布智能新品哈啰B70 PRO,推出智能平台图灵T30
《现代仪器与医疗》2022年征订回执
汉语近义词辨析知识库构建研究
新英镑
基于TRIZ与知识库的创新模型构建及在注塑机设计中的应用
我国古代的天文仪器
人工智能简史
高速公路信息系统维护知识库的建立和应用
语言与图灵测试