python轻松实现与图灵机器人的人机交互
要实现与图灵机器人的交互,首先就要调用图灵机器人的API接口,我们首先创建一个机器人,步骤如下:
- 到图灵机器人官网,登陆注册成为用户。
- 登陆后点击创建机器人,每个用户可免费申请5个机器人,创建成功后如图所示:点击机器人可以进入机器人设置页面。但现在我们不必关心机器人的设置。
下一步就是调用机器人的API接口,首先可以查看机器人的API文档,其中编码、接口、请求方式都是特别重要的:请求示例如下:
{
"reqType":0,
"perception": {
"inputText": {
"text": "附近的酒店"
},
"inputImage": {
"url": "imageUrl"
},
"selfInfo": {
"location": {
"city": "北京",
"province": "北京",
"street": "信息路"
}
}
},
"userInfo": {
"apiKey": "",
"userId": ""
}
}
我们可以看到请求参数是JSON类型,其中perception和userInfo是必填参数,如图:perception里包含了用户输入信息,在这里我们只需要关心inputText字段,里面包含了用户发送的文字信息;userInfo里面包含了用户参数,其中apiKey是指定每个机器人的唯一参数,相当于机器人ID,我们可以在机器人管理页面将apiKey复制下来:userId可以随意指定,它用来保存用户会话。
接下来我们看看返回值,这是官方文档的返回示例:
{
"intent": {
"code": 10004,
"intentName": "",
"actionName": "",
"parameters": {
"nearby_place": "酒店"
}
},
"results": [
{
"groupType": 1,
"resultType": "url",
"values": {
"url": "http://m.elong.com/hotel/0101/nlist/#indate=2016-12-10&outdate=2016-12-11&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"
}
},
{
"groupType": 1,
"resultType": "text",
"values": {
"text": "亲,已帮你找到相关酒店信息"
}
}
]
}
其中比较重要的字段就是code和text字段,code是响应状态码,text是返回值,更多信息可以查看图灵机器人官方的API文档。
要实现与机器人的交互,首先就要定义好接口,我们可以将调用接口的函数封装在一个类里面,这样在后续使用这个接口的时候将会非常方便。但是在那之前,我们需要先测试接口的可行性,可以编写如下代码:
import requests
import json
url = 'http://openapi.tuling123.com/openapi/api/v2'
def send_msg(userid, msg):
'''向机器人发送消息,并返回结果'''
base_data = { #构造一个字典参数
"perception": {
"inputText": {
"text": msg
}
},
"userInfo": {
"apiKey": '这里改为自己的apikey',
"userId": userid
}
}
headers = { #构造一个请求头,其中定义了传输格式
'content-type': 'application/json'
}
data = json.dumps(base_data).encode('utf8')#将字典对象转化为JSON对象,再编码为uft-8
resp = requests.post(url, data=data)#发送请求
print(resp.text)#输出结果
if __name__ == '__main__':
send_msg('jude', '你是谁')
在这里我们做了一个简单的示例,然后再看看输出结果:需要注意的是,返回结果是一个str类型对象,意味着如果我们要解析结果,可以用json()方法将其转化为字典。
接下来我们将其封装成一个类,其中包含发送请求方法和解析返回值的方法,如下所示:
import requests
import json
class Robot():
def __init__(self):
'''先初始化请求URL和apikey'''
self.url = 'http://openapi.tuling123.com/openapi/api/v2'
self.apikey = '这里换成自己的apikey'
def send_msg(self, userid, msg):
'''向机器人发送消息,并返回结果'''
base_data = { #构造一个字典参数
"perception": {
"inputText": {
"text": msg
}
},
"userInfo": {
"apiKey": self.apikey,
"userId": userid
}
}
headers = { #构造一个请求头,其中定义了传输格式
'content-type': 'application/json'
}
data = json.dumps(base_data).encode('utf8')#将字典对象转化为JSON对象,再编码为uft-8
resp = requests.post(self.url, data=data)#发送请求
self.msg_analysis(resp)#解析结果
def msg_analysis(self, resp):
'''解析返回结果'''
resp_dic = resp.json()#将结果转化为字典类型,方便解析
if resp_dic['intent']['code'] == 10004:#如果返回成功状态码,才进行下列操作
self.result_type = resp_dic['results'][0]['resultType']
self.result_text = resp_dic['results'][0]['values']['text']#将解析的结果保存为对象属性
经过封装之后,就可以方便地调用了,从而实现人机交互:
if __name__ == '__main__':
robot = Robot()#先创建一个接口对象
while True:
msg = input('我:')#控制台输入
robot.send_msg('jude', msg)#发送数据并解析结果
print('图灵机器人:' + robot.result_text + '\n' + robot.result_type)#打印结果
程序运行结果如下:
我:你是谁啊
图灵机器人:我是图灵机器人,就是那位人见人爱花见花开的图灵机器人。
text
我:你好
图灵机器人:啦啦啦,每天都是好心情
text
我:
这样就实现了简单的人机交互,如果想要了解更多的功能,请查看图灵机器人官方文档。
如果你觉得文章对你有帮助,可以关注微信公众号“机器图腾”,里面有免费的网络爬虫教程以及python学习资源,每周不定时更新一些有趣的python小项目。你也可以继续浏览我的另一篇相似文章python如何在个人QQ后端部署图灵机器人。有趣的事,python从不缺席。
上一篇: 人机交互验证——极验的介绍和使用
下一篇: docker-compose