简单“智能”聊天机器人Python实现


简介

各位看到这个标题先不要太期待这个聊天机器人能够有多好的表现,智能我是加了双引号的哦。(不想看废话的话直接跳,<0-0>)

现在人工智能的发展不可谓之不快,于是出现了各种各样智能交互机器人,但是很多人和他们聊聊就知道是不是真的所谓的“智能”。如果有一天,我们和一个聊天机器人聊天就像和人聊天一样的话,不知道是该高兴还是担忧。突然想起了之前在围棋界的人机大战,当时有人就说“Alphago赢了,我们倒是不用担心,值得担心的是它会故意输”。

好了废话就一段,现在开始简单的介绍一下,如何用python来实现一个简单的聊天机器人。首先得装个python是吧,然后得稍微会一点点python的语法是吧。……

当然我无法写出能直接和人聊天的机器人,这里的聊天机器人是调用了图灵机器人的api接口 http://www.tuling123.com/

关于整个程序的思路就是:

  1. 输入你的文字
  2. 调用图灵机器人的api,获取机器人的回应
  3. 将回应中的文字,通过百度语音合成的api合成语音

Python_Code

#!/usr/bin/env python  
# _*_ coding:utf-8 _*_  
#  
# @Version : 1.0  
# @Time    : 2018/3/22  
# @Author  : 圈圈烃
# @File    : TRobot.py
#
import requests
import json
import os
from aip import AipSpeech


def communication(info):
    """图灵机器人接入"""
    key = 'yourkey'     # 这里的yourkey需要去图灵机器人官网免费申请
    api = 'http://www.tuling123.com/openapi/api?key='+key+'&info='+info
    res = requests.get(api)
    dict_json = json.loads(res.text)
    if dict_json['code'] == 100000:     # 100000为图灵机器人api返回的参数
        return (dict_json["text"])
    elif dict_json['code'] == 200000:
        return (dict_json["text"] + dict_json['url'])


def Robot_Speech(data):
    """ 百度AI语音合成"""
    APP_ID = 'your'
    API_KEY = 'your'
    SECRET_KEY = 'your '
    # 上面三个参数则需要去百度AI官网免费申请
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    # 合成语音类型参数,详见百度AI
    result = client.synthesis(data, 'zh', 1, {
        'vol': 10, 'spd':4, 'per':'4'
    })
    # 识别正确返回语音二进制
    if not isinstance(result, dict):
        with open('auido.mp3', 'wb') as f:
            f.write(result)


def main():
    while True:
        data = input('我:')
        if data == 'quit':
            print('牛皮哄哄:好了,我不和你聊了')q
            break

        else:
            voice = communication(data)
            print('牛皮哄哄:'+voice)
        Robot_Speech(voice)
        os.system('auido.mp3')  #这里的语音则是使用系统默认的播放器播放


if __name__ == '__main__':
    main()

实现效果

可以看出来,这个机器人能够实现一些简单的聊天
同时也可以获取一些小故事、笑话、查询一下天气什么的,具体的功能还是去其官网查看。

我这里默认的是用网易云音乐播放声音

当然这个程序是可以把机器人回复的信息播放出来的,如果在改进一下的话可以将我们的语音输入,调用百度AI的语音识别功能,这样就可以实现直接的人机对话。有兴趣的朋友也可以试一下。