调⽤AI聊天机器⼈⾃动回复信息(Python)
“⼈类正从IT时代⾛向DT时代”,随着移动互联⽹技术持续⾼速发展,海量数据计算存储、智能数据挖掘、低时延数据传送和可靠⽹络安全已经成为软硬件技术飞速发展的催化剂,也推动着数据中⼼从IT时代逐步迈向DT时代,对数据进⾏汇聚,在体系化融合中产⽣新的价值已成为未来发展的关键.
如今,⼤数据+智能化催⽣了许多的智能聊天机器⼈,如华为的⼩冰,⼩⽶的⼩爱同学还有苹果的Siri.于是,我有了新的想法: 1952年,在⼀场BBC⼴播中,图灵谈到了⼀个新的具体想法:让计算机来冒充⼈。如果不⾜70%的⼈判对,也就是超过30%的裁判误以为在和⾃⼰说话的是⼈⽽⾮计算机,那就算作成功了。这就是著名的图灵测试。
(图灵测试:被测试⼈,和⼀个是声称⾃⼰有⼈类智⼒的机器。测试时,测试⼈与被测试⼈分开的,测试⼈只有通过⼀些装置(如键盘)向被测试⼈问⼀些问题,这些问题随便是什么问题都可以。问过⼀些问题后,如果测试⼈能够正确地分出谁是⼈谁是机器,那机器就没有通过图灵测试,如果测试⼈没有分出谁是机器谁是⼈,那这个机器就是有⼈类智能的。)
于是,我打算尝试调⽤某公司的AI聊天机器⼈,在QQ上和好友进⾏交流,看看⽬前的AI聊天机器⼈能否通过图灵测试,先附上⼀张效果图吧:
看来, 这个AI聊天机器⼈有点明显呀,差点点就露馅了呀,不过没关系,我们还是可以拿来学习的,话不多说,在上代码之前先了解⼀下要使⽤的库:urllib库
urllib中包括了四个模块,包括,urllib.botparser.
<包含了quest产⽣的异常
urllib.parse⽤来解析和处理URL
我们主要⽤到的quest库是⼀个为打开url提供的可扩展类库,可以⽤来发送request和获取request的结果.
来,先把这部分的代码写上:
url="nlp.xiaoi/robot/webrobot?&callback=__webrobot_processMsg&data=%7B%22sessionId%22%3A%22ff725c236e5245a3ac825b2dd88a7501 %22%2C%22robotId%22%3A%22webbot%22%2C%22userId%22%3A%227cd29df3450745fbbdcf1a462e6c58e6%22%2C%22body%22%3A%7B%22conte nt%22%3A%22" + x + "%22%7D%2C%22type%22%3A%22txt%22%7D"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'} link = quest.Request(url=url, headers=headers)
proxy = {'http': '218.108.175.15'}
# 创建代理Handler对象
proxy_handler = quest.ProxyHandler(proxy)
# 以Handler对象为参数创建Opener对象
opener = quest.build_opener(proxy_handler)
# 将Opener安装为全局
response = quest.urlopen(link)
page_source = ad().decode('utf-8')
我这⾥⽤到的代理ip,⼤家可以⾃⼰在⽹上⼀下,我给⼤家了⼏个,现在还能不能⽤就不好说了:
接下来,是最关键的⼀步,获取并选择返回的内容.于此同时,为了在将来能完善代码,我把聊天记录都存到了⼀个.txt⽂件下,我把这个⽂件命名为”my_output_demo”,相当于⼀个⼩型”数据库”.
话不多说,敲代码!
x = input("哓哓晓培:")
doc.write("哓哓晓培:" + x)
doc.write('\n')
#屏蔽特殊的字符、⽐如如果url⾥⾯的空格!
x = urllib.parse.quote(x)
#正则表达式 re.findall 的简单⽤法:返回string中所有与pattern相匹配的全部字串,返回形式为数组
reply_list = re.findall(r'\"content\":\"(.+?)\\r\\n\"', page_source) #Python 正则表达式 re.findall ⽅法能够以列表的形式返回能匹配的⼦串; (.+?)为惰性匹配
print("哓哓晓培robot:" + reply_list[-1]) #代表索引该列表最后⼀个值,在python中索引从左往右是0,1,2,3… 从右往左是-1,-2,-3……
doc.write("哓哓晓培robot:" +reply_list[-1])
doc.write('\n')
python新手代码useriddoc.close()
doc=open(r'my_','a')
#发送的消息
msg2 = (reply_list[-1])
#窗⼝名字
name = "好基友"
有些知识点我单独拿出来讲的话会显得很啰嗦,但为了能让新⼿看明⽩我的代码,我把⼀些⼩知识点写在了注释⾥,在你的程序中,代码的注释应该简单明了,写上这部分的功能即可,没有必要把各种函数的具体⽤法都写上去!
回到正题!⼤家可能不太明⽩这句:x = urllib.parse.quote(x),我详细讲讲:x是user输⼊的内容,这个内容可能五花⼋门,天马⾏空,我相信当你在和各种智能语⾳助⼿聊天时,你也会这么⼲,想尽各种办法刁难他,哈哈哈,替这些智能语⾳助⼿⼼疼1秒钟.
url⾥⾯是不允许出现空格的。按照标准, URL 只允许⼀部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。所以 URL 中使⽤其他字符就需要进⾏ URL 编码。URL 中传参数的部分(query String),格式是:
name1=value1&name2=value2&name3=value3.假如你的 name 或者 value 值中有&或者=等符号,就当然会有问题。所以URL中的参数字符串也需要把&,=等符号进⾏编码。URL编码的⽅式是把需要编码的字符转化为 %xx 的形式。通常 URL 编码是基于 UTF-8 的.
接下来,我们来讲讲正则表达式。对于新⼿来说可能会有点难度,没关系,问题不⼤!简单来说,正则表达式(Regular Expression)是⼀种⽂本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),正则表达式使⽤单个字符串来描述、匹配⼀系列匹配某个句法规则的字符串。
我们要⽤到的是findall,这个函数在字符串中到正则表达式所匹配的所有⼦串,并返回⼀个列表,如果没有到匹配的,则返回空列表。
好了,核⼼代码其实主要还是爬⾍⽅⾯的知识,接下来,我们继续完善功能!
复制粘贴实在是太⿇烦了,我是学⾃动化的,说⽩了,想偷懒,哈哈哈,所以呢,我们来做⼀个让程序⾃⼰到QQ聊天窗⼝并且⾃动发送消息的⽅法!先来分析⼀下,想要⾃动发送消息,需要两个条件:QQ窗⼝的按键操控以及内存的操控,换句话说,就是操控剪切板.
我们需要⽤到Pywin32,这是⼀个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接⼝、线程以及COM机制等等。以下是四个步骤:
⼀, ⾸先import win32gui, win32con
⼆, 使⽤win32gui.FindWindow到⽬标程序:
三, 使⽤win32gui.FindWindowEx到⽬标⽂本框:
四, 使⽤win32gui.SendMessage发送⽂本到⽬标⽂本框:
代码在这:
#获取窗⼝句柄
def Get_window_handle():
handle = win32gui.FindWindow(None, name)
if 1 == 1:
#睡眠1秒,不然可能会重复发送消息
time.sleep(1)
win32gui.SendMessage(handle, 770, 0, 0)
#回车发送消息
win32gui.SendMessage(handle, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)操控剪切板,我们需要⽤到win32clipboard这个库:
#将测试消息复制到剪切板中
def setText():
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, msg2)
w.CloseClipboard()
新上⼿的同学记得把这⼀句加上:
if __name__ == '__main__':
setText()
Get_window_handle()
如果觉得这⽅⾯⽐较困难的话,直接写也是可以的,就不需要定义⽅法了.
我做了⼀个视频,实现的功能在⾥⾯可以得到展⽰:
⼤公告成!快去试⼀下吧!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论