这段时间陆陆续续的开发了2个AI知识库应用,一个面向企业,一个面向C端用户。
-
飞树智库:一个安全高效的面向 企业的知识库平台(https://fskb.coderbox.cn/)。
-
小飞树:一个专注于个人知识管理的AI应用,致力于帮助用户高效整理、检索和利用知识资源的知识库工具(https://xfs.coderbox.cn)。
这次开发,Rust是主力,从后端到客户端(Tauri),再到模型加载部署,全部使用Rust完成。体验很不错。
这两个知识库系统,初版都已上线,欢迎大家体验使用。
Rust适合作为后端开发吗
在用Rust前,一直在使用Java,后端体系中,Java生态确很完善,并且有大规模的应用常见来验证这些库的可用性。在Rust中,后端生态自然是没有Java好的,但是,大部分Java中的库在Rust中也能找到平替,就看能否发现这些库了,因为有些库的命名确实比较奇怪,在仓库中搜索时,可能会搜不到。
那Rust到底适不适合后端开发呢,答案是肯定的,除了常说的Rust的特性外,更多的是Rust语言本身的限定,可以避免很多隐藏的问题。比如这个Option,可以避免很多NPE的问题,再比如Rust中的枚举,以及组合设计而不是继承的思想,都是对复杂的后端系统是有益的。
传统的后端系统,不外乎增删改查,外加缓存,再复杂点的,对服务拆分,变成微服务,再用网关组织起来。其实在这些场景下Rust生态中也有对应的解决方案,只是没有像SpringBoot这样的框架来把它们组织起来。而使用Rust带来的好处,最大的就是资源占用小,一是编译产物体积小,二是运行时内存占用小,比如Java的jar包可能200M+,而用Rust实现相同的功能,可能只有50M+的体积,虽然这点体积优势并对应后端应用来说收益微乎其微,但是在一些工具场景,使用Rust就很适合了。其次Rust的异步及并发库,非常好用,很容易写出支持高并发的代码,这在Web开发中是很有优势的。
Rust在AI场景下的应用
Rust生态对AI场景的支持有限,目前比较有名的库就是Candle和Burn,以及tch。其实在AI方面,对于模型本身,由于是由计算密集型场景,所以性能主要受限于CPU或GPU的性能,语言本身影响不大。但对于模型部署来说,尤其是面向C端的模型部署,往往是越简单越好,如果以Python为基础,免不了要安装一些环境,这对非计算机行业的人来说还是有一定困难的,而Rust的跨平台特性,编译对应平台即可直接运行,无需环境依赖,非常适合做客户端模型部署。
我们在做面向C端用户的知识库时,就使用了Candle来做本地化的模型部署,编译完成后,除了模型文件外,不需要再加载其他环境和文件了,做到真正一键安装启动本地模型。
Candle课程推荐
我们也录制了一个Candle基础的课程,可供大家学习。
rust深度学习库candle-简介
Rust的学习难度
从0开始学Rust容易,从其他语言转Rust难。为什么呢,一是受限于思维定式,从其他语言转换过来时,往往会有一个对比,进而陷入这个对比的循环,而从0开始反而没有负担,更容易接受。
- 难在哪里
- 语法
Rust中的语法糖很多,需要大量的时间去熟练运用。 - 设计思想
Rust的中的生命周期、所有权的概念,以及引用借用,这些是不得不面对的问题。但是理解这些也能让我们写出更好的代码。 - 宏
宏很好用,类似Java里的注解,但是,要看懂别人的宏,很费劲,写起来也容易出错。
- 语法
然而,当你适应Rust的这些特性后,其实也没有那么难,反而会体会到它这样设计的合理性。
用到的一些库
以下是我们用到的一些库,有兴趣的同学可以自主了解以下这些库的作用。