通过Sphinx和WebSocket搭建聊天机器人
昨天晚上突然心血来潮想做一个聊天机器人,正好想温习下Sphinx和WebSocket,于是就打算用WebSocket负责通信,Sphinx负责关键词检索来完成。由于阿里云主机上还没有安装Sphinx,首先下载了sphinx-for-chinese-2.1.0,编译安装就不赘述了。
地址:Robot
基本的流程如下:
- 预处理Sphinx索引:对已有词库通过xml方式创建索引
- 前台通过H5的WebSocket链接:
ws://robot.guojianxiang.com/chat - Nginx对location做了反向代理,代理到php脚本监听的端口
- php脚本处理socket请求
详细说明:
预处理Sphinx全量索引:通过php脚本读取词库文件,将数据放到xml里,由于词库数据量比较大,我将每1000个词库数据存储到一个xml文件里
前台通过H5的WebSocket链接:
1 | var ws = new WebSocket("ws://robot.guojianxiang.com/chat"); |
Nginx对location做反向代理:
首先对Nginx事件设置为epoll处理:
1
2
3
4
5events {
use epoll;
worker_connections 1024;
}对来自 /chat 的请求代理到 php脚本监听的端口
php脚本处理socket请求
通过守护进程运行php脚本,监听服务器端口,对到访的socket请求进行处理
从Sphinx里的索引检索出要回复的内容,再通过socket返回到客户端
迭代版本计划:
- 优化词库(现有词库不太完美)
- 优化搜索结果,加入权重
- 自动学习功能(暂时还没想好怎么做呢,大家有好的思路互相交流下~)
- 想想怎么把所有的代码和系统配置开源