- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
自从和员外上家公司离职后,我们就自己搞公司投入到了RAG大模型的AI产品应用的开发中,这中间有一个春节,前后的总时间大概是三个月左右,在这三个月期间,基本是昼夜兼程啊,到今天3月底结束,产品目前看是有了一个基础的雏形.
在这期间,员外负责整个产品的营销、商业客户的洽谈等方面的内容,我和阿包负责整体的技术架构搭建,代码从0-1的编写,我们是在24年1月26,产品初步上线了一个版本,开始接受企业客户的试用,这让我们接受到了大量的需求,以及我们产品在目前的市场环境中还存在哪些竞争力不足需要改进的地方.
三个月时间过去了,在我们的TorchV AI 产品初步成型之际,和大家分享一下开发RAG、LLM系统以来的一些心得和经验.
RAG(检索增强生成)名词一开始来源于2020年的一片论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》,旨在为大语言模型(LLM)提供额外的、来自外部知识源的信息。这样,LLM 在生成更精确、更贴合上下文的答案的同时,也能有效减少产生误导性信息的可能.
可以说在目前大模型井喷的今天,RAG作为一项为密集型知识NLP任务的处理指明了方向,配合AI大模型,让世界发生了翻天覆地的变化,数以万计的开发者都涌入这个赛道,同时竞争.
我们知道LLM目前存在的一些问题和挑战:
我自己理解LLM大模型本质就是一个二进制文件,所有的知识都通过压缩技术全部压缩在一个/多个GB的二进制文件中,最终在获取数据的时候,通过LLM的模型架构,推理能力,将所有的知识信息又生成出来.
而RAG技术的出现,正好能有效的缓解目前大模型存在的一些问题,主要表现方面如下:
既然我们知道,RAG作为密集型知识库的处理和大模型配合起来有着天然优势,那么如何做好RAG的开发?
RAG应用的基础技术核心是:让大模型依靠现有的数据(PDF/WORD/Excel/HTML等等)精准的回答用户的问题 。
这是最基础的功能,同时也是最低要求,任何做RAG领域的AI应用产品,技术层面都需要去突破解决的技术难题.
注意两个核心点:
技术人对于RAG应用考虑的最核心的就是这两点,而技术测为了要实现这一个目标,其覆盖的知识面以及技术难度都是非常大的.
我很早之前参考大模型的技术架构发展,为RAG画了一张类似的图,如下:
这里面我为做RAG系统的总结为三颗树,LLM大模型是土壤,主要为:数据工程、检索生成、业务系统 。
这里面并没有把对模型的微调放入进来,当我们把基础工程做到80分后,也许对Embedding模型、Chat模型等微调工作会加入进来,针对特定的业务场景做优化.
通过上面的图,我们大概就能知道,RAG+LLM大模型系统的产品开发,是一个综合性非常强的工作内容,这就和大模型的训练一样,整个工程庞大繁杂,是一个系统性工程.
如果我们把三颗树中的每一项都作为一个技术因子,不同的步骤处理优化,都会影响着最终外部的商业的影响力,这就会产生量变到质变的转变.
假设:我们把数据工程和检索工程所有的步骤在技术层面提升了10%,那么我们在和同类竞品去竞争时,我们的优势是多大呢?
在大模型圈子里,经典名言:Garbage in and garbage out,意思显而易见,你给大模型送的数据质量越高,那么大模型的响应回答效果就越好,反之,如果你丢垃圾给大模型,那么大模型也会给你返回垃圾~ 。
所以从这点来看,上层的应用开发者,要做好知识库类型的产品,数据工程绝对是第一道拦路虎,从数据集的不同领域进行分类,目前存在非常多的数据格式 。
这里面包含的多种不同的挑战 。
在数据工程这棵树上,所有的技术发展都不是停滞不前的,这里仅仅只是列了一些基础的树枝,我相信在大模型AI井喷爆发的今天,会更快推进数据工程(ETL)的发展.
当我们把所有的知识数据处理完毕,借助大模型来构建一个Chat系统时,信息检索技术则是必然要用到的 。
从这里我们好像发现,做RAG,无非就是做搜索?
在目前的RAG检索的技术体系中,最普遍的无非两种:关键词和向量语义检索 。
当然,在目前的很多向量数据库中间件中,这两类检索引擎都得到了支持,或者是混合检索也是一种重要的技术手段.
在整个检索生成的过程中,这棵树同样关注的技术细节也非常的多,如下:
在检索生成的这棵树上,和数据工程密切配合不可分割,都是在降低大模型幻觉的道路上深挖技术细节.
做RAG这类AI应用开发以来,感受最深的是和之前做产品/项目并不相同,一方面是技术栈发展较新,新技术带来的技术变革存在非常大的挑战,有了大模型之后,需求&想法也是五花八门,另外,目前的AI应用,我觉得更多的是技术&产品来领导驱动商业的发展,这和普通软件企业的开发流程或许有所不同.
这里我觉得几点非常重要:
我们团队内部经过这段时间的迭代,也碰了很多客户的需求,团队的方向也是在发展中不断的进行调整.
我们在成立TorchV AI时,整体架构如下:
我们以RAG技术为核心,在上层做我们的中间件层,这里面最核心的三个:
主要核心问题聚焦在降低大模型幻觉、不同数据源连接上面 。
通过RAG技术+中间件的方式,开发出了我们的第一个产品基线TorchV Bot。通过持续的产品迭代和不同客户需求碰撞,我们的TorchV Bot基线产品的架构也初步成型。如下图:
主要组件拆分如下:
以上则是目前TorchV的产品雏形,更多细节可以访问官网:https://www.torchv.com 。
随着大模型LLM的爆火,很多开发者在选择开发RAG系统应用时,会可能无法着手.
起初在开发RAG应用的时候,我也纠结过编程语言的选择,在这期间走了很多的弯路,也得到了一些教训.
TorchV.AI的产品目前选择是Java+Python作为服务端的开发语言.
这里面有以下几个原因:
下图是我画的一个Java VS Python这两个编程语言在不同领域的一些特性对比.
目前市面上开发RAG大模型应用最火的当属LangChain、LlamaIndex这两个框架,都是Python语言进行开发,提供了开箱即用的功能,可能在不超过10行代码的情况下,就能轻松完成一个RAG大模型应用的demo.
我们起初也是在纠结在这期间如何更好的做取舍,后来团队内部经过讨论,还是将部分的业务逻辑放在Java语言中,重写RAG过程中的一些核心逻辑和组件.
这里面的思考:
结合在开发RAG应用中涉及到的数据工程等部分逻辑,我们结合两大语言的特性,也能很轻松的勾画出一张便语言级别的架构图,涵盖了在企业开发、业务场景落地时,如何快速的适配上层应用的需求。如下图所示:
在这张图中,我们可以清晰的看到,不同的任务&需求,职责分工是比较明确的.
在这里,当我们使用应用开发时,挑选编程语言来开发应用服务,优先考虑的是生态和稳定性.
当然,这里面并没有唯一的标准,根据自己的实际情况出发来选择是最优的,以上仅仅只是分享一下我的看法.
好了,全文完,做一个总结:
TorchV.AI目前是刚起步阶段,也欢迎更多的企业客户试用,合作!!! 。
如果您有商务合作需求:
请扫码添加以下微信(员外🔥TorchV),并请您告知您的称呼 和 企业名称 .
我们的官网地址:https://www.torchv.com 。
如果你也在关注大模型、RAG检索增强生成技术,欢迎关注我(公众号:八一菜刀) 。
最后此篇关于创业:大模型RAG系统三个月的开发心得和思考的文章就讲到这里了,如果你想了解更多关于创业:大模型RAG系统三个月的开发心得和思考的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有这个代码: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
我有以下问题:在操作系统是 Linux 的情况下和在操作系统是 MacOs 的情况下,我必须执行不同的操作。 所以我创建了以下 Ant 脚本目标: /u
我正在调用 system("bash ../tools/bashScript\"This is an argument!\"&"),然后我正在调用 close(socketFD) 直接在 system
使用最初生成的随机元素来约束随机数组的连续元素是否有效。 例如:我想生成一组 10 个 addr、size 对来模拟典型的内存分配例程并具有如下类: class abc; rand bit[5:0
我正在创建一个必须使用system(const char*)函数来完成一些“繁重工作”的应用程序,并且我需要能够为用户提供粗略的进度百分比。例如,如果操作系统正在为您移动文件,它会为您提供一个进度条,
我即将编写一些项目经理、开发人员和业务分析师会使用的标准/指南和模板。目标是更好地理解正在开发或已经开发的解决方案。 其中一部分是提供有关记录解决方案的标准/指南。例如。记录解决/满足业务案例/用户需
在开发使用压缩磁盘索引或磁盘文件的应用程序时,其中部分索引或文件被重复访问(为了论证,让我们说一些类似于 Zipfian 分布的东西),我想知道什么时候足够/更好地依赖操作系统级缓存(例如,Debia
我们编写了一个 powershell 脚本,用于处理来自内部系统的图像并将其发送到另一个系统。现在,业务的另一部分希望加入其中,对数据进行自己的处理,并将其推送到另一个系统。打听了一下,公司周围有几个
我正在尝试朗姆酒我的应用程序,但我收到以下错误:System.Web.HttpUnhandledException:引发了“System.Web.HttpUnhandledException”类型的异
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
所以我在其他程序中没有收到此错误,但我在这个程序中收到了它。 这个程序是一个我没有收到错误的示例。 #include int main() { system("pause"); } // en
我在 c# System.URI.FormatExption 中遇到问题 为了清楚起见,我使用的是 Segseuil 的 Matlab 方法,并且它返回一个图片路径 result。我想为其他用户保存此
我正在尝试像这样设置文本框的背景色: txtCompanyName.BackColor = Drawing.Color.WhiteSmoke; 它不喜欢它,因为它要我在前面添加系统,例如: txtCo
请帮助我解决 System.StackOverflowException我想用 .aspx 将记录写入数据库我使用 4 层架构来实现这一切都正常但是当我编译页面然后它显示要插入数据的字段时,当我将数据
我使用了一些通常由系统调用的API。 因此,我将 android:sharedUserId="android.uid.system" 添加到 manifest.xml, 并使用来自 GIT 的 And
我正在尝试创建一个小型应用程序,它需要对/system 文件夹进行读/写访问(它正在尝试删除一个文件,并创建一个新文件来代替它)。我可以使用 adb 毫无问题地重新挂载该文件夹,如果我这样做,我的应用
我想从没有 su 的系统 priv-app 将/system 重新挂载为 RW。如何以编程方式执行此操作?只会用 Runtime.getruntime().exec() 执行一个 shell 命令吗
我正在尝试制作一个带有登录系统的程序我对此很陌生,但我已经连续工作 8 个小时试图解决这个问题。这是我得到的错误代码 + ServerVersion 'con.ServerVersion' threw
当我“构建并运行”Code::Blocks 中的程序时,它运行得非常好!但是当我从“/bin”文件夹手动运行它时,当它试图用 system() 调用“temp.bat”时,它会重置。这是为什么?它没有
我想使用 system/pipe 命令来执行具有特殊字符的命令。下面是示例代码。通过系统/管道执行命令后,它通过改变特殊字符来改变命令。我很惊讶地看到系统命令正在更改作为命令传递的文本。 run(ch
我是一名优秀的程序员,十分优秀!