快捷搜索:  汽车  科技

微信机器人聊天代码(一小时搭建微信聊天机器人)

微信机器人聊天代码(一小时搭建微信聊天机器人)安装下面我们来看下 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 的工作流程如图:

微信机器人聊天代码(一小时搭建微信聊天机器人)(1)

  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 安装&使用

安装

chatterBot 是使用Python编写的,可以使用 pip 安装:

pip install chatterbot

chatterBot 的中文对话要求Python3 以上版本,建议在Python3.x 环境下开发

测试

打开iPython,输入测试一下

微信机器人聊天代码(一小时搭建微信聊天机器人)(2)

这时你已经可以和机器人对话了,不过现在由于训练数据太少,机器人只能返回简单的对话。

这里是默认的中文对话训练数据 中文训练数据地址:https://github.com/gunthercox/chatterbot-corpus/tree/master/chatterbot_corpus/data/chinese。

那么我们怎么添加训练数据呢?

训练机器人

chatterBot 内置了training class,自带的方法有两种,一种是使用通过输入list 来训练,比如 ["你好" "我不好"],后者是前者的回答,另一种是通过导入Corpus 格式的文件来训练。也支持自定义的训练模块,不过最终都是转为上述两种类型。

chatterBot 通过调用 train() 函数训练,不过在这之前要先用 set_trainer() 来进行设置。例如:

微信机器人聊天代码(一小时搭建微信聊天机器人)(3)

训练好的数据默认存在 ./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。

微信机器人聊天代码(一小时搭建微信聊天机器人)(4)

微信机器人聊天代码(一小时搭建微信聊天机器人)(5)

运行命令 python manage.py启动项目。

在浏览器访问url: http://0.0.0.0:8000/momo?ask=你是程序员吗

微信机器人聊天代码(一小时搭建微信聊天机器人)(6)

到这里,我们已经启动了一个web 项目,可以通过访问url 的方式和机器人对话,是时候接入微信公号了!

接入微信公众号

前提

  1. 拥有一个可以使用的微信公众号(订阅号服务号都可以,如果没有,可以使用微信提供的测试账号)
  2. 拥有一个外网可以访问的服务器(vps 或公有云都可以 aws 新用户免费使用一年,可以试试)
  3. 服务器配置了python3 环境,(建议使用 virtualenvwrapper 配置虚拟环境)

微信设置

登录 https://mp.weixin.qq.com

打开:开发>基本配置

查看公号开发信息:

微信机器人聊天代码(一小时搭建微信聊天机器人)(7)

开启服务器配置:

设置请求url,这里是你配置的url(需要外网可访问,只能是80或443端口)

微信机器人聊天代码(一小时搭建微信聊天机器人)(8)

填写token和EncodingAESKey,这里我选择的是兼容模式,既有明文方便调试,又有信息加密。

微信机器人聊天代码(一小时搭建微信聊天机器人)(9)

详细配置可以参考官方文档:接入指南

如果你的 服务器地址 已经配置完成,现在点击提交应该就成功了。如果没有成功我们接下来看怎么配置服务器地址。

代码示例

先看下 微信请求的视图代码:

微信机器人聊天代码(一小时搭建微信聊天机器人)(10)

这里处理微信请求我使用的是 我用python 写的 微信SDK python-weixin,可以使用 pip 安装: pip install python-weixin

然后更新 app.py 文件:

微信机器人聊天代码(一小时搭建微信聊天机器人)(11)

详细代码参考github: 微信聊天机器人 momo

接入聊天机器人

现在我们公号已经接入了自己的服务,是时候接入微信聊天机器人。

微信聊天机器人的工作流程如下:

微信机器人聊天代码(一小时搭建微信聊天机器人)(12)

看我们消息逻辑处理代码:

微信机器人聊天代码(一小时搭建微信聊天机器人)(13)

微信机器人聊天代码(一小时搭建微信聊天机器人)(14)

微信机器人聊天代码(一小时搭建微信聊天机器人)(15)

微信机器人聊天代码(一小时搭建微信聊天机器人)(16)

可以看到,我处理微信请求返回结果比较简单,也是使用的 python-weixin 包封装的接口,

主要的处理逻辑是 WXResponse。

这里需要注意的是,如果服务器在5秒内没有响应微信服务器会重试。为了加快响应速度,不要在服务器 将 chatterBot 的 storage adapter 设置为使用 jsondb。

上边这些就是,微信聊天机器人的主要处理逻辑,我们运行服务,示例如下:

微信机器人聊天代码(一小时搭建微信聊天机器人)(17)

可以看到这里聊天机器人也可以做简单的数学运算和报时,是因为我在上边指定处理逻辑的时候添加了数学模块和时间模块:

微信机器人聊天代码(一小时搭建微信聊天机器人)(18)

到这里,微信机器人的搭建就完成了,详细代码已经长传到了 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

猜您喜欢: