一小时搭建微信聊天机器人


一小时搭建微信聊天机器人

文章插图
最近在研究公众号的开发 , 前段时间已经上线了电子书关键词的回复功能 , 调研过程中发现了 Chatterbot 这个不错的 Python 机器人库 , 因此找了一篇还不错的实践教程 , 经作者授权后分享推荐给大家 。
 看完之后 , 你应该可以学会如何正确地接入一个 Chatterbot 应用 。
 另外 , 周日推的那篇推文我在筛选合作的时候不够谨慎 , 商家的主体和宣传信息存在很大的误导性 , 因此我已经删除文章了 , 在这里跟大家道个歉!也提醒昨天几位购买了产品的同学 , 建议拒收或者退货处理 。抱歉~
EarlGrey
文 | goodspeed
编辑 | EarlGrey
推荐 | 编程派公众号(ID:codingpy)
使用Python实现聊天机器人的方案有多种:AIML、chatterBot以及图灵聊天机器人和微软小冰等 。
考虑到以后可能会做一些定制化的需求 , 这里我选择了chatterBot(github 项目地址:https://github.com/gunthercox/ChatterBot) 。
chatterbot是一款python接口的 , 基于一系列规则和机器学习算法完成的聊天机器人 。具有结构清晰 , 可扩展性好 , 简单实用的特点 。
chatterBot 的工作流程如图:
一小时搭建微信聊天机器人

文章插图
  1. 输入模块(input adapter)从终端或者API等输入源获取数据
  2. 输入源会被指定的逻辑处理模块(logic Adapter)分别处理 , 逻辑处理模块会匹配训练集中已知的最接近输入数据句子A , 然后根据句子A去找到相关度最高的结果B , 如果有多个逻辑处理模块返回了不同的结果 , 会返回一个相关度最高的结果 。
  3. 输出模块(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 是使用Python编写的 , 可以使用 pip 安装:
pip install chatterbot
chatterBot 的中文对话要求Python3 以上版本 , 建议在Python3.x 环境下开发
 
测试打开iPython , 输入测试一下
In[1]: from chatterbot import ChatBot # import ChatBotIn[2]: momo = ChatBot('Momo', trainer='chatterbot.trainers.ChatterBotCorpusTrainer')/Users/gs/.virtualenvs/py3/lib/python3.6/site-packages/chatterbot/storage/jsonfile.py:26: UnsuitableForProductionWarning: The JsonFileStorageAdapter is not recommended for production environments.self.UnsuitableForProductionWarning # 这里storage adapter 默认使用的是 json 格式存储数据的 , 如果想在服务端部署 , 应该避免使用这种格式 , 因为实在是太慢了In[3]: momo.train("chatterbot.corpus.chinese") # 指定训练集 , 这里我们使用中文# 下边是对话结果In[4]: momo.get_response('你好')Out[4]: <Statement text:你好>In[5]: momo.get_response('怎么了')Out[5]: <Statement text:没什么.>In[6]: momo.get_response('你知道它的所有内容吗?')Out[6]: <Statement text:优美胜于丑陋.>In[7]: momo.get_response('你是一个程序员吗?')Out[7]: <Statement text:我是个程序员>In[8]: momo.get_response('你使用什么语言呢?')Out[8]: <Statement text:我经常使用 Python, JAVA 和 C++ .>这时你已经可以和机器人对话了 , 不过现在由于训练数据太少 , 机器人只能返回简单的对话 。
这里是默认的中文对话训练数据 中文训练数据地址:https://github


推荐阅读