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中

在百度雲控制檯中找到,理解與交互技術UNIT,開通後獲取AK和SK,將AK和SK填入開篇的代碼中,這樣一個聊天機器人就大功告成了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章