我们使用Rust开发的AI知识库应用

这段时间陆陆续续的开发了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开始反而没有负担,更容易接受。

  • 难在哪里
    1. 语法
      Rust中的语法糖很多,需要大量的时间去熟练运用。
    2. 设计思想
      Rust的中的生命周期、所有权的概念,以及引用借用,这些是不得不面对的问题。但是理解这些也能让我们写出更好的代码。

    3. 宏很好用,类似Java里的注解,但是,要看懂别人的宏,很费劲,写起来也容易出错。

然而,当你适应Rust的这些特性后,其实也没有那么难,反而会体会到它这样设计的合理性。

用到的一些库

以下是我们用到的一些库,有兴趣的同学可以自主了解以下这些库的作用。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91045.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试实战篇

目录 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 1.3 将自动化测试补充至测试报告 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 TestDevelopment: 测试用例 - Gitee.comhttps://gitee.com/Axurea/test-development/tree/master/2…

idea 服务器Debug端口启动设置

一:在阿里云服务器安全组已经设置了端口授权对象:正确命令:nohup java -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address9998 -jar -Duser.timezoneGMT08 -Xms256m -Xmx256m /opt/projects/*/*/*-starter-1.0-SNAPSHOT.jar -…

大模型量化004

Bert P-tuning BertPET、BertP-Tuning Chain of Thought Few shot Cot Auto-COT 解决手动编写高质量CoT示例麻烦耗时的问题 Auto COT 自动思维链生成器 1.业务场景: 每天收到很多反馈,之前需要人工整理,找到重点,做判断那些需要立…

C#(基本语法)

数据类型C#是一种强类型语言,变量必须声明类型。基本数据类型包括整型(int、long)、浮点型(float、double)、布尔型(bool)、字符型(char)和字符串型(string&a…

ARM-I2C软实现

开发流程引脚初始化引脚功能定义实现读操作实现写操作GD32F4软件I2C初始化void SoftI2C_init() {// 时钟配置rcu_periph_clock_enable(SCL_RCU);// 设置输出模式gpio_mode_set(SCL_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SCL_PIN);gpio_output_options_set(SCL_PORT, GPIO_O…

防水医用无人机市场报告:现状、趋势与洞察

市场规模与增长趋势在全球医疗科技快速发展的当下,防水医用无人机市场正崭露头角,展现出强劲的发展势头。据 QYR统计,2023 年全球医用无人机市场销售额达到 1.9 亿美元,预计到 2030 年将飙升至 8.5 亿美元,年复合增长率…

haproxy代理

一.负载均衡 1.1.什么是负载均衡 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均 衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,…

【面试】软件测试面试题

1. 测试用例如何编写 2. bug的生命周期 项目有多少人?多少条测试用例?多少bug?自己发现的第一条?(是不是bug) 3. 缺陷管理工具 包括Jira, PingCode, 禅道,BugZilla,Redmine, TAPD&am…

HbuilderX开发小程序

1.打卡HbuilderX,选择文件—新建—项目2.创建项目3.在HbuilderX中运行前要确定微信开发这工具的服务端口号是打开的4.HbuilderX中点击预览可以实时预览5.在微信开发者中进行本地测试点击后自动跳转到微信开发者工具中运行项目

Netty中FastThreadLocal解读

io.netty.util.concurrent.FastThreadLocal 是 Netty 中提供的高性能线程局部存储(Thread-Local Storage)实现,位于 io.netty.util.concurrent 包。它是 Java 标准库 ThreadLocal 的替代品,旨在优化性能,减少内存分配和…

上海迪士尼游玩攻略 小铁寄存柜让你轻松畅玩

去上海迪士尼玩最烦带一堆行李,其实有小铁寄存柜帮忙就能轻装上阵,各个关键位置都有分布,玩起来特别省心。​刚到迪士尼的时候,要是坐地铁到上海国际旅游度假区站,1/2 号口安检区就有小铁柜,行李箱、大背包…

飞算科技重磅出品:飞算 JavaAI 重构 Java 开发效率新标杆

在 Java 开发领域,一款由国家级高新技术企业自主研发的智能工具正引发行业关注 —— 飞算 JavaAI 不仅承载着中国原创技术的创新基因,更以贴合实际开发场景的功能设计,成为众多企业提升 Java 开发效率的核心助力。​作为飞算数智科技&#xf…

python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析

1.绪论1.1研究背景与意义1.1.1研究背景随着旅游业的快速发展,满意度分析成为评估旅游景点质量和提升游客体验的重要手段。作为中国的旅游城市之一,其旅游景点吸引了大量游客。然而,如何科学评估和提升旅游景点的满意度&#xff0c…

Git快速入门,完整的git项目管理工具教程,git入门到精通!

Git的下载与安装: 直接去官网下载即可; 或者查看这个博客学会下载:Git 详细安装教程(详解 Git 安装过程的每一个步骤)_git安装-CSDN博客 注意:一个文件夹下只能有一个本地仓库(就是一个.git) 细节操作

C++day07(三种取整方法)

学习目标 认识流程图 多种方式解决问题 取整方式和取整函数 1.解决编程问题的过程 1.理解题意,找出关键信息。 2.整理思路,用图或者文字写出算法。 3.将算法步骤翻译为C++代码。 4.编译运行,修改语法或逻辑错误。 不符合则需要回到上一步进行修改。 5 .输入测试用例与…

Go语言实战案例-LRU缓存机制模拟

在高性能服务开发中,缓存是提升访问速度和减少后端负载的重要手段。常见的缓存淘汰策略中,**LRU(Least Recently Used,最近最少使用)**是应用最广的一种。本篇我们用Go语言手写一个LRU缓存机制的模拟实现。一、LRU缓存…

vue2中实现leader-line-vue连线文章对应字符

效果展示 通过点击右边的tag,触发连接操作 第一步:获取右边tag展示 1.右边的tag列表展示,我这边是分为两个list嵌套的数据结构; {"人员": [{

SPEA2(Strength Pareto Evolutionary Algorithm 2)优化算法简介

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)

一、查询要下载的数据库驱动 在IDEA侧边栏找到数据库(databases),新增一个数据连接 右键,属性 点击下载,查看要下载的驱动版本 二、下载数据库驱动(Oracle为例) 下载对应MySQL/Oracle数据库的…

专业Python爬虫实战教程:逆向加密接口与验证码突破完整案例

案例背景假设我们需要爬取一家内部测试系统的动态数据API接口。该系统前端页面使用了复杂的JavaScript混淆技术来防止接口被直接调用,同时对请求参数进行了加密签名。另外,登录环节带有图形验证码用于防护。我们的目标是:分析JavaScript代码&…