欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python轻松实现与图灵机器人的人机交互

程序员文章站 2022-03-04 21:07:46
...

要实现与图灵机器人的交互,首先就要调用图灵机器人的API接口,我们首先创建一个机器人,步骤如下:

  1. 图灵机器人官网,登陆注册成为用户。
  2. 登陆后点击创建机器人,每个用户可免费申请5个机器人,创建成功后如图所示:python轻松实现与图灵机器人的人机交互点击机器人可以进入机器人设置页面。但现在我们不必关心机器人的设置。

下一步就是调用机器人的API接口,首先可以查看机器人的API文档,其中编码、接口、请求方式都是特别重要的:python轻松实现与图灵机器人的人机交互请求示例如下:

{
	"reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "",
        "userId": ""
    }
}

我们可以看到请求参数是JSON类型,其中perceptionuserInfo是必填参数,如图:python轻松实现与图灵机器人的人机交互python轻松实现与图灵机器人的人机交互python轻松实现与图灵机器人的人机交互python轻松实现与图灵机器人的人机交互perception里包含了用户输入信息,在这里我们只需要关心inputText字段,里面包含了用户发送的文字信息;userInfo里面包含了用户参数,其中apiKey是指定每个机器人的唯一参数,相当于机器人ID,我们可以在机器人管理页面将apiKey复制下来:python轻松实现与图灵机器人的人机交互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": "亲,已帮你找到相关酒店信息"
            }
        }
    ]
}

其中比较重要的字段就是codetext字段,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', '你是谁')

在这里我们做了一个简单的示例,然后再看看输出结果:python轻松实现与图灵机器人的人机交互需要注意的是,返回结果是一个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从不缺席。