微信机器人聊天代码(一小时搭建微信聊天机器人)
微信机器人聊天代码(一小时搭建微信聊天机器人)安装下面我们来看下 chatterBot 如何使用chatterBot 的工作流程如图:值得一说的是chatterBot 是一个模块化的项目,分为 input Adapter、logic Adapter、storage Adapter、output Adapter以及Trainer 模块。logic Adapter是一个插件式设计,主进程在启动时会将用户定义的所有逻辑处理插件添加到logic context中,然后交MultiLogicAdapter 进行处理,MultiLogicAdapter 依次调用每个 logic Adapter,logic Adapter 被调用时先执行can_process 方式判断输入是否可以命中这个逻辑处理插件。比如”今天天气怎么样“这样的问题显然需要命中天气逻辑处理插件,这时时间逻辑处理插件的can_process 则会返回False。在命中后logic
一小时搭建微信聊天机器人
使用Python实现聊天机器人的方案有多种:AIML、chatterBot以及图灵聊天机器人和微软小冰等。
考虑到以后可能会做一些定制化的需求,这里我选择了chatterBot(github 项目地址:https://github.com/gunthercox/ChatterBot)。
chatterbot是一款python接口的,基于一系列规则和机器学习算法完成的聊天机器人。具有结构清晰,可扩展性好,简单实用的特点。
chatterBot 的工作流程如图:
- 输入模块(input adapter)从终端或者API等输入源获取数据
- 输入源会被指定的逻辑处理模块(logic Adapter)分别处理,逻辑处理模块会匹配训练集中已知的最接近输入数据句子A,然后根据句子A去找到相关度最高的结果B,如果有多个逻辑处理模块返回了不同的结果,会返回一个相关度最高的结果。
- 输出模块(output adapter)将匹配到的结果返回给终端或者API。
值得一说的是chatterBot 是一个模块化的项目,分为 input Adapter、logic Adapter、storage Adapter、output Adapter以及Trainer 模块。
logic Adapter是一个插件式设计,主进程在启动时会将用户定义的所有逻辑处理插件添加到logic context中,然后交MultiLogicAdapter 进行处理,MultiLogicAdapter 依次调用每个 logic Adapter,logic Adapter 被调用时先执行can_process 方式判断输入是否可以命中这个逻辑处理插件。比如”今天天气怎么样“这样的问题显然需要命中天气逻辑处理插件,这时时间逻辑处理插件的can_process 则会返回False。在命中后logic Adapter 负责计算出对应的回答(Statement对象)以及可信度(confidence),MultiLogicAdapter会取可信度最高的回答,并进入下一步。
下面我们来看下 chatterBot 如何使用
chatterBot 安装&使用安装
chatterBot 是使用Python编写的,可以使用 pip 安装:
pip install chatterbot
chatterBot 的中文对话要求Python3 以上版本,建议在Python3.x 环境下开发
测试
打开iPython,输入测试一下
这时你已经可以和机器人对话了,不过现在由于训练数据太少,机器人只能返回简单的对话。
这里是默认的中文对话训练数据 中文训练数据地址:https://github.com/gunthercox/chatterbot-corpus/tree/master/chatterbot_corpus/data/chinese。
那么我们怎么添加训练数据呢?
训练机器人
chatterBot 内置了training class,自带的方法有两种,一种是使用通过输入list 来训练,比如 ["你好" "我不好"],后者是前者的回答,另一种是通过导入Corpus 格式的文件来训练。也支持自定义的训练模块,不过最终都是转为上述两种类型。
chatterBot 通过调用 train() 函数训练,不过在这之前要先用 set_trainer() 来进行设置。例如:
训练好的数据默认存在 ./database.db,这里使用的是 jsondb。
对 chatterBot 的介绍先到这里,具体用法可以参考文档:ChatterBot Tutorial:http://chatterbot.readthedocs.io/en/stable/tutorial.html
接下来,介绍如何在项目中使用 chatterBot。
使用 Sanic 创建项目
Sanic 是一个和类Flask 的基于Python3.5 的web框架,它编写的代码速度特别快。
除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码。
对 Sanic 不了解的可以参考我之前的一篇文章: python web 框架 Sanci 快速入门,可以在公号输入 【sanic】获取文章地址。
这里之所以使用 Sanic 是因为他和Flask 非常像,之前我一直使用Flask,并且它也是专门为Python3.5 写的,使用到了协程。
首先建个项目,这里项目我已经建好了,项目结构如下:
. ├── LICENSE ├── README.md ├── manage.py # 运行文件 启动项目 使用 python manage.py 命令 ├── momo │ ├── __init__.py │ ├── app.py # 创建app 模块 │ ├── helper.py │ ├── settings.py # 应用配置 │ └── views │ ├── __init__.py │ ├── hello.py # 测试模块 │ └── mweixin.py # 微信消息处理模块 ├── requirements.txt └── supervisord.conf
源码我已经上传到github,有兴趣的可以看一下,也可以直接拉下来测试。
项目代码地址: https://github.com/gusibi/momo/tree/chatterbot
我们先重点看下 hello.py文件 和 helper.py。
运行命令 python manage.py启动项目。
在浏览器访问url: http://0.0.0.0:8000/momo?ask=你是程序员吗
到这里,我们已经启动了一个web 项目,可以通过访问url 的方式和机器人对话,是时候接入微信公号了!
接入微信公众号前提
- 拥有一个可以使用的微信公众号(订阅号服务号都可以,如果没有,可以使用微信提供的测试账号)
- 拥有一个外网可以访问的服务器(vps 或公有云都可以 aws 新用户免费使用一年,可以试试)
- 服务器配置了python3 环境,(建议使用 virtualenvwrapper 配置虚拟环境)
微信设置
登录 https://mp.weixin.qq.com
打开:开发>基本配置
查看公号开发信息:
开启服务器配置:
设置请求url,这里是你配置的url(需要外网可访问,只能是80或443端口)
填写token和EncodingAESKey,这里我选择的是兼容模式,既有明文方便调试,又有信息加密。
详细配置可以参考官方文档:接入指南
如果你的 服务器地址 已经配置完成,现在点击提交应该就成功了。如果没有成功我们接下来看怎么配置服务器地址。
代码示例
先看下 微信请求的视图代码:
这里处理微信请求我使用的是 我用python 写的 微信SDK python-weixin,可以使用 pip 安装: pip install python-weixin
然后更新 app.py 文件:
详细代码参考github: 微信聊天机器人 momo
接入聊天机器人现在我们公号已经接入了自己的服务,是时候接入微信聊天机器人。
微信聊天机器人的工作流程如下:
看我们消息逻辑处理代码:
可以看到,我处理微信请求返回结果比较简单,也是使用的 python-weixin 包封装的接口,
主要的处理逻辑是 WXResponse。
这里需要注意的是,如果服务器在5秒内没有响应微信服务器会重试。为了加快响应速度,不要在服务器 将 chatterBot 的 storage adapter 设置为使用 jsondb。
上边这些就是,微信聊天机器人的主要处理逻辑,我们运行服务,示例如下:
可以看到这里聊天机器人也可以做简单的数学运算和报时,是因为我在上边指定处理逻辑的时候添加了数学模块和时间模块:
到这里,微信机器人的搭建就完成了,详细代码已经长传到了 github: https://github.com/gusibi/momo/tree/chatterbot,感兴趣的可以参考一下。
参考链接- ChatterBot 项目地址:https://github.com/gunthercox/ChatterBot
- ChatterBot Tutorial:http://chatterbot.readthedocs.io/en/stable/tutorial.html
- 用Python快速实现一个聊天机器人:http://www.jianshu.com/p/d1333fde266f
- 基于Python-ChatterBot搭建不同adapter的聊天机器人:https://ask.hellobi.com/blog/guodongwei1991/7626
- 擁有自動學習的 Python 機器人 - ChatterBot:https://kantai235.github.io/2017/03/16/ChatterBotTeaching/
- 使用 ChatterBot构建聊天机器人:https://www.biaodianfu.com/chatterbot.html
- python-weixin sdk: https://github.com/gusibi/python-weixin