“ 2019,就用這個簡單的例子,希望新的一年能保持學習,並把所學應用起來。”
記得瓦尼塔在會上滔滔不絕的在說他的設想,未來只要對電腦說說話,訂單就創建好了,就和供應商下訂單了,就能看報表了。
雖然大家聽著都覺得這個是笑話。但是我當真了。
01 — 故事
人物:A是大型機械設備維修工程師時間:凌晨3點鐘,地點:碼頭大型起重設備旁情景:由於事發突然,工程師手頭並沒有配件,總公司訂單中心人員的電話又打不通。情況:無數的集裝箱等著裝車,船老大等著開船,爭取能趕上船期。一個字:急。貨物的滯留,不光會產生直接的滯納金,無法按期交貨。間接損失也很大。
那怎麼辦?工程師A一個個電話打,把能打的電話都打一遍。最好下一個電話,配件就能有著落。馬上上路,送過來。
現在我們分析下,如果電話打通了,找到了對的人。應該如何處理。
- 先檢查下離碼頭最近的倉庫是哪一個?
- 這個倉庫裡有沒有配件(或替代件)。有萬事大吉,實在不行自己開車連夜送過去。
- 如果沒有就要去上一級倉庫調貨。這樣就要聯繫總倉的相關人員檢查庫存,安排出貨。
大晚上要找齊所有相關的人員,訂單中心,倉庫,物流。
如果這個時候,工程師的手機,有這樣一個工作助手。能夠幫忙檢查庫存,並通知司機立馬取貨送貨。
萬分火急之時,工程師能自信的說,市裡有庫存,司機已經在來的路上了。
02 — 如何實現
工程師手機裡的工作助手。
工作助手在手機裡。- 工作用的微信。
工作助手能無時無刻提供服務。 - 那必須是ChatBot
提供工作內容方面的支持。 - 檢查SAP數據
為了能夠相應工程師晚上發的微信信息。這裡我們就需要使用到一個open source的python庫wxpy。在服務端實時監控並響應突如其來的工程師的信息。
wxpy https://github.com/youfou/wxpy
這裡我們知道通過wxpy這個組件,我們可以實時監控工程師的信息,但是我們如何讓冷冰冰的電腦明白工程師說的是啥?只要正確的明白工程師說的東西,才能真正幫到工程師。這裡我們使用到的是open source.
ChatterBot https://github.com/gunthercox/ChatterBot
我們可以通過最機器人進行訓練學習,讓機器人明白工程師說的內容。並扮演好相關工作人員處理相關事務。
檢查SAP數據。比如查庫存。只要通過OData就能實現。
我們通過對三個工具(wxpy, chatterbot, odata)的整合,就能實現這樣的應用。
03 — 實現過程
根據01講的故事,我們已經知道了工作需求。通過02我們已經知道,我們需要那些技術去幫助實現這個需求。
接下來我們要講講如何實現這個方案。
下面我會講下如何安裝包,如何通過使用wxpy,如何訓練使用chatterbot.最後將他們粗糙的整合起來。
首先我們需要通過Anaconda安裝所需要的包。
- 創建新的安裝環境。
b. 打開終端。
c. 安裝wxpy和chatterbot
就如此簡單的幾句話,地基就打好了。想不到吧,萬事開頭難。真正做了才發現其實挺簡單的。
如何使用wxpy給文件傳輸助手發一條信息
運行程序,登錄微信後,就會自動發送一條信息Hello from wxpy給文件助手
訓練chatterbot,讓chatbot看的懂那些話是讓他查庫存。
- 首先我需要叫機器人打招呼。
- 當我們Hi或者Morning的時候,他就會告訴我們他是一個subsidiary system assistant.
- 通過如下代碼會訓練機器人,訓練後簡單的問答Hi,就會回覆 -- 看上去像hard code.
- 接下來我們需要訓練他,material number xxxxx stock的時候就要去call SAP API.
- 針對問庫存的問答,我們需要寫如下的問答訓練集。
- 由於現場工程師問助手的方式會是前期八怪的,所以這裡我們會訓練各種各樣的回答訓練集
然後我們問機器人另一個物料的庫存情況,和訓練集不通的物料,不通的問法(有額外的字符串)
<material number 860123211 stock (Text)>
Odata Call SAP. 這裡推薦使用POSTMAN. 簡單的從mard裡抓取數據
最後我們要做的就是把這些準備好的碎片功能整合起來。 :)
代碼如下 #!/usr/bin/env python3.5 from wxpy import * from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer import requests import json import re chatbot = ChatBot("deepThought")# 用於回覆消息的機器人 chatbot.set_trainer(ChatterBotCorpusTrainer) chatbot.train("chatterbot.corpus.chinese")# 使用該庫的中文語料庫 chatbot.read_only = True bot = Bot(cache_path=True)# 用於接入微信的機器人 my_friend = bot.friends().search(u'小悠悠')[0] my_friend.send('Hi man, ') @bot.register(my_friend) def reply_my_friend(msg): print(msg) res = '' chatres = chatbot.get_response(msg.text).text print(chatres) if chatres == '123 PC in 0740.': input_item = msg.text input_item = re.findall(r"\d+\.?\d*", input_item) # 829221375 print(input_item) url = "xxxxxxxx(Werks='0001',Lgort='0002',Matnr='" + \ input_item[0] + "')" print(url) querystring = {"$format": "json"} payload = "" headers = { 'Authorization': "Basic Q04xMTAwMDoyMzQ1NmFBIQ==", 'cache-control': "no-cache", 'Postman-Token': "73405266-b9a2-4c49-8495-80c8dbce599f" } response = requests.request("GET", url, data=payload, headers=headers, params=querystring) json_data = json.loads(response.text) resp = json_data.get('d').get('Matnr') + ' ' + json_data.get('d').get('Maktx') + ' Stock ' + json_data.get( 'd').get('Labst') print(resp) res = resp else: res = chatbot.get_response(msg.text).text return res # 使用機器人進行自動回覆 # 堵塞線程,並進入 Python 命令行 embed()
實現效果
總結:
德國哥們說:"如果只是測試,這是一個很好的技術,很有趣。真正要應用化還有很多的路要走,安全,權限這些重中之重的問題。機器人職責的安排。“
但是,何嘗不是麼。世界是發展的,這些問題不是難不可破的。
瓦尼塔看著像笑話的演說,然而我當真了。