教你用Python写一个聊天机器人

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37482202/article/details/84145028

程序员有三种美德:懒惰,急躁和傲慢

要想实现功能我们需要首先认识一个库,itchat

itchat是一个开源的微信个人号接口,通过它你只需要编写简单的代码便能实现复杂的功能

如果你没有安装过它,你可以使用下面的命令来安装它

pip install itchat

 通过它我们可以实现微信的登陆,查找好友,发送消息等功能

itchat.auto_login(hotReload=True)

通过这行代码可以实现登陆功能,程序运行会弹出来一个二维码,使用微信扫描登陆,hotReload参数设置为True可以在你再次登录时不用再扫码了

itchat.send("hello world",toUserName="filehelper")

通过这行代码你可以给文件助手发一条消息,第一个参数便是要发送的消息,第二个参数是发送的对象,如果你要给好友发送消息可以替换为好友的微信名,注意这里的微信名不是微信昵称,是微信标识用户的唯一码

itchat.get_friends()

可以使用get_friends()方法取得好友列表,可以像数组一样取值,这里放一个示例

{'MemberList': <ContactList: []>, 'Uin': 0, 'UserName': '@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650', 'NickName': '和平鸽', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=626970063&username=@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650&skey=@crypt_142f8be9_97eca2622ea914f15dfb81624b0f87c4', 'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '刘鹏翼爸', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'HPG', 'PYQuanPin': 'hepingge', 'RemarkPYInitial': 'LPYB', 'RemarkPYQuanPin': 'liupengyiba', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 4133, 'Province': '', 'City': '', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}
 

这便是一个好友的json数据,可以通过键值对取值

nickname=itchat.get_friends()[1]["NickName"]
username=itchat.get_friends()[1]["UserName"]
print(nickname)
print(username)

和平鸽
@fdb672c448f55e9c3a526fe3c3e0c86762e9fa0ba9d473a68b8c7005802b7650

itchat.send("hello world",toUserName=username)

使用send给指定的人发送消息

如果要做一个会自动回复的机器人的话这还不够,我们还需要监听他人给自己发送的消息,并根据消息进行回应

@itchat.msg_register('Text')
def text_reply(msg):
    if msg["Text"]=="你好":
        return "你也好"
    else:
        return "[自动回复]我现在不在,稍后联系您"

itchat提供了对各种消息的监听,上面这段代码便是实现了对文本类型的监听,传进来的msg同样也是一个json,里面包含了各种信息,对方的微信id,昵称,所在地,个性签名,发送的消息等等,放个例子

{'MsgId': '4153708636229259599', 'FromUserName': '@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b', 'ToUserName': '@c5eb5cea3c09059ca44ef1b53e791227695acd222f9b74a0760351f8d9a6a6c8', 'MsgType': 1, 'Content': '嗨', 'Status': 3, 'ImgStatus': 1, 'CreateTime': 1542370367, 'VoiceLength': 0, 'PlayLength': 0, 'FileName': '', 'FileSize': '', 'MediaId': '', 'Url': '', 'AppMsgType': 0, 'StatusNotifyCode': 0, 'StatusNotifyUserName': '', 'RecommendInfo': {'UserName': '', 'NickName': '', 'QQNum': 0, 'Province': '', 'City': '', 'Content': '', 'Signature': '', 'Alias': '', 'Scene': 0, 'VerifyFlag': 0, 'AttrStatus': 0, 'Sex': 0, 'Ticket': '', 'OpCode': 0}, 'ForwardFlag': 0, 'AppInfo': {'AppID': '', 'Type': 0}, 'HasProductId': 0, 'Ticket': '', 'ImgHeight': 0, 'ImgWidth': 0, 'SubMsgType': 0, 'NewMsgId': 4153708636229259599, 'OriContent': '', 'EncryFileName': '', 'User': <User: {'MemberList': <ContactList: []>, 'Uin': 0, 'UserName': '@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b', 'NickName': '不念过去', 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=676888997&username=@90d4e50aa79c27ce202a64535189c428f6dd80df4e4bc134f8841a760e538f5b&skey=@crypt_142f8be9_97eca2622ea914f15dfb81624b0f87c4', 'ContactFlag': 3, 'MemberCount': 0, 'RemarkName': '魏鹏楠', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '不畏将来,不念过去。', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'BNGQ', 'PYQuanPin': 'bunianguoqu', 'RemarkPYInitial': 'WPN', 'RemarkPYQuanPin': 'weipengnan', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 33561469, 'Province': '河北', 'City': '邯郸', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}>, 'Type': 'Text', 'Text': '嗨'}
 

我们通过text取到他发送给我们的信息并根据信息进行回复

@itchat.msg_register('File')
def file_reply(msg):
    return "抱歉,还不会读文件"

我们还可以对文件类型的信息进行监听,还有PICTURE, RECORDING, ATTACHMENT, VIDEO等等类型的信息,这里不做过多介绍

现在我们知道了如何监听和如何发送消息,但是如果想上面那样写句子判断你肯定是写不完的,这时候我们可以采用api来应对

使用图灵机器人便可以实现这样的功能

图灵机器人官网:http://www.tuling123.com

我们可以使用它开放的api进行应答,使用requests来进行post请求,没学过也没好关系,也就一句话的代码

url="http://www.tuling123.com/openapi/api"
key="720b8495c39f40ac92284c5d6b3d1dd7"
msg="你好漂亮"
userid="100000"
data={
    'key':key,
    'info':msg,
    'userid':userid
}
repson=requests.post(url,data=data).json()
print(repson.get("text"))

回复 :呵呵,还好啦,一般般啦

这是我图灵机器人的key,大家尽管拿去用

现在应答也解决了,只要把监听,发送消息,回复内容三部分一结合就好了,最后附上完整代码

import itchat
import requests
url="http://www.tuling123.com/openapi/api"
key="720b8495c39f40ac92284c5d6b3d1dd7"

@itchat.msg_register("Text")
def text_reply(msg):
    return get_reply(msg["Text"])

def get_reply(msg):
    print(msg)
    repson=requests.post(url+"?key="+key+"&info="+msg).json()
    print(repson)
    return repson.get("text")

itchat.auto_login(hotReload=True)
itchat.run()

 

展开阅读全文

从零开始,开发一款聊天机器人

07-25

聊天机器人:一种能和人类对话的计算机程序,你不用进行命令行或者图形界面的操作,只需要和它说人话就好了,它不但听得懂,还能回答。为什么机器能够听懂人类的自然语言呢?简单来说,因为背后有多种机器学习模型,分析理解用户输入的自然语言,并根据开发者设定的某种查询机制在预置的知识库中获取相应答案,再将查询结果构造成人类语言回复给用户。 听起来很高大上的一种计算机程序啊,什么机器学习(Machine Learning)啊,自然语言理解啊(Natural Language Understanding)都没有学过的人,也能开发自己的聊天机器人吗?当然可以! 本场 Chat 就是向没有 AI 知识背景和开发经历的用户介绍利用现有工具和方法,开发自己的聊天机器人的方法。并提供开源实例。只需要最基本能的编程技巧,能收发 Http Request/Response,就具备开发条件啦! **实录提要:** - 如何让这个机器人进行无监督的学习,让它越服务越智能? - LUIS 能否本地化部署或者在不联网的情况下使用? - 这个和图灵机器人之类的 API 的区别是什么?有没有本地的 NLP 类库可调用? - 现在的聊天机器人主要是基于监督学习的方法,还是强化学习? - 非面相任务的问答,上下文用什么样的方法解决?小冰是怎样解决上下文问题的? - 请问不同领域的聊天机器人就只是知识库的不同吗?有没有技术上的差异? - LUIS 的输出格式是什么?能举个例子吗? - 如果比较好奇意图提取和实体抽取,是否有什么开源项目推荐研究? *当前内容版权归码字科技所有并授权显示,盗版必究。[阅读原文](http://gitbook.cn/gitchat/activity/5976e6f586e940449500a5e5)*

没有更多推荐了,返回首页