【Python小小白也可以】七夕又到了写个用AI写情话的

本文正在参加「Python 主题月」,详情查看 活动链接

大家好!我是 Python 小小白,七夕又双叒叕快到了,这里带你超快上手 AI ChatBot 教程,

真正手把手教你做个用 AI 续写情话的聊天机器人,

(由Paddlehub + Python Wechaty 合体打造)

搭建过程会遇到好多好多 深坑 呀! 不过都替大家蹚过了!

踩坑详情见下篇

话不多说 先上效果: 开整

一、环境支持

这里 win7 环境下运行

1. python 版本: v>=3.8

python-v

2. pip 版本: v21.1.1

python-pip-v21.1.1

3. docker 服务

二、具体步骤

1. 申请免费 token

1.1 Padlocal_token

  1. 打开 【wechaty 官网】

  2. 找到 python-wechaty-for-padlocal-puppet-service 这篇入门攻略

  3. TOKEN 申请方法 --> Padlocal: 👉🏻 Get Free PadLocal Token 👈🏻

padlocal_token

1.2 wechaty_token

就是一个 UUID 避免和别人重复 申请地址: wechaty_token

2. 搭建 PadLocal Token Gateway 服务环境

  1. vim 创建脚本
vi wechaty_test.sh

命令 i -- 输入下面的脚本内容 --
复制代码
  1. 输入如下脚本

    开头添加一行: #!/bin/bash

    1. WECHATY_PUPPET_PADLOCAL_TOKEN 即为上面申请的 Padlocal_token
    2. SERVER_PORT 对外访问端口: 9999
    3. WECHATY_TOKEN 为上面申请的 wechaty_token
#!/bin/bash

export WECHATY_LOG="verbose"
export WECHATY_PUPPET="wechaty-puppet-padlocal"
export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_XXXXXX"

export WECHATY_PUPPET_SERVER_PORT="9999"
export WECHATY_TOKEN="1fe5f846-3cfb-401d-b20c-XXXXX"

docker run -ti \
 --name wechaty_puppet_service_token_gateway \
 --rm \
 -e WECHATY_LOG \
 -e WECHATY_PUPPET \
 -e WECHATY_PUPPET_PADLOCAL_TOKEN \
 -e WECHATY_PUPPET_SERVER_PORT \
 -e WECHATY_TOKEN \
 -p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \
 wechaty/wechaty:0.56
复制代码

wechaty_test

然后给刚才创建的脚本 wechaty_test.sh 设置一下 sh 命令权限, 输入如下命令 & 回车即可

# 这里 +x 是字母 x
chmod +x ./wechaty_test.sh
复制代码

3. 启动 Docker

docker 安装目录下: E:\codetools\Docker Toolbox\start.sh, 启动 docker 服务, 成功如下图:

启动docker

未启动 docker 服务的情况下, 启动我们的 wechaty_test.sh 服务会失败, 如下图:

未启动docker-sh-fail

4. 运行 wechaty_test.sh, 连接 wechaty 服务

sh ./wechaty_test.sh
复制代码

sh-wechaty_test

如下心跳图, 就说明我们已经与 wechaty远程服务器连上了,
sh-wechaty_test

如果已经运行过机器人项目并登陆了微信, 这是微信收到消息后在这里我们就可以看到了!

send-test-message
send-test-message

sh 命令行 可以看到这条消息:
wechaty-get-test-message

接下来就要克隆一下 python-wechaty-getting-started 的项目代码

三、python 机器人项目

1. 克隆项目 python-wechaty-getting-started

下载完克隆项目, 用 PyCharm 打开后进行简单配置

git clone https://github.com/wj-Mcat/python-wechaty-getting-started

cd python-wechaty-getting-started
复制代码

2. 配置 examples/ding-dong-bot.py

SERVICE_TOKEN 对应 前文申请的 wechaty_token

SERVICE_ENDPOINT 对应 启动的 docker 服务

# examples/ding-dong-bot.py

## 引入 os 包 设置环境变量
import os

os.environ['WECHATY_PUPPET'] = "wechaty-puppet-service"
os.environ['WECHATY_PUPPET_SERVICE_TOKEN'] = "bb137430-27ae-xxxx-xxx-xxxxxxxx"
os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = "192.xxx.xx.100:9999"
复制代码

3. 启动

# 启动项目
python examples/ding-dong-bot.py
复制代码

PyCharm-start-dingdongbot

成功后 出现二维码就可以用微信 扫码登录了. 登录不上可以多登录几次..

然后和小伙伴测试一下吧: 发送 测试消息 ding 会自动回复 dong + an img

ding-dong-bot-first-test-send-msg

到此,恭喜你入坑。

以上就是前期项目铺垫啦!

下面才是可以续写情话机器人的关键逻辑!

四、给机器人加持 AI 续写情话

1. 安装 paddlepaddle

python 的包管理器 pip 安装 paddlepaddle

pip install paddlepaddle
复制代码

2. 安装 paddlehub

这里使用 百度飞浆 深度学习平台的应用场景中的工具组件 Paddlehub

本文使用 应用场景PaddleHub >> 智能文本生成 >> 情话生成模型

安装 paddlehubuser 目录

pip install paddlehub --user
复制代码

这时 PyCharm 会重新引入相关依赖

3. 编写机器人逻辑

就使用文档中的示例进行修改, 超简单, 真是太棒了,

# 引入依赖
import paddlehub as hub

# 加载模型
module = hub.Module(name="ernie_gen_lover_words")
复制代码

on_message 函数中修改具体逻辑, 已详细说明

async def on_message(msg: Message):
    """
    Message Handler for the Bot
    """
    # 如果自己发的消息就返回不回复了
    if msg.is_self():
        return

    ## 以示例文本训练生成 test_texts = ['情人节', '故乡', '小编带大家了解一下程序员情人节']

    # generate message
    # 这里参数 texts=[msg.text()] 是以收到的消息作为训练文本进行生成一个二维数组
    # beam_width 返回语句的数量 这里设置为 1条
    results = module.generate(texts=[msg.text()], use_gpu=True, beam_width=1)
    # 没有生成对应内容也直接返回
    if results is None:
        return
    # 发送消息: 二维数组的第一项
    await msg.say(results[0][0])
复制代码

到此, 哈哈哈 完成啦

4. 运行

开始运行吧: 运行失败可以多运行几次! 这个过程会下载 Paddle模型 文件包, 请耐心等待

python examples/ding-dong-bot.py
复制代码

效果: 快来和你的小伙伴试试吧,

paddlehub 的更多 【应用场景】 也可以自行尝试!

怎么样, 是不是有点酷!!!

踩坑

如有不足, 疑问, 欢迎不吝赐教, 批评指出!

如果对你有些许帮助, 还请动动发财的小手一键三连! 点个小赞, 评论收藏! 谢~谢啦~~

踩过的各种深坑已替大家蹚过了, 将在后续更文中一一详细列出,敬请期待,