大家好,我是不会写代码的纯序员。年前来还愿了:要完成关于Caiss的连载介绍。看名字就知道,这也将会是What Caiss系列的最后一篇了。
在这里,我会跟大家聊一下我在Caiss中做了哪些服务化的内容,包括后端服务的提供,docker化和朋友帮忙做的前端的展示,也会顺带给出一些Caiss的性能数据,供大家对比参考。
我之前也提过,这一部分我自己本身懂的也不多。做出来的东东,基本上也就处于【能跑通】&&【不崩溃】的水平。但是,作为Caiss框架的中的一个组成部分,还是很有必要跟大家聊一聊的。
在开始之前,还是先显式的附上传送门:Caiss源码 Github链接
服务化 |
Caiss的服务端搭建在我自己的阿里云ECS上,开发方式是Python和C++混合编程,基于Tornado框架对外提供Restful接口服务。
目前,仅对外提供了英文单词相似词语查询的能力。如果大家看一下源码中[/caiss/python/pyCaissServer.py]文件,应该很容易看出来,其实源码里已经实现了相似语句查询的功能。主要思路是在服务端跑Bert进行实时embedding,然后在根据结果查询相似的语句信息。不过由于暂时没找到啥有意思的落地场景,也考虑到服务器性能问题,就没对外提供能力吧。这里也希望大家帮忙提提意见,或者做一些贡献哈。
Docker化 |
我在介绍文档里一直说Caiss是跨平台组件,支持Mac/Linux/Windows系统。其实做到后来,由于各种原因,对Windows平台(特别是Visual Studio)的支持就被弱化了。为此,我专门维护了一个分支(feature/for-windows-visual-studio),确保基于VS开发C++的朋友也可以用起来ANN增删改查的基础功能。
为了进一步确保大家在各平台都能体验到Caiss的最新功能,我制作了一个基于Ubuntu的Docker镜像发布到DockerHub上,里面预装了确保Caiss能够最优化运行的所有依赖环境。只要几个简单的指令,就能在Docker中体验Caiss的最新版本。当然了,前提是你的机器必须安装了Docker环境。
$ docker pull chunelfeng/caiss # 获取Caiss的最新Docker版本
$ docker run -it --name CaissDemo chunelfeng/caiss # 启动容器,并进入内部环境
$ cmake . # 注意,cmake后面有一个".",表示当前目录
$ make
$ cd python/
$ python3 pyCaissDemo.py # 即可查看python版本demo的运行结果
需要说明一下,Docker镜像中,包含了C++和Python的运行环境,但不包含Java和C#的运行环境。主要目的还是方便大家查看效果和做一些性能对比吧。
前端展示 |
前端展示,是我的好朋友帮忙做的。具体技术就是通过Type Script,调用Caiss服务端提供的接口,并且完成展示渲染。
这种简洁明了的前端风格,恰巧也是我最喜欢的风格。目前仅支持英文单词的相似词语查询,批量查询可以输入"hello|world"这种。
嗯嗯,我主要就是想说一下,做的很好看,至少7分吧。具体效果大家也可以自己体验一下: Caiss Web
结束语 |
到这里,我要介绍的关于Caiss的内容,基本上说完了。稍微总结一下吧。
我从2020年6月开始着手开发Caiss,至今也有半年多了。从那之后,我基本上所有周末休息的时间就都耗进去了。周末空无一人的公司里,喧闹的咖啡厅里,图书馆里,还有数不清的通宵的家里,不停的写代码,不停的改bug,不停的去查一些我不了解的内容,这样的日子让我为自己是一个程序员而真心的感到开心和骄傲。
讲真,刚开始的时候,我也没有很清楚的想过我会把它做成什么样子,只是想着能够借助开源的力量,帮助一些需要帮助的人,实现一些方便好用的智能搜索的功能。很多功能的实现和性能的提升,都是一边开发一边想,然后又不断完善的过程。我把我了解的大部分知识都用在这里了,也算是我这几年工作经验积累的一个小小缩影吧。
回头看这个过程,我惊喜的发现,自己也有一些无形中的提升。我注册了“一面之猿网”来写博客,分享Caiss的涉及技术和内容,希望大家能更好的了解和使用起来;我基于Caiss在阿里云ECS上对外提供基础查询服务,还有朋友一起做了一个精美的前端展示,俨然一个小型网站的样子;我还跟几个朋友一起,建立了一个技术交流群。有一些素未谋面的朋友通过github找到我们,大家会在群里交流一些技术,也会扯一些有的没的,这些都很开心。而这些都是我在刚开始做的时候,完全没有想过。
在github中Caiss项目的star数快要破百的现在,我却已经有快一个月没给Caiss贡献过较大量的变动了,这似乎表明我个人的能力在这方面已经“江郎才尽”了。接下来,我很想把Caiss做成类似Redis的分布式后端组件,今后大家可以通过 select words from tableA join tableB where word like 'water' 这样的基础sql语法,在不同机器的不同Caiss模型中,查出和water语义最相似的几个单词。也很想做一些针对性的算法优化,使得Caiss可以提供一些行业级别的能力,比如:输入一篇英文作文或者作文题目,就可以查询出几篇主题相似的范文。特别欢迎有志同道合的朋友,可以随时联系我们,来提意见,出创意,贡献代码。当然了,我也会在今后不断的学习,尽快完成下一步的破局。
下一步会做什么,做成什么样,我现在也不知道。或许是完全推倒重做也说不定。不过,一切敬请期待~
[2021.01.31 by Chunel]
个人信息
微信: ChunelFeng
邮箱: chunel@foxmail.com
个人网站:www.chunel.cn
github地址: https://github.com/ChunelFeng