前言

什么是图灵机器人

在人工智能技术飞速发展的今天,很多以前科幻电影里面的高科技都已经变为现实,而且充斥着我们生活的方方面面,比如说机器人,说说话就能把很多时办了。生活中最常见机器人的有:小米的小爱同学,天猫精灵,华为的小艺,苹果的 siri,微软的小冰以及我们今天用到的图灵机器人等等,他们能够模拟人类对话,这是这类机器人最基本的功能

介绍之前先附上图灵的官网:​​http://www.turingapi.com​

图灵机器人是一款可定制的多场景智能聊天机器人的开放平台,通过调用图灵机器人的 API 即可构建属于自己聊天机器人,我们可以创建一个微信机器人或者 QQ 聊天机器人以供我们娱乐,给无聊的时光带来一丝欢乐。目前图灵机器人对中文语义理解准确率已达 90%,并且具备准确,流畅,自然的中文对话能力,可以满足自然语言对话的需求。完成自动聊天机器人需要了解图灵机器人的知识与原理。

对话体验

流畅自然 自研的增强学习模型,让机器人聊天对话更接近真人

情感交互 23 类情绪识别及多维情感表达,让机器人更拟人化

记忆系统 通过深度记忆系统与用户画像,让机器人更懂你

更多其它介绍可到官网了解,本文主要实现图灵机器人的聊天功能

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复_AI

1.使用之前当然是先要注册,以及实名制(以前图灵接口是免费的,现在需要收费基础版本要 19.9,可到官网了解)

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复_AI_02

2.然后获取图灵机器人 API:创建一个机器人,并配置机器人相关参数

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复_AI_03

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复_微信_04

自动回复

要实现自动回复需要大量的文本数据来训练机器人.提供大量的问答对话训练,让机器人学习其中的对话规律,训练过程也是在构建和丰富机器人的词库,我们常说的词穷,就是我们词汇量储备不足,所以机器人要想能更流畅对话需要更丰富的词库来训练.这样我们就可以实现一个能够与人流畅对话的聊天机器人.比如:当我们收到微信好友发来的消息时,我们如果没有空回复,我们可以将这个消息,传给图灵机器人的 API,他会根据消息做相应的答复,我们再将答复返回给微信好友.

特别提示

特别提示:itchat大多微信基本用不了,特别是2017年后新注册的微信,虽然不能使用itchat库进行微信自动回复,如果itchat无法使用还可以使用wechat-hook进行微信的相关操作.感兴趣的同学可以自行了解,本文主要针对图灵机器人API的使用,对于wechat-hook的使用这里不展开,有机会可以单独唠唠,除了上述方法,你还可以通过控制电脑的的方式进行自动操作,特别强调的是,WeChat-hook或者其他微信操作接口一定要谨慎使用,以免被封号,最终要的是,不要做非法或者违法操作.

安装 itchat 模块

itchat 模块是 Python 实现的微信接口,itchat 的安装命令如下:

​pip3 install itchat​

​pip3 install itchat itchat-uos ​

【编程实践】利用 Python 调用图灵机器人 API 实现实时语音聊天及自动回复_人工智能_05

itchat 介绍

itchat.content 中包含的所有的消息类型参数如下:

TEXT:文本内容

MAP:位置文本/位置分享

CARD:推荐人字典

SHARING:分享名称

RECORDING:语音的下载方法

VIDEO:小视频的下载方法

ATTACHMENT:附件的下载

NOTE:通知文本

SYSTEM:更新内容用户

itchat 登录流程

itchat 提供了登陆所需的每一步的方法,登陆的过程按顺序为: 获取二维码 uuid->获取二维码->判断是否已经登陆成功->获取初始化数据->更新微信相关信息(通讯录、手机登陆状态)->循环扫描新信息(开启心跳)

获取二维码 uuid

获取生成二维码所需的 uuid,并返回。

方法名称: get_QRuuid 所需值:无返回值:成功->uuid,失败->None

获取二维码

根据 uuid 获取二维码并打开,返回是否成功。

方法名称: get_QR 所需值:uuid 返回值:成功->True,失败->False

判断是否已经登陆成功

判断是否已经登陆成功,返回扫描的状态码。

方法名称: check_login 所需值:uuid 返回值:登陆成功->'200',已扫描二维码->'201',二维码失效->'408',未获取到信息->'0'

获取初始化数据

获取微信用户信息以及心跳所需要的数据。

方法名称: web_init 所需值:无返回值:存储登录微信用户信息的字典

获取微信通讯录

获取微信的所有好友信息并更新。

方法名称: get_contract 所需值:无返回值:存储好友信息的列表

更新微信手机登陆状态

在手机上显示登录状态。

方法名称: show_mobile_login 所需值:无返回值:无

循环扫描新信息(开启心跳)

循环扫描是否有新的消息,开启心跳包。

方法名称: start_receiving 所需值:无返回值:无

编程实践

  1. 导入 itchat 和 requests 模块
  2. 使用 requests 库进行的接口的请求,通过请求调用执行图灵的机器人接口,实现聊天对话内容获取
  3. 将得到的内容返回给好友
  4. 扫描二维码登录客户端,连接程序自动回复消息

代码实现

导入 itchat 和 requests 库

import requests
import itchat

通过 API 连接图灵机器人,并接收从图灵机器人返回的消息

KEY = '************'


def get_response(msg):
apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
'key': KEY,
'info': msg,
'userid': 'wechat-robot',
}
try:
r = requests.post(apiUrl, data=data).json()
r.encoding = 'utf-8' # 防止中文乱码
return r.get('text')

except:
return

定义图灵机器人回复方法,将接受到的信息进行编辑然后返回,并发送消息给朋友

@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
defaultReply = 'I received: ' + msg['Text']
reply = get_response(msg['Text'])
return reply or defaultReply

手机扫屏幕弹出的二维码,在电脑上进行登录,登录成功后即可实现自动回复

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

实现机器人语音聊天

也许微信自动聊天无法使用,但是娱乐操作不能少,你还可以使用Python实现语音聊天

pip install SpeechRecognition
pip install pyAudio
需要安装pyAudio,如果不能安装,可以去Python Extension Packages下载安装。
还需要安装百度语言识别库
pip install baidu-aip

完整代码如下:

import requests
import speech_recognition as sr
from aip import AipSpeech

KEY = '3104727d87f7421d951fb9d07cbe5a7c'
BAIDU_APP_ID = '15452710'
BAIDU_API_KEY = 'gO7RyqqMOX5SuTS5pP3GLEtG'
BAIDU_SECRET_KEY = 'NvdiiCoRGQfkda8XZZUei75p8Mazn73K'
aip_speech = AipSpeech(BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_KEY)


def get_response(msg):
# apiUrl = 'http://www.tuling123.com/openapi/api'
apiUrl = 'http://openapi.tuling123.com/openapi/api/v2'
data = {
'key': KEY,
'info': msg,
'userid': 'wechat-robot',
}
try:
r = requests.post(apiUrl, data=data).json()
return r.get('text')
except:
return

r = sr.Recognizer()
# 麦克风
mic = sr.Microphone(sample_rate=16000)
while True:
print('正在录音中,,说完请等待片刻...')
with mic as source:
r.adjust_for_ambient_noise(source)
audio = r.listen(source)
#print('录音结束,识别中...')
#print(type(audio))
audio_data = audio.get_wav_data()
#print(type(audio_data))
# 识别本地文件
ret = aip_speech.asr(audio_data, 'wav', 16000, {'dev_pid': 1536, })
#print(ret)
if ret and ret['err_no'] == 0:
result = ret['result'][0]
print(result)
print(get_response(result))

else:
print('错误:',ret['err_msg'])