用Python3调用百度AI和图灵机器人实现一个智能(bushi)AI聊天机器人

题目看起来高大上,但其实这只是假象。关键是要理清思路和流程,掌握了这个之后,整个项目基本就简化成了“傻瓜”项目,对编程能力的要求较低。

思路及流程

一定要搞清这个流程,不要被绕晕。
在这里插入图片描述

完整代码

其中,第2步的百度AI语音识别API参数、第3步的图灵机器人参数必须修改成自己各自账号的,其他参数若想修改的话,先去百度AI开放平台和图灵机器人官网阅读技术文档。

from aip import AipSpeech
import requests
import json
import speech_recognition as sr
import win32com.client

# 1、人类说出问题,生成问题音频
speaker = win32com.client.Dispatch("SAPI.SpVoice")


def my_record(rate=16000):
    r = sr.Recognizer()
    with sr.Microphone(sample_rate=rate) as source:
        print("please say something")
        audio = r.listen(source)

    with open("voices.wav", "wb") as f:
        f.write(audio.get_wav_data())

# 2、问题音频文件转成问题文本
#    导入我们需要的模块,然后将音频文件发送出去,返回文本
#    百度语音识别API配置参数
APP_ID = '你自己的AppID'
API_KEY = '你自己的API Key'
SECRET_KEY = '你自己的Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
path = "voices.wav"


# 将语音转文本STT
def listen():
    with open(path, 'rb') as fp:
        voices = fp.read()
    try:
        result = client.asr(voices, 'wav', 16000, {
    
    'dev_pid': 1537, }) # 'dev_pid'参数1537是识别普通话,也可以设置成其他语言,详情见       
                                                                          百度AI开放平台
        result_text = result["result"][0]
        print("you said: " + result_text)
        return result_text
    except KeyError:
        print("KeyError")
        speaker.Speak("我没有听清楚,请再说一遍...")


# 3、与机器人对话:调用的是图灵机器人
#    图灵机器人的API_KEY、API_URL配置
turing_api_key = "你自己机器人的apikey"
api_url = "http://openapi.tuling123.com/openapi/api/v2"  # 图灵机器人api网址
headers = {
    
    'Content-Type': 'application/json;charset=UTF-8'}


# 图灵机器人回复
def Turing(text_words=""):
    req = {
    
    
        "reqType": 0,
        "perception": {
    
    
            "inputText": {
    
    
                "text": text_words
            },

            "selfInfo": {
    
    
                "location": {
    
    
                    "city": "扬州",  # 必须有的参数
                    "province": "可有可无的参数",
                    "street": "可有可无的参数"
                }
            }
        },
        "userInfo": {
    
    
            "apiKey": turing_api_key,  # 你的图灵机器人apiKey
            "userId": "Stephanie"  # 用户唯一标识(随便填,非密钥)
        }
    }

    req["perception"]["inputText"]["text"] = text_words
    response2 = requests.request("post", api_url, json=req, headers=headers)
    response_dict = json.loads(response2.text)

    result = response_dict["results"][0]["values"]["text"]
    print("AI Robot said:" + result)
    return result


while True:
    my_record()
    request1 = listen()
    response = Turing(request1)
# 4、回复文本转成回复音频输出,回复问题
    speaker.Speak(response)

成果演示视频

和自己写的AI机器人聊天之渐渐超出剧本,演变成两小学鸡吵架两小儿辩日,吵不过AI只能自己气到语塞。

自制搞笑贺岁片|《我,机器人2之两小儿辩日》

心得

  1. 细节!细节!细节!细节决定成败。古人诚不欺我也。这段代码我搞了好多天,一直运行出问题,一直找不到bug,我当时心情崩溃到心想:我和这个智障机器人必须先疯一个。最后的最后,发现问题居然出现在一个参数名的拼写上!是一个小写i和大写I的微小细节!这个教训也一定程度上反应了复制粘贴的重要性(bushi)。单就在这个API调用上,百度和图灵机器人官网都给了具体详细的API调用代码,我们可以先复制粘贴下来先运行一遍看能不能成功,然后再在理解代码的基础上做自己个性化的修改。
  2. API调用虽说在AI领域里,但实际对编程技术的要求并不高,适合用来在外行人面前装装B,或者过年过节的在亲戚家人面前当成个节目表演表演(狗头)。
  3. 不要有畏难心理。比如,工作室布置这个作业下来,我在真正开始着手做这个东西之前,心里想的都是:什么?我才接触编程一年多,你就要我整一个这个玩意儿出来?你也太抬举我了吧…这根本是无法完成的任务啊…但在deadline前一周,我不得不硬着头皮上的时候,我才发现,就这?就这?所以,相信自己!年轻人,不要讲武德,冲就完事儿了,憋整天质疑自己,想这些没用的东西,束手束脚的,走不远。

猜你喜欢

转载自blog.csdn.net/m0_51210480/article/details/111924648