首页 > 编程语言 >调用AI聊天机器人自动回复信息(Python)

调用AI聊天机器人自动回复信息(Python)

时间:2023-03-16 19:32:37浏览次数:55  
标签:win32gui AI 22% 机器人 request URL urllib Python 测试


“人类正从IT时代走向DT时代”,随着移动互联网技术持续高速发展,海量数据计算存储、智能数据挖掘、低时延数据传送和可靠网络安全已经成为软硬件技术飞速发展的催化剂,也推动着数据中心从IT时代逐步迈向DT时代,对数据进行汇聚,在体系化融合中产生新的价值已成为未来发展的关键.

如今,大数据+智能化催生了许多的智能聊天机器人,如华为的小冰,小米的小爱同学还有苹果的Siri.于是,我有了新的想法: 1952年,在一场BBC广播中,图灵谈到了一个新的具体想法:让计算机来冒充人。如果不足70%的人判对,也就是超过30%的裁判误以为在和自己说话的是人而非计算机,那就算作成功了。这就是著名的图灵测试。

(图灵测试:被测试人,和一个是声称自己有人类智力的机器。测试时,测试人与被测试人分开的,测试人只有通过一些装置(如键盘)向被测试人问一些问题,这些问题随便是什么问题都可以。问过一些问题后,如果测试人能够正确地分出谁是人谁是机器,那机器就没有通过图灵测试,如果测试人没有分出谁是机器谁是人,那这个机器就是有人类智能的。)

于是,我打算尝试调用某公司的AI聊天机器人,在QQ上和好友进行交流,看看目前的AI聊天机器人能否通过图灵测试,先附上一张效果图吧:

调用AI聊天机器人自动回复信息(Python)_AI聊天机器人


看来, 这个AI聊天机器人有点明显呀,差点点就露馅了呀,不过没关系,我们还是可以拿来学习的,话不多说,在上代码之前先了解一下要使用的库:urllib库

urllib中包括了四个模块,包括urllib.request,urllib.error,urllib.parse,urllib.robotparser.

  • urllib.request可以用来发送request和获取request的结果
  • urllib.error包含了urllib.request产生的异常
  • urllib.parse用来解析和处理URL
  • urllib.robotparse用来解析页面的robots.txt文件

我们主要用到的urllib.request库是一个为打开url提供的可扩展类库,可以用来发送request和获取request的结果.

来,先把这部分的代码写上:

url="http://nlp.xiaoi.com/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%22content%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 = urllib.request.Request(url=url, headers=headers)
proxy = {'http': '218.108.175.15'}
# 创建代理Handler对象
proxy_handler = urllib.request.ProxyHandler(proxy)
# 以Handler对象为参数创建Opener对象
opener = urllib.request.build_opener(proxy_handler)
# 将Opener安装为全局
urllib.request.install_opener(opener)
response = urllib.request.urlopen(link)
page_source = response.read().decode('utf-8')

我这里用到的代理ip,大家可以自己在网上找一下,我给大家找了几个,现在还能不能用就不好说了:

调用AI聊天机器人自动回复信息(Python)_聊天机器人_02


接下来,是最关键的一步,获取并选择返回的内容.于此同时,为了在将来能完善代码,我把聊天记录都存到了一个.txt文件下,我把这个文件命名为”my_output_demo”,相当于一个小型”数据库”.

调用AI聊天机器人自动回复信息(Python)_python_03


话不多说,敲代码!

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')
doc.close()
doc=open(r'my_output_demo.txt','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,这个函数在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

调用AI聊天机器人自动回复信息(Python)_python_04


好了,核心代码其实主要还是爬虫方面的知识,接下来,我们继续完善功能!

复制粘贴实在是太麻烦了,我是学自动化的,说白了,想偷懒,哈哈哈,所以呢,我们来做一个让程序自己找到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()

如果觉得这方面比较困难的话,直接写也是可以的,就不需要定义方法了.

我做了一个视频,实现的功能在里面可以得到展示:​​调用AI聊天机器人自动回复信息(Python)​

大公告成!快去试一下吧!


标签:win32gui,AI,22%,机器人,request,URL,urllib,Python,测试
From: https://blog.51cto.com/u_16011718/6125750

相关文章

  • 抓取王者荣耀英雄列表的爬虫笔记(python+requests)
    在开始这个内容之前,我们先来一张效果图:实现它,需要几个过程:调用王者荣耀助手的数据接口获取所有英雄的图片通过迭代,把所有图片转换成二进制数据流把这些数据导入MySQL数据库......
  • 干货 | BitSail Connector 开发详解系列一:Source
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 BitSail是字节跳动自研的数据集成产品,支持多种异构数据源间的数据同步,并提供离......
  • 程序员职业生涯将在 3 年内被AIGC终结,危言耸听还是未来已来?
    近日,前哈佛大学计算机科学教授、谷歌工程主管MattWelsh在美国计算机协会(ACM)的一个虚拟会议上断言:“生成式AI将在3年内终结编程。”Welsh的断言是来自他体验了ChatG......
  • Python startswith()和endswith()方法
    startswith()方法startswith()方法用于检索字符串是否以指定字符串开头,如果是返回True;反之返回False。endswith()方法endswith()方法用于检索字符串是否以指定字符......
  • python - 面向对象编程
    一、对象与过程的概念python中的两大范式:1.面向过程2.面向对象他们两个都不是新的技术,而是一种做事的思维方式1.面向过程:根据业务逻辑从上到下写垒代码面向过程核心是......
  • Python根据图片拍摄日期等整理重命名
    关键词:exif、exifread等等。最近在整理多年拍摄的图片,希望按照拍摄时间进行排序整理制作相册。但是有的图片有水印显示拍摄日期;有的文件创建日期因为搬运创建日期和修改......
  • pyinstaller 打包报错Failed to determine matplotlib‘s data directory
    #fromPyInstaller.utils.hooksimportexec_statement##mpl_data_dir=exec_statement(#"importmatplotlib;print(matplotlib.get_data_path())")#assert......
  • Python基础数据类型
    一、字符串1、字符串赋值1.1直接赋值使用'',"",''''''(单、双、三引号)和“=”赋值符号,进行字符串赋值注意:三引号形式的字符串支持换行1.2 通过input()方法 2、字......
  • Jetbrains Rider New UI找回工具栏上的前进后退按钮
    更新到最新版本并启用了NewUI之后,前进后退按钮没了,此时我们在设置的MenusandToobars->MainToobarLeft点添加MainMenu->Navigate->Back|Forward即可。......
  • Python装饰器深入理解
    在本博客的前面部分其实已经介绍过Python中装饰器的基本使用了(Python迭代器、生成器、装饰器的使用,Python@函数装饰器以及super()父类继承 ),不过还有一些深入的知识点(......