基于PaddleNLP+wechaty第一个实时微信语音聊天机器人诞生了
PaddleNLP+wechaty+语音接口,近似实时语音聊天
StarCraft(星际争霸)一作为1998年的游戏存活到现在,这是全世界99%的游戏公司都不敢想象的事。它不仅陪伴我度过了青春年少,也成为我直到现在还仅存的几个娱乐活动之一。从练习分农民,建筑学,部位微操;再到高难的甩飞龙,甩影飞,学习Boxer的瞬间用幽灵兵锁住半队航母;最后到运营,资源配置,大局观的磨砺。让我发现,游戏真的不仅仅是游戏,它到后来对我学习,工作的帮助都非常大。以至于后来我会建议别人,不论你喜欢游戏也好,唱歌跳舞运动什么都好,把它练到一种亚职业的状态,你会发现,对你未来的职业会产生巨大的促进意义。用星际争霸图片融合重温经典和童年。
PaddleNLP-wechaty
本例子展示一个基于 PaddleNLP + Wechaty 的微信闲聊机器人。通过Wechaty获取微信接收的消息,然后使用PaddleNLP的plato-mini
模型根据对话的上下文生成新的对话文本,最终以微信消息的形式发送,实现闲聊的交互,可发语音、可发文字聊天,发一张图片,机器人会把图片转换成星际争霸风格的图片。
风险提示
本项目采用的api为第三方——Wechaty提供,非微信官方api,用户需承担来自微信方的使用风险。
在运行项目的过程中,建议尽量选用新注册的小号进行测试,不要用自己的常用微信号。
Wechaty
关于Wechaty和python-wechaty,请查阅以下官方repo:
环境准备
- 系统环境:Windows
- python3.7+
- 安装必要的包,在requirements.txt
pip install -r requirements.txt
安装和使用
-
Set token for your bot
在当前系统的环境变量中,配置以下与
WECHATY_PUPPET
相关的两个变量。
关于其作用详情和TOKEN的获取方式,请查看Wechaty Puppet Services。 -
部署服务器
首先去阿里云申请服务器部署申请好的token,参照链接部署
-
申请百度语音api接口.参照链接百度api
-
Run the bot
python main_chat_bot.py
运行后,可以通过微信移动端扫码登陆,登陆成功后则可正常使用。
运行效果
在main_chat_bot.py
中,通过以下几行代码即可实例化一个plato-mini
的模型
# Initialize a PaddleHub plato-mini model
from interaction_chat import PlatoNlp
model = PlatoNlp(max_turn=10) # Dialogue round configuration # 对话轮次配置
on_message
方法是接收到消息时的回调函数,可以通过自定义的条件(譬如消息类型、消息来源、消息文字是否包含关键字、是否群聊消息等等)来判断是否回复信息,消息的更多属性和条件可以参考Class Message。
本示例中的on_message
方法的代码如下,脚本中回复的条件是:
- 消息类型是文字
async def on_message(msg: Message):
"""
Message Handler for the Bot
"""
if not msg.is_self() and isinstance(msg.text(), str) and len(msg.text()) > 0 and \
msg._payload.type == MessageType.MESSAGE_TYPE_TEXT:
text_new = re.sub(r'<.*>', '', msg.text())
if len(text_new) < 400:
if '@' in text_new:
if '@小裕' in text_new:
bot_response = model.predict(data=text_new.replace('@小裕', ''))
await msg.say(bot_response)
else:
bot_response = model.predict(data=text_new)
await msg.say(bot_response)
else:
await msg.say('说的太多了,长话短说啊')
elif not msg.is_self() and msg._payload.type == MessageType.MESSAGE_TYPE_IMAGE:
file_box_2 = await msg.to_file_box() # 将Message转换为FileBox
await file_box_2.to_file(file_path=img_in_path, overwrite=True) # 将图片保存为本地文件
img_new_path = img_transform(img_in_path) # 调用图片风格转换的函数
file_box_3 = FileBox.from_file(img_new_path) # 从新的路径获取图片
await msg.say(file_box_3)
elif not msg.is_self() and msg._payload.type == MessageType.MESSAGE_TYPE_AUDIO:
file_box_audio = await msg.to_file_box()
await file_box_audio.to_file(file_path=mp3_path, overwrite=True)
audio_path_new = resample_rate(mp3_path, wav_path, new_sample_rate=16000) # 转换能识别格式
text = aip_asr(audio_path_new) # 语音识别成文字
bot_response = model.predict(data=text) # 生产文字回复
bot_response_path = aip_synthesis(bot_response, wav_path_res) # 语音生成
file_box_audio_new = FileBox.from_file(bot_response_path)
await msg.say(file_box_audio_new)
脚本成功运行后,所登陆的账号即可作为一个Chatbot,
更多推荐
所有评论(0)