【爆肝干货】从零开始搭建RAG知识库系统:让大模型不再“胡说八道“的完整实现指南
一、基本需求功能
该RAG系统的功能需求主要包含以下几点:
1、知识库构建:将上传内容转化为知识种子。多源数据支持,包括文件(PDF、Word、PPT、TXT、Markdown)、URL和手动输入的内容等。支持对知识的快速拆分和智能拆分,而不是只是固定大小的分块。智能拆分使用 LangChain 的RecursiveCharacterTextSplitter拆分,保持基本语义的同时对内容优化,可过滤冗余信息并保持语义完整性。
2、知识种子管理:知识种子是最小的知识单元,是结构化的知识单元,支持增删改查。一个知识种子包括:
- 内容:文本块的实际内容
- 向量表示:用于相似度检索的嵌入向量
- 元数据:包括来源、位置(如页码、段落号)、创建时间、标签等。
- 摘要:对内容的简短总结,便于快速理解。
3、智能检索和问答:基于知识库的智能检索,并生成上下文感知的答案。支持多知识库选择,用户可选择多个知识库进行查询。
因此,系统架构上也是基于以上需求设计的。主要分为三个核心模块:
- 知识库构建模块:处理用户上传的内容,包括解析、分块、向量化并存储到向量数据库。
- 知识种子管理模块:将上传的内容转化为结构化的知识单元(知识种子),并建立索引。
- 智能检索和问答模块:根据用户问题检索相关知识种子,生成具有上下文感知的详细答案。
二、模块详细设计
RAG知识库系统涉及多个复杂子模块,比如:文本分块策略(实现高质量的语义分块是最高优先级)、嵌入模型选择(选择并优化嵌入模型是核心基础)、向量索引构建(实现混合检索策略,以显著提升检索质量)、相似度计算(获取最相关数据)、查询理解与扩展(改善召回)、引入重排序模型(提升精度)、多路检索融合(改善召回)等。
这些模块的实现将对最终的结果产生较大的影响,复杂性较高、优化空间较大。而且细小的优化,都会产生较大差异结果。
接下来对每个模块进行详细设计分析。
1. 知识库构建模块
数据上传与解析
支持多种来源:本地文件(如PDF、Word、PPT、TXT、Markdown等)和网络内容(通过URL抓取)。
使用相应的解析器提取文本内容,例如:
本地文件:使用LangChain的文档加载器(如UnstructuredFileLoader、PyPDFLoader等)。
网络内容:使用爬虫工具(如BeautifulSoup、Scrapy)或LangChain的WebBaseLoader。
文本预处理与分块(基础中的基础)
我们设计一个AI智能分块系统,它不仅仅按照固定长度分割,而是结合语义和结构进行分析,尽可能在保持语义完整性的同时过滤冗余信息。
步骤:
- 预处理:清洗文本,去除无关字符,标准化格式。
- 结构分析:识别文本结构(标题、段落、列表等)。
- 语义分析:利用NLP技术(如句子嵌入、主题分割)识别语义边界。
- 分块策略:基于结构和语义分析结果,制定分块规则。
- 后处理:过滤冗余块,合并过小的块,确保块大小合理。
我们将使用以下技术:
- 利用自然段落、标题等进行初步分割。
- 使用文本嵌入和聚类算法来识别语义边界。
- 使用LLM进行边界预测和重要内容识别(可选,成本高)。
由于LLM成本高,我们优先使用无监督或轻量级模型。
向量化与存储
使用预训练的语言模型生成文本块的向量表示(Embedding)。选型:OpenAI的text-embedding-ada-002、或者开源的Sentence-BERT模型(如all-MiniLM-L6-v2)或针对中文优化的模型(如BGE、M3E)。但我使用 ModelScope sentence_embedding 流水线,国内访问比较快。
向量数据库选型:Chroma(轻量级)、Pinecone(云服务)、Qdrant(开源且高性能)或Milvus(适用于大规模数据)。我采用轻量级的Chroma数据库(HNSW 索引,余弦相似度),非常简单易用,合适小型系统的构建。
同时存储元数据,包括来源、创建时间、文件类型等,以便后续检索和过滤。采用提取式或 LLM 生成式生成摘要。扁平化处理,兼容 ChromaDB
文件采用本地文件系统持久化存储。
2. 知识种子管理模块
知识种子的生成
对于每个文本块,生成向量并存储为知识种子。
可以为每个知识种子自动生成摘要(使用LLM,例如GPT-3.5-Turbo进行摘要生成,或者使用提取式摘要方法)。
为知识种子建立索引,便于快速检索。除了向量索引,还可以建立关键词索引(如Elasticsearch)以支持混合检索。
知识种子的更新与维护
支持知识种子的增删改查。
当用户更新知识库时,可以重新生成知识种子。
定期检查知识种子的质量,去除低质量或重复的种子。
3. 智能检索和问答模块
查询处理
接收用户问题,进行预处理(如清洗、标准化、扩展等)。查询扩展,可以采用同义词扩展(基于词向量模型)、生成式扩展(使用 LLM 生成查询变体)。
将用户问题转换为向量(使用与知识种子相同的Embedding模型)。
多知识库检索支持。用户可以选择一个或多个知识库进行查询。系统将从选定的知识库中检索知识种子。
检索与重排序
多查询加权检索,通过原始查询 + 扩展查询,加权合并,获取更多结果。原始查询权重最高,扩展查询权重递减。
在向量数据库中进行相似度搜索,找出与问题最相关的知识种子。
可以结合关键词检索(如:BM25)进行混合检索,并权合并结果,以提高召回率。
使用重排序(Re-ranking)技术对检索结果进行精排序,例如使用Cross-Encoder(如MS MARCO的BERT重排序模型)或LLM进行相关性判断。这两种方式都支持,默认采用Cross-Encoder方式,BERT 模型精确评分。LLM需要设计高质量的提示词才能精确的判断评估。
最后,采用相似度结果动态阈值过滤,采用余弦相似度检索。设置一个余弦值最低阈值(比如:0.7),只获取大于0.7的相似度结果,从而过滤掉低质量的结果,及时最后过滤所有的都无所谓,宁缺毋滥。即使拥有最先进的LLM,如果检索不到相关信息,拒绝回答。然后进入联网检索。而不是让它捏造答案,输出幻觉。
答案生成
将排序后的知识种子作为上下文,与用户问题一起构建Prompt。
Prompt 构建:知识种子 + 用户问题。引用支持,比如标注来源(集合名-组名-序号),可能快速找到源内容。
使用LLM(如DeepSeek、Qwen等模型)生成答案。国内魔塔社区都可以获取大量优秀的开源模型,直接线上调用即可。
结合联网搜索:知识库 + 实时信息。大部分模型都支持内置的联网搜索,如果不支持的,需要调用搜索引擎进行搜索。比如:Tavily、DuckDuckGo、Google Custom Search、Microsoft Bing。其中,Tavily、DuckDuckGo是免费的。你可能需要构建一个SearchEngine 搜索引擎框架,支持多搜索引擎的调用。比如:基于 AutoGPT 设计思想实现的深度搜索框架。
四、技术框架
1. 后端技术栈
框架:FastAPI + Uvicorn
向量数据库:ChromaDB(HNSW 索引),用于原型和中小规模。或Qdrant用于生产环境和大规模数据。
嵌入模型:ModelScope(BGE、M3E 等中文优化模型)
文本处理:LangChain(RecursiveCharacterTextSplitter)
文档解析:
PDF: pypdf
Word: python-docx
PowerPoint: python-pptx
URL: requests + BeautifulSoup
2. 前端技术栈
框架:React + Vite
UI 库:Tailwind CSS + Lucide React
状态管理:React Hooks(useState, useEffect, useMemo)
路由:React Router
3. 配置管理
1、后端服务配置。通过环境变量统一管理,如:
KB_ENABLE_PREPROCESSING
: 是否启用查询预处理
KB_ENABLE_EXPANSION
: 是否启用查询扩展
KB_ENABLE_CITATION
: 是否启用引用
KB_MAX_CONTEXT_LENGTH
: 最大上下文长度
EMBEDDING_MODEL
: 嵌入模型名称
RERANKER_MODEL
: 重排序模型名称
KB_CHUNK_SIZE
: 分块大小
KB_CHUNK_OVERLAP
: 分块重叠大小
2、前端用户配置。采用前后端分离的架构。
由于配置比较简单,所以,前端通过后端API更新配置,后端同时完成存储和内存更新。前端不应该直接操作后端存储,而是通过API。这样更安全,也便于扩展和权限控制。API会做两件事:
- 将新配置保存到持久化存储(如数据库)。
- 更新后端服务内存中的配置。
五、最后总结
知识种子概念:语义完整的知识单元,不只是文本块
多策略查询扩展:提高召回率
混合检索:向量 + 关键词,兼顾准确性和召回率
重排序优化:提高检索准确性
多知识库支持:用户可选择多个知识库
引用机制:精确标注来源(集合名-组名-序号)
结合联网搜索:知识库 + 实时信息,提供更全面的答案
六、后续扩展考虑
多模态支持:未来可以支持图片、音频等非文本内容,提取文本描述或使用多模态模型。
知识图谱:除了向量检索,还可以构建知识图谱,实现更复杂的推理。
第三方知识自动对接:有道笔记、博客系统、第三方网站自动爬取。
持续优化:对答案的反馈,用于优化检索和生成模型。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐


所有评论(0)