可爱的小天

作为一个极客,当然要像钢铁侠那样有一个自己的人工智能助手才行。而我的经验表明,一个依托于其他平台的作品是不可靠的,只有基于世界的创作才真正值得分享。

借助于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)
点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像