1.1. Docker官网下载:Docker
· 如果没有Hyper-V,参考链接安装:win10家庭版没有自带虚拟机怎么办
· 安装就直接下一步就行,关键是安装完成后打开,如果报错 WSL 2 ,参考链接:适用于 Linux 的 Windows 子系统安装指南 (Windows 10) 我也出来过,当时没有截图,报错大概就是一个对话框,提示你没有WSL 2,安装后重启即可
如果Paddle环境安装有问题请参考链接:Windows-paddle-深度学习环境搭建
Paddle版本是1.8.2 Hub版本是1.7.0,这里你可能会问:为什么使用的都不是最新版呢! 这个是因为版本兼容问题,我要使用的是‘plato2_en_base’这个模型,然而最新的paddle版本使用这个模型会报错,所以使用最初的支持这个模型的paddle版本还会更兼容一些
pip install PaddleHub==1.7.0
pip install paddlepaddle-gpu==1.8.2.post97 -i https://mirror.baidu.com/pypi/simple
hub install plato2_en_base==1.0.0
WeChaty:WeChaty是一款开源的微信机器人框架,它基于微信公开的API,对接口进行了一系列的封装,提供一系列简单的接口,然后开发者可以在其之上进行微信机器人的开发。若使用WeChaty需要申请token:免费申请链接http://pad-local.com 申请后会有7天的使用时间,如果想要延长可以续费,或者访问官网:WeChaty
Plato2_en_base模型:PLATO2是一个超大规模生成式对话系统模型。它承袭了PLATO隐变量进行回复多样化生成的特性,能够就开放域话题进行流畅深入的聊天。这里使用的是PaddleHub的预训练模型,也就是不需要训练,下载安装就可以使用,需要注意的是这里是英文的对话,而且是小型的(大型的那个存储空间有点大,干不动),所以使用起来加上了翻译
我本地使用的是Python来对接GateWay(Docker内开启的服务),下载Python版WeChaty:GitHub__python-wechaty-getting-started
cd /d python-wechaty-getting-started解压目录
pip install -r requirements.txt
docker pull wechaty/wechaty:latest
set WECHATY_LOG=verbose
set WECHATY_PUPPET=wechaty-puppet-padlocal
set WECHATY_PUPPET_PADLOCAL_TOKEN=上面申请到的token
set WECHATY_PUPPET_SERVER_PORT=8080
set WECHATY_TOKEN=80908090
-
WECHATY_PUPPET_PADLOCAL_TOKEN 这个是上面申请到的token码
-
WECHATY_PUPPET_SERVER_PORT 这个是本地的端口,可以写别的但要确保这个端口号没人用
-
WECHATY_TOKEN 这个随便写,一会python会用得到
docker run -ti \
--name wechaty_puppet_service_token_gateway \
--rm \
-e WECHATY_LOG \
-e WECHATY_PUPPET \
-e WECHATY_TOKEN \
-e WECHATY_PUPPET_SERVER_PORT \
-e WECHATY_PUPPET_PADLOCAL_TOKEN \
-p "8080:8080" \
wechaty/wechaty:latest
docker run -ti --name wechaty_puppet_service_token_gateway --rm -e WECHATY_LOG -e WECHATY_PUPPET -e WECHATY_TOKEN -e WECHATY_PUPPET_SERVER_PORT -e WECHATY_PUPPET_PADLOCAL_TOKEN -p "8080:8080" wechaty/wechaty:latest
图1 | 图2 |
import os
import asyncio
import paddlehub as hub
import json
from urllib import request
from urllib import parse
from wechaty import (
Contact,
FileBox,
Message,
Wechaty,
ScanStatus,
)
os.environ['WECHATY_PUPPET'] = "wechaty-puppet-service"
os.environ['WECHATY_PUPPET_SERVICE_TOKEN'] = "80908090"
os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = "127.0.0.1:8080"
os.environ['CUDA_VISIBLE_DEVICES']='0'
module = hub.Module(name="plato2_en_base")
#翻译
def fanyi(i='',type='zh-CHS2en'):
Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#创建Form_Data字典,存储上图的Form Data
Form_Data = {}
# en2zh-CHS 英文-中文
# zh-CHS2en 中文-英文
Form_Data['type'] = type
Form_Data['i'] = i
Form_Data['doctype'] = 'json'
Form_Data['Version'] = '2.1'
Form_Data['keyfrom'] = 'fanyi.web'
Form_Data['action'] = 'FY_BY_REALTlME'
data = parse.urlencode(Form_Data).encode('utf-8')
response = request.urlopen(Request_URL,data)
html = response.read().decode('utf-8')
translate_results = json.loads(html)
results = translate_results['translateResult'][0][0]['tgt']
return results
async def on_message(msg: Message):
who = msg.talker() # 发消息的人
#设置好微信名,只要是他发的消息就回复
if who.name == 'TTZO':
#输入,翻译,模型输出,翻译,发送
tf = fanyi(text,'zh-CHS2en')
robott = module.generate(list(tf))
returns = fanyi(robott[0],'en2zh-CHS')
await msg.say(returns)
async def on_login(user: Contact):
print(user)
async def main():
bot = Wechaty()
# bot.on('login', on_login)
bot.on('message', on_message)
await bot.start()
asyncio.run(main())