作为一个极客,当然要像钢铁侠那样有一个自己的人工智能助手才行。而我的经验表明,一个依托于其他平台的作品是不可靠的,只有基于世界的创作才真正值得分享。
借助于api调用以及python语音库speech和腾讯闲聊api,我将自己的小机器人再现了,下面来看看代码吧。
介绍:我安装了下面的几个模块,大家照着安装,其中要提一下speech模块,相关教程放这里,大家自取speech库安装与修改
import hashlib import time import random import string from urllib.parse import quote import requests import speech def curlmd5(src): m = hashlib.md5(src.encode('UTF-8')) # 将得到的MD5值所有字符转换成大写 return m.hexdigest().upper() def get_params(plus_item): # 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) t = time.time() time_stamp = str(int(t)) # 请求随机字符串,用于保证签名不可预测 nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)) # 应用标志,这里修改成自己的id和key app_id = 'xxx' app_key = 'xxx' params = {'app_id': app_id, 'question': plus_item, 'time_stamp': time_stamp, 'nonce_str': nonce_str, 'session': '10000' } sign_before = '' # 要对key排序再拼接 for key in sorted(params): # 键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8。quote默认大写。 sign_before += '{}={}&'.format(key, quote(params[key], safe='')) # 将应用密钥以app_key为键名,拼接到字符串sign_before末尾 sign_before += 'app_key={}'.format(app_key) # 对字符串sign_before进行MD5运算,得到接口请求签名 sign = curlmd5(sign_before) params['sign'] = sign return params def get_text(plus_item): # 聊天的API地址 url = "https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat" # 获取请求参数 plus_item = plus_item.encode('utf-8') payload = get_params(plus_item) # r = requests.get(url,params=payload) r = requests.post(url, data=payload) return r.json()["data"]["answer"] if __name__ == '__main__': while True: text = input('I say:') if text == 'tt': break answer = get_text(text) print('Bot answer:' + answer) speech.say(answer)