“ 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()
实现效果
总结:
德国哥们说:"如果只是测试,这是一个很好的技术,很有趣。真正要应用化还有很多的路要走,安全,权限这些重中之重的问题。机器人职责的安排。“
但是,何尝不是么。世界是发展的,这些问题不是难不可破的。
瓦尼塔看着像笑话的演说,然而我当真了。