Python30行代码实现微信聊天机器人(基于WXPY+百度理解与交互技术UNIT)

引言:

前几天看到新闻说一个程序员开发了微信聊天机器人陪女朋友聊天,感觉有兴趣,之前听说过WXPY,由于本人Python真的很菜,一直没有动手,受新闻启发开发了一个简单的基于Python微信机器人。有接口开发基础的可以直接粘我的代码,首先要注册一个百度云账号(不是那个百度云,是百度云计算)。如果没有相关知识,我把步骤放在下面。

先上最终版的代码(百度对话系统版):

# encoding:utf-8
import requests
import json
import random
from wxpy import *

def getBaiDuAK():
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=这是你百度AK&client_secret=这是你的SK'
    r = requests.get(host)
    return r.json()['access_token']

def baiduApi(text):
    global access_token
    url = 'https://aip.baidubce.com/rpc/2.0/unit/bot/chat?access_token=' + access_token
    query = text
    #下面的log_id在真实应用中要自己生成,可是递增的数字
    log_id ='7758521'
    #下面的user_id在真实应用中要是自己业务中的真实用户id、设备号、ip地址等,方便在日志分析中分析定位问题
    user_id='222333'
    #下面要替换成自己的bot_id,是你的技能ID!!
    bot_id='60795'
    post_data = '{\"bot_session\":\"\",\"log_id\":\"'+log_id+'\",\"request\":{\"bernard_level\":1,\"client_session\":\"{\\\"client_results\\\":\\\"\\\", \\\"candidate_options\\\":[]}\",\"query\":\"' + query + '\",\"query_info\":{\"asr_candidates\":[],\"source\":\"KEYBOARD\",\"type\":\"TEXT\"},\"updates\":\"\",\"user_id\":\"'+user_id+'\"},\"bot_id\":'+bot_id+',\"version\":\"2.0\"}'
    print (json.loads(post_data))
    headers = {'Content-Type':'application/json'}
    r = requests.post(url, data=post_data.encode('utf-8'),headers=headers)
    print ()
    return r.json()['result']['response']['action_list'][random.randint(0,2)]['say']

global access_token  #在使用前初次声明
access_token =getBaiDuAK()
bot = Bot(cache_path=True)#登录缓存
#bot.file_helper.send('[奸笑][奸笑]')
print('欣欣AI已经启动')
 
@bot.register()
def forward_message(msg):
    print('[接收]'+str(msg))
    if (msg.type!='Text'):
        ret = '[奸笑][奸笑]'
    else:
        ret = baiduApi(msg.text)
    print('[发送]'+str(ret))
    return ret
 
embed()

思路:

要开发微信聊天机器人bot我们需要能够获取到微信好友的消息并且自动回复,这些能够通过WXPY轻松实现。但是如何做到处理好友发来的消息确实是个头疼的问题,需要有自己的语料库。WXPY中原生支持了图灵机器人的调用方式,真的很简单,只要注册后获取Key就可以通过预置的函数调用接口。一会我会把这个方式的源码也附在下面,因为真的很简单,而且网上博客基本上都是这么写的,但是这种方法真的好坑,因为图灵机器人收费了一天只能免费用4条,想继续用就要手持身份证拍照上传(裸贷噢?)。于是我就开始找大厂的语料库(其实大部分都收费),终于找到了百度的Unit对话系统暂时免费。

WXPy开发:

本人使用了3.7.3的Python版本,首先引入WXPy包 wxpy官网

命令:pip install wxpy

    该包的原理就是模拟微信网页版登陆,爬取对应的信息进行处理。各种基本操作就不赘述了,官网写的很详细了,注意的是一定要用微信小号开发,否则当同时处理过多消息时判定为机器人,可能会导致微信无法登陆微信网页版(新注册的微信号不能使用微信网页版)。图灵机器人真的很坑,只有前几条好使,不充钱或者认证,剩下的就会说“换个话题吧”。

图灵机器人版代码如下:

from wxpy import *
bot = Bot(cache_path=True)
# 搜索名称含有 "启梦项目组" 的群组
my_friend = bot.groups().search('启梦项目组')[0]
tuling = Tuling('你的图灵AK') 
#my_friend = bot.friends()
# 发送文本给好友
my_friend.send('Hello WeChat!')
# 打印来自其他好友、群聊和公众号的消息
@bot.register()
def print_others(msg):
    print(msg)

# 回复 my_friend 的消息 (优先匹配后注册的函数!)
@bot.register(my_friend)
def tuling_reply(msg):
    tuling.do_reply(msg)  

embed()

百度Unit对话系统:

链接:理解与交互技术UNIT

技能对话API文档:http://ai.baidu.com/docs#/UNIT-v2-API/top

首先进入链接:http://ai.baidu.com/unit/home,点击进入控制台,选择我的技能,添加一个闲聊技能(这个Unit系统其实不是这么用的,这个闲聊功能只时很小的一个模块,他主要时用来训练自己的语料库模型和制作对话机器人的)。将技能Id填入开篇代码的Bot_Id中

Python30行代码实现微信聊天机器人(基于WXPY+百度理解与交互技术UNIT)_第1张图片

在百度云控制台中找到,理解与交互技术UNIT,开通后获取AK和SK,将AK和SK填入开篇的代码中,这样一个聊天机器人就大功告成了。

 Python30行代码实现微信聊天机器人(基于WXPY+百度理解与交互技术UNIT)_第2张图片

你可能感兴趣的:(黑科技)