這段時間陸陸續續的開發了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的這些特性后,其實也沒有那么難,反而會體會到它這樣設計的合理性。
用到的一些庫
以下是我們用到的一些庫,有興趣的同學可以自主了解以下這些庫的作用。