張喜紅,王玉香
(亳州職業(yè)技術(shù)學(xué)院,安徽 亳州 236800)
醫(yī)療設(shè)備在疾病診查、臨床治療、術(shù)后評估等方面具有重要的意義,現(xiàn)已成為評價醫(yī)院醫(yī)療水平高低的關(guān)鍵指標(biāo)之一[1]。隨著醫(yī)療設(shè)備產(chǎn)業(yè)的蓬勃發(fā)展,廠家售后服務(wù)出現(xiàn)了巨大的人才缺口。招納、培養(yǎng)新人是廠家快速補(bǔ)給人才的主要渠道,然而多數(shù)醫(yī)療設(shè)備具有技術(shù)先進(jìn)、多學(xué)科交叉、知識密集、結(jié)構(gòu)復(fù)雜、集成度高等特點,新入職維修人員很難在短時間內(nèi)精通各類儀器的維修方法。其次,維修人員的培養(yǎng)需采用“傳、幫、帶”的模式[2],然而現(xiàn)實情況是有經(jīng)驗的工程師因工作繁忙,無法顧及人才培養(yǎng)工作。因此,本文開發(fā)了一款故障智能問診系統(tǒng),協(xié)助新入職維修人員較早勝任維修工作。
自1968年推斷化學(xué)分子結(jié)構(gòu)的專家系統(tǒng)問世以來,在各領(lǐng)域掀起了以人工智能專家系統(tǒng)替代真人專家工作內(nèi)容的研究熱潮。經(jīng)過多年的研究積累,故障診斷專家系統(tǒng)在機(jī)械設(shè)備、電力設(shè)備、航天設(shè)備等領(lǐng)域的應(yīng)用已日趨成熟,但大多運行于PC機(jī)上,存在便攜性、移動性較差的缺點,難以滿足工作人員外出維修作業(yè)的要求[3]。近年來,隨著移動互聯(lián)網(wǎng)技術(shù)的發(fā)展,特別是智能手機(jī)的普及,基于移動終端開發(fā)的故障診斷系統(tǒng)相繼出現(xiàn)。目前,基于移動終端開發(fā)的故障診斷系統(tǒng)主要有兩類:一類是基于安卓原生態(tài)APP模式,另一類是基于微信小程序或公眾號前后臺交互模式。因前者需安裝本地APP軟件,對移動終端硬件配備有要求,相比之下后者更受青睞。其次,伴隨著圖靈API開放應(yīng)用接口應(yīng)用平臺的出現(xiàn),因其提供NLP服務(wù)、支持自定義知識庫,對于功能不太復(fù)雜的人工智能問診系統(tǒng),在開發(fā)時為了提高效率、降低開發(fā)難度,大多采用圖靈API服務(wù)器充當(dāng)專家系統(tǒng)推理機(jī)與知識庫后臺[4]。
基于上述背景,本文以微信公眾號為交互前端,微信后臺與自定義公眾號服務(wù)器為中間件,圖靈機(jī)器人為故障問診后臺,設(shè)計了一款醫(yī)學(xué)檢驗儀器故障智能問診系統(tǒng)。
故障智能問診系統(tǒng)屬人工智能專家系統(tǒng)范疇。專家系統(tǒng)發(fā)展至今,大致可分為兩大類,一類是基于知識的專家系統(tǒng),另一類是基于神經(jīng)網(wǎng)絡(luò)等算法的系統(tǒng)?;谥R的專家系統(tǒng)是一種將專家經(jīng)驗知識采用某種知識表示方式(如產(chǎn)生式),建立故障現(xiàn)象與故障原因間的映射關(guān)系,并將其存儲到知識數(shù)據(jù)庫中,當(dāng)故障發(fā)生時,輸入故障現(xiàn)象,通過特定的推理方法從知識數(shù)據(jù)庫中推究故障原因的計算機(jī)程序[5]。鑒于醫(yī)學(xué)檢驗儀器維修工作人員能否做好維修工作與其經(jīng)驗積累程度呈正相關(guān),在系統(tǒng)設(shè)計時采用基于知識的專家系統(tǒng)結(jié)構(gòu)。
基于知識的專家系統(tǒng)由人機(jī)對話前端、知識庫和推理機(jī)3部分組成。人機(jī)對話模塊是用戶發(fā)起故障問診的交互前端,設(shè)計時應(yīng)以易于交互、方便推廣為原則。鑒于微信公眾號運行于移動終端、易于推廣的優(yōu)勢,在系統(tǒng)設(shè)計時選用微信公眾號作為人機(jī)對話前端[6-7]。
知識庫與推理機(jī)好比整個系統(tǒng)的大腦,自行構(gòu)建知識庫與推理機(jī)運行平臺是一項艱巨的工作,且后期需要投入大量的人力物力進(jìn)行維護(hù)。鑒于醫(yī)學(xué)檢驗儀器故障問診系統(tǒng)的業(yè)務(wù)邏輯相對單一,在設(shè)計中選用圖靈機(jī)器人實現(xiàn)智能問答功能,以其等效替代專家系統(tǒng)的推理機(jī)。通過行業(yè)專家訪談、文獻(xiàn)整理等多種渠道獲取各類儀器的故障排查經(jīng)驗,并將其轉(zhuǎn)化為圖靈機(jī)器人平臺的定制化語料庫,作為專家系統(tǒng)的知識庫。由于圖靈服務(wù)器平臺對一個機(jī)器人所能存儲的自定義知識庫有容量限制,在設(shè)計時采用多賬號多機(jī)器人方式,每個機(jī)器人分別與一類檢驗儀器的故障知識相對應(yīng)。
微信公眾號在信息交互時采用的是XML格式消息,圖靈API服務(wù)器平臺采用的是JSON格式消息,兩者之間無法直接交互,需通過一公眾號服務(wù)器進(jìn)行格式變換與中轉(zhuǎn)。基于Python開發(fā)的Flask Web服務(wù)器框架簡潔易用,在系統(tǒng)設(shè)計時采用Flask Web服務(wù)器框架構(gòu)建公眾號服務(wù)器[8-10]。最終設(shè)計的醫(yī)學(xué)檢驗儀器故障智能問診系統(tǒng)的系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖Fig.1 Systematic block diagram
多數(shù)醫(yī)學(xué)檢驗儀器在設(shè)計時為了方便后期的維護(hù),采用了模塊化設(shè)計的理念。即以功能為尺度將儀器劃分為相對獨立的單元模塊,各個模塊間通過總線相連進(jìn)行信號傳遞。此種設(shè)計理念促使醫(yī)學(xué)檢驗儀器的維修內(nèi)容從元件級的維修簡化為板卡級的維修,在一定程度上降低了故障排查的難度。無論是元件級維修還是板卡級維修,工程師故障診查活動的本質(zhì)是一個由現(xiàn)象到原因的推理過程,即依據(jù)故障現(xiàn)象推斷故障原因,定位故障位置的過程。其次,同一故障現(xiàn)象可能由多種故障原因引起,即一個故障現(xiàn)象發(fā)生時,可能是由單一因素引起,也有可能是多種因素共同作用的結(jié)果。再者,引發(fā)同一故障現(xiàn)象的各種故障原因發(fā)生的概率有大有小。因此,在某一故障現(xiàn)象發(fā)生時,對各種可能原因的排查應(yīng)有先后之分。概率較大的因素稱之為常見故障,是故障現(xiàn)象出現(xiàn)時應(yīng)該優(yōu)先檢查的內(nèi)容;概率較小的因素稱之為罕見故障,是故障排查時靠后檢查的內(nèi)容。
基于上述分析,設(shè)計了如下所示的知識庫整理流程,以優(yōu)利特干化學(xué)式尿液分析儀試紙感應(yīng)模塊的故障診斷知識庫整理為例進(jìn)行說明,具體實施步驟如下:
1)按儀器功能模塊收集故障征兆集:參照廠家說明書,依據(jù)儀器的原理及組成結(jié)構(gòu)將儀器模塊化分解,收集各功能模塊故障時的故障征兆集。如試紙感應(yīng)模塊故障時,對應(yīng)的征兆現(xiàn)象為“放入試紙條后,撥桿不動作!”。
2)故障征兆產(chǎn)生原因的羅列:采用產(chǎn)生式方法的邏輯,由現(xiàn)象為頂層盡可能多地羅列引起現(xiàn)象發(fā)生的原因。如:“放入試紙條后,撥桿不動作!”對應(yīng)的原因有:紅外感應(yīng)模塊被遮擋;紅外感應(yīng)模塊線路損動;紅外感應(yīng)模塊的紅外對管元件損壞;撥桿電機(jī)故障。
3)對故障原因進(jìn)行優(yōu)先級排序:采用專家打分或?qū)嵗y(tǒng)計方法,對某一故障現(xiàn)象對應(yīng)的多種原因按發(fā)生的概率大小進(jìn)行排序。例如:“放入試紙條后,撥桿不動作!”這一現(xiàn)象產(chǎn)生時,經(jīng)行業(yè)專家打分,由“紅外感應(yīng)模塊被遮擋”引起的可能達(dá)80%以上;由“紅外感應(yīng)模塊線路損動”引起的可能達(dá)60%左右;由“紅外感應(yīng)模塊紅外對管元件損壞”引起的可能不到20%;由“撥桿電機(jī)故障”引起的可能僅為5%;由此可見,當(dāng)“放入試紙條后,撥桿不動作!”這一故障現(xiàn)象出現(xiàn)時,依據(jù)各原因的概率大小排列,在故障排查時,首先應(yīng)引導(dǎo)用戶先排查紅外感應(yīng)模塊是否被遮擋;如故障仍未解決,接著引導(dǎo)用戶檢查紅外感應(yīng)模塊與主控板線路間是否有接觸不良,依次類推,若故障還是未能解決才引導(dǎo)用戶做后兩項檢查。
圖靈API服務(wù)器注冊一個賬號可同時創(chuàng)建5個獨立的機(jī)器人,圖靈機(jī)器人支持用戶自定義語料庫,一個圖靈機(jī)器人可允許用戶添加內(nèi)容容量不超過5 M,問題條數(shù)不超過1 027條的自定義語料庫[11]。針對檢驗儀器設(shè)備種類較多、故障問診條數(shù)較多、故障知識庫所需存儲空間較大,及圖靈機(jī)器人自定義語料庫受限的情況,在接入圖靈機(jī)器人時采用多賬號、多機(jī)器人方式,即每個機(jī)器人負(fù)責(zé)一種檢驗儀器故障問題的回答,機(jī)器人數(shù)量的擴(kuò)增方法采用注冊多個賬號,每個賬號創(chuàng)建5個獨立的機(jī)器人實現(xiàn);訪問時通過“userId”參數(shù)標(biāo)識用戶賬號,通過“apiKey”標(biāo)識某一賬號下的機(jī)器人編號。
圖靈機(jī)器人對自定義語料的格式也有相應(yīng)的要求,語料庫的格式如表1所示,其中問題長度不多于64個字符,答案長度不超過600個字符。所以需將文中2.1節(jié)中的原始知識庫進(jìn)行簡化處理。其中“問題”一行與2.1節(jié)中原始知識庫的故障現(xiàn)象相對應(yīng),當(dāng)儀器故障時,是用戶向機(jī)器人發(fā)問的首選描述方式,在內(nèi)容設(shè)計時應(yīng)采用行業(yè)專家的標(biāo)準(zhǔn)述語。“相似問法”是同一問題的不同問法,也是體現(xiàn)機(jī)器人智力水平的重要因素,在內(nèi)容設(shè)計時要與標(biāo)準(zhǔn)述語的語義相同?!按鸢浮笔且鸸收犀F(xiàn)象的可能原因,在內(nèi)容設(shè)計時依據(jù)發(fā)生概率的優(yōu)先級按序編號羅列,用戶排除故障時按編號從小到大依次進(jìn)行。
表1 圖靈機(jī)器人自定義語料庫格式示例Tab.1 Examples of Turing Robot Custom Corpus format
微信公眾號為用戶提供了基礎(chǔ)模式與開發(fā)者模式兩種模式[8],基礎(chǔ)模式只能按公眾號的約定規(guī)則進(jìn)行簡單的業(yè)務(wù)處理,本系統(tǒng)需使用開發(fā)者模式接入自定義Web服務(wù)器,即采用“開發(fā)者模式”+“Flask Web框架服務(wù)器”方式。Flask Web服務(wù)器框架通過簡單route()裝飾器配置便可實現(xiàn)GET、POST等多種方法的HTTP請求[9]。依據(jù)公眾號開發(fā)者模式的消息交互流程,用戶接入開發(fā)者模式可歸納為如下兩步:
1)在微信公眾號管理后臺填寫、配置自定義服務(wù)器URL地址、Token參數(shù),其中Token參數(shù)可自定義,但與Flask微信公眾號服務(wù)器要保持一致。
2)自定義公眾號服務(wù)器的接入校驗,其流程是:當(dāng)用戶向微信后臺提交了開發(fā)者模式配置請求后,微信后臺會通過GET方法攜帶signature、timestamp、nonce、echostr 4項參數(shù),向自定義服務(wù)器發(fā)出校驗請求;自定義服務(wù)器在收到請求后,首先將1)中填寫Token與timestamp、nonce參數(shù)按序拼接成一個字符串后,進(jìn)行SHA1加密,接著將加密得到的字符串與signature參數(shù)對比,若二者相同則原樣返回echostr參數(shù)的內(nèi)容,代表接入驗證成功,反之接入失敗。
微信后臺與自定義服務(wù)器之間的消息交互統(tǒng)一采用如圖2所示的XML格式模板進(jìn)行交互[12],其中ToUserName、FromUserName與標(biāo)簽之間的內(nèi)容為收、發(fā)雙方的帳號,二者在請求與回應(yīng)消息時需對調(diào),用于標(biāo)識消息的來源與去向;CreateTime為消息創(chuàng)建時間;MsgType標(biāo)簽間的內(nèi)容用于標(biāo)識消息的類型,本系統(tǒng)中只存在文本消息的交互,因此將其參數(shù)固定為“text”;Content標(biāo)簽間的內(nèi)容是具體的消息內(nèi)容。
圖2 微信后臺XML格式消息模板Fig.2 WeChat backstage XML format message template
Flask微信公眾號服務(wù)器向微信后臺回復(fù)消息的函數(shù)代碼如下所示:
由2.2節(jié)可知,在系統(tǒng)設(shè)計時圖靈機(jī)器人的接入采用多賬號、多機(jī)器人方式接入,一種檢驗儀器對應(yīng)一個圖靈機(jī)器人。因此用戶在發(fā)送信息時需攜帶訪問哪個圖靈機(jī)器人的標(biāo)志信息,具體的做法是采用“(儀器名稱)+(故障現(xiàn)象)”的格式作為公眾號前端用戶請求的模板,“+”前“儀器名稱”用于標(biāo)識將要訪問的圖靈機(jī)器人,“+”后的“故障現(xiàn)象”是向?qū)?yīng)圖靈機(jī)器人提出的問診內(nèi)容。在Flask微信公眾號服務(wù)器中事先將圖靈機(jī)器人賬號userId與圖靈機(jī)器人密鑰apiKey按儀器名稱為索引進(jìn)行定義,訪問時可通過tl_userId[′尿液分析儀′]、tl_apiKey[′尿液分析儀′]的格式取到對應(yīng)的賬號與機(jī)器人密鑰,示例代碼如下所示。
#圖靈機(jī)器人用戶賬號:userId與機(jī)器人密鑰:apiKey的設(shè)置
Flask微信公眾號服務(wù)器故障問診業(yè)務(wù)的處理流程如下所示:
1)微信后臺向Flask微信公眾號服務(wù)器上傳消息的請求方式采用POST方法,因此首先判斷來自公眾號的請求是否是POST請求消息,如果是,則從XML格式消息中分別提取ToUser-Name、FromUserName、CreateTime、MsgType、Content中的內(nèi)容。公眾號消息的解析通過 xml.etree.ElementTree包實現(xiàn),具體實現(xiàn)代碼如下所示:
2)如果內(nèi)容類型是文本消息,則以“+”為標(biāo)識拆分解析Content標(biāo)簽中的消息內(nèi)容,得到相應(yīng)機(jī)器人的賬號標(biāo)識字符串,以及故障問診內(nèi)容字符串。具體實現(xiàn)代碼如下所示:
3)依據(jù)2)中的機(jī)器人標(biāo)識查找對應(yīng)機(jī)器人的用戶賬號userId與機(jī)器人密鑰apiKey,連同2)得到故障問診內(nèi)容,構(gòu)造訪問圖靈機(jī)器人的JSON格式數(shù)據(jù)包,并通過POST方式攜帶JSON格式數(shù)據(jù)包請求圖靈機(jī)器人響應(yīng);圖靈機(jī)器人成功響應(yīng)后,將返回JSON格式的故障診查流程數(shù)據(jù)包。具體實現(xiàn)代碼如下所示:
4)解析步驟3)中圖靈機(jī)器人返回的JSON數(shù)據(jù)包內(nèi)容,提取包中的“故障診查建議”,將1)中的ToUserName、FromUserName對調(diào)后,構(gòu)造微信XML格式數(shù)據(jù)包,將數(shù)據(jù)返回到微信服務(wù)器端。
在PyCharm2016.3.3中創(chuàng)建Flask微信服務(wù)器Python腳本文件,并將啟動腳本運行app.run()語句中的host參數(shù)設(shè)為host= '0.0.0.0',端口號參數(shù)設(shè)為port= 8 000,實現(xiàn)支持外網(wǎng)訪問。接著使用花生殼內(nèi)網(wǎng)穿透軟件,將本機(jī)IP地址、端口號綁定到花生殼的域名上,為了與微信公眾號的規(guī)定一致,需將花生殼的外網(wǎng)端口設(shè)為80。接著將花生殼提供的Flask微信服務(wù)器域名填入微信公眾號管理后臺的對應(yīng)頁面中。關(guān)注微信公眾號后,進(jìn)行故障問診模擬測試,圖3和圖4為部分測試結(jié)果,測試結(jié)果顯示系統(tǒng)運行穩(wěn)定。
圖3 測試實例一Fig.3 Test example 1
圖4 測試實例二Fig.4 Test example 2
本文以醫(yī)學(xué)檢驗儀器的故障診查為例,以微信公眾號為交互前端,F(xiàn)lask Web框架公眾號服務(wù)器為中間橋梁,圖靈機(jī)器人為后臺,實現(xiàn)了一款醫(yī)學(xué)檢驗儀器故障智能問診系統(tǒng)。經(jīng)實際應(yīng)用測試顯示,其運行穩(wěn)定,能為維修人員提供可靠的維修建議。本系統(tǒng)的設(shè)計方案可為快速開發(fā)醫(yī)療設(shè)備行業(yè)的故障智能問診系統(tǒng)提供參考。
江漢大學(xué)學(xué)報(自然科學(xué)版)2020年3期