创业:大模型RAG系统三个月的开发心得和思考
从零搭建一套RAG产品,这三个月到底踩了多少坑
今年1月底,我们从上一家公司出来后,就一头扎进了大模型RAG产品的开发里。春节也没怎么歇,前后差不多三个月时间,昼夜兼程。到3月底,产品总算有了一个基础雏形。

团队分工很明确:员外负责产品和市场、谈客户,我和阿包则扛起技术架构和从零到一的代码实现。1月26日,第一版上线,开始接受企业客户试用。这一试,我们才真正意识到产品在真实场景中的差距——用户的需求五花八门,而我们产品的竞争力也暴露了不少短板。
在TorchV AI初步成型之际,聊聊这段时间积累的一些心得和思考。
RAG是什么,为什么值得做
RAG(检索增强生成)这个概念最早可以追溯到2020年的那篇论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》。它的核心思路很简单:给大模型装一个外设知识库,让它能基于这些外部信息来做回答,而不是全靠它"记"在参数里的东西。这样既能提升准确性,也能减少胡说八道的概率。
大模型有几个硬伤,行业里都清楚:
- 没有答案的时候容易编造,也就是所谓幻觉;
- 模型训练成本极高,更新周期也长;
- 企业核心数据的安全性很难保障。
而RAG恰好在这几个问题上给出了非常务实的解法:
- :配上检索和向量技术,就能让大模型"读"到它原本不知道的知识,而且来源可追溯,权威性更强;
成本可控、开箱即用
- :虽然不可能100%消灭幻觉,但肉眼可见能减少很多;
有效降低幻觉
- :私有化部署后,企业数据不用出墙,安全可控。
数据安全
RAG的系统架构,到底该怎么搭
要把RAG做好,核心目标只有一个:
让大模型基于企业自己的数据,精准回答用户的问题
- :企业私有数据,大模型不可能知道,所以必须靠RAG把知识喂给它,而不是指望它自己"猜";
依赖现有知识库
- :上传了数据之后,怎么保证每条回答都能精准命中用户想问的内容,这里面涉及的技术环节非常多。
精准命中
很早之前,参考大模型的技术架构,画过一张类似的结构图:
如果把做RAG系统比作种树,那LLM是土壤,上面长着三棵树——
数据工程、检索生成、业务系统
- :知识库的格式千奇百怪,PDF、Word、Excel、HTML……怎么切分、怎么建索引、怎么提取关键信息,全是坑;
数据工程
- :数据处理好之后,配合大模型做检索和生成,这里面涉及提示工程、检索策略、中间件、查询改写等;
检索生成
- :商业落地需要的东西,租户、计费、开放平台、运营后台,一个都不能少。
业务系统
从这个角度看,做一套RAG产品,本质上和训练大模型一样,是个系统性工程。每一个环节优化10%,累积起来的竞争力就很可观了。
数据工程:第一道拦路虎
圈子里有句话叫"垃圾进,垃圾出"。数据质量直接决定最终效果。
实际面临的问题包括:
- 常见文件解析(PDF、Word、Excel、CSV、HTML、Markdown)各有各的脾气;
- 数据库(MySQL、Postgres等)的数据源对接,看起来不难,但适配种类一多就容易顾此失彼;
- 网络数据集就更复杂了,网页、视频、音频……爬虫、解析、提取,每个环节都容易出幺蛾子;
- 不同类型数据的提取方式差异巨大,光是表格在不同文件格式里的表现,就够头疼一阵的;
- 分割策略更是重中之重,切不好,语义就丢了,后续检索质量直接崩;
- Embedding索引构建也是个精细活,光是给每个chunk建向量还不够,元数据、概要、标题都得跟上。
在数据工程这棵树上,技术迭代非常快。大模型越火,ETL(数据提取、转换、加载)的发展也会被推着往前走,但这并不意味着哪一天能一劳永逸。
检索生成:不只是做搜索
数据处理好之后,剩下的就是搜索加生成了。这么说好像很简单,但实际做起来完全是另一回事。
目前主流的检索技术无非两种:
- (比如BM25):基于词频倒排,缺点是没语义;
关键词检索
- :通过BERT这类模型把文本转成向量,再用KNN/ANN去找最相似的。
向量语义检索
当然,现在很多向量数据库都支持混合检索,能取两者的长处。
在检索生成环节,要注意的细节也相当多:
- :FewShot、CoT、ZeroShot……针对不同场景,提示词的写法差别很大;
提示工程
- :GLM、百川、千问、GPT系列……每一家的能力图谱都不一样,必须深度适配;
大模型的选择
- :多轮对话、查询重写、多跳检索、多路召回,每一步都得确保稳定;
检索过程处理
- :缓存、消息队列、向量数据库、图数据库……高可用和扩展性全要靠它们撑起来。
中间件
检索生成和数据工程是深度绑定的,根本目的是一个——降低幻觉。
技术驱动商业,比以往更明显
做RAG这类AI应用,和以前做传统产品项目的感受完全不同。一方面是技术栈更新太快,另一方面,有了大模型之后,用户的需求和想法也变得特别天马行空。
在这段时间里,有几点体会特别深:
- 新技术的出现必然倒逼软件流程和开发方式的变革,思维方式得跟着转;
- 用RAG解决幻觉,做到60分很容易,但想做到80分甚至90分,非常难。这不是一锤子买卖,需要长期迭代;
- 企业客户不会为一个60-70分的技术产品买单。产研人员必须对自己要求更高,追求极致。
团队内部也一直在调整方向。成立TorchV AI时,我们定了三层架构:
- :尽量让既定事实数据发挥更大比重,引入更多幂等机制来对抗大模型的幻觉;
TorchV IC(幂等分类器)
- :优化输出格式,让交互界面更友好;
TorchV Actuator(执行器)
- :连接本地数据,解决本地化场景下的数据多样性和复杂性问题。
TorchV Connector(连接器)
通过这套中间件,我们首先产出了第一个产品基线——TorchV Bot,其架构目前是这样的:
核心组件包括:
- :大模型落地的标配;
RAG和Agent
- :支撑多租户PaaS/SaaS的基础;
Tenant(租户系统)
- :存储客户上传的文件和从URL导入的数据;
OSS(在线文件存储)
- :默认的Web问答界面,客户可以直接用;
ChatBot
- :预设洞察条件,触发后执行指定动作;
数据与洞察分析
- :上传文件后自动切分、建索引;
知识库管理
- :计费、参数配置、对话记录、用户权限管理;
运营后台
- :一个客户可以创建多个应用,通过API或嵌入JS代码来集成。
应用中心
架构与语言选择:Ja va和Python怎么分工
刚开始选编程语言的时候也纠结了很久,走了不少弯路。
最后TorchV AI选择了Ja va + Python的组合。原因很直接:
- 团队核心成员都是Ja va出身,生态更熟悉;
- Python绕不开,但只负责无状态的逻辑操作;
- Ja va在企业级开发上的组件生态更成熟;
- 中间件的丰富程度和社区健康度也很关键。
这张图能比较清晰地看到两种语言在不同领域的特性对比:
目前市面上最火的LLM框架,LangChain和LlamaIndex,都是Python的。它们提供了开箱即用的能力,10行代码就能搭一个RAG demo出来。但经过团队内部讨论,我们还是决定把部分核心逻辑用Ja va重写,原因包括:
- 开箱即用的框架很难满足企业多变的需求;
- RAG目前没有像HTTP那样形成统一规范,不同模型、不同流程,效果差异很大;
- 国内大模型百花齐放,本土化适配的需求也很多样。
在具体的职责分工上,思路也很清晰:
- :负责业务系统的数据一致性、分布式事务、鉴权、限流等企业级特性;
Ja va
- :负责所有无状态的服务,比如数据工程、Chat模型、数据处理、微调等。
Python
选语言,最终还是看生态和稳定性。没有标准答案,适合自己的才是最好的。
总结
最后简单总结三句话:
- RAG和LLM产品的技术栈正在快速迭代,小步快跑、快速试错,可能是当前最务实的打法;
- 应用场景目前更集中在知识密集型任务上,但随着技术成熟,必然向更多行业渗透;
- 降低幻觉这件事,60分容易,80分极难,但这是所有RAG产品的立身之本,值得持续投入。
TorchV AI才刚刚起步,后续还有很长的路要走。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名