自从和员外上家公司离职后,我们就自己搞公司投入到了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的爆火,包括LangChain
、LlamaIndex
等以LLM为基础的数据Python框架的出现,很多开发者在选择开发RAG系统应用时,会可能无法着手。
起初在开发RAG应用的时候,也纠结过编程语言的选择,在这期间走了很多的弯路,也得到了一些教训。
先说结论,TorchV.AI的产品选Java+Python作为服务端的开发语言。
这里面有以下几个原因:
下图是我画的一个Java
VS Python
这两个编程语言在不同领域的一些特性对比。
目前市面上开发RAG大模型应用最火的当属LangChain
、LlamaIndex
这两个框架,都是Python
语言进行开发,提供了开箱即用的功能,可能在不超过10行代码的情况下,就能轻松完成一个RAG大模型应用的demo。
我们起初也是在纠结在这期间如何更好的做取舍,后来团队内部经过讨论,还是将部分的业务逻辑放在Java语言中,重写RAG过程中的一些核心逻辑和组件。
这里面的思考:
结合在开发RAG应用中涉及到的数据工程等部分逻辑,我们结合两大语言的特性,也能很轻松的勾画出一张便语言级别的架构图,涵盖了在企业开发、业务场景落地时,如何快速的适配上层应用的需求。如下图所示:
在这张图中,我们可以清晰的看到,不同的任务&需求,职责分工是比较明确的。
在这里,当我们使用应用开发时,挑选编程语言来开发应用服务,优先考虑的是生态和稳定性。
当然,这里面并没有唯一的标准,根据自己的实际情况出发来选择是最优的,以上仅仅只是分享一下我的看法。
好了,全文完,做一个总结:
本文来自知乎,作者 八一菜刀
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md
【开源免费】ScrapeGraphAI是一个爬虫Python库,它利用大型语言模型和直接图逻辑来增强爬虫能力,让原来复杂繁琐的规则定义被AI取代,让爬虫可以更智能地理解和解析网页内容,减少了对复杂规则的依赖。
项目地址:https://github.com/ScrapeGraphAI/Scrapegraph-ai
【开源免费】FASTGPT是基于LLM的知识库开源项目,提供开箱即用的数据处理、模型调用等能力。整体功能和“Dify”“RAGFlow”项目类似。很多接入微信,飞书的AI项目都基于该项目二次开发。
项目地址:https://github.com/labring/FastGPT
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0