引言:
前幾天看到新聞說一個程序員開發了微信聊天機器人陪女朋友聊天,感覺有興趣,之前聽說過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填入開篇的代碼中,這樣一個聊天機器人就大功告成了。