news 2025/12/29 9:01:45

【收藏必备】手把手搭建RAG系统:从原理到代码实战,一文入门检索增强生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【收藏必备】手把手搭建RAG系统:从原理到代码实战,一文入门检索增强生成

文章详细介绍了RAG(检索增强生成)系统,通过通俗易懂的方式解释了RAG如何解决大模型的知识冻结和幻觉问题。内容涵盖RAG的核心概念、向量数据库的作用、完整的"洋葱模型"实现流程(数据准备、检索工程、结果生成),并提供了一套开源技术栈的实战代码。文章强调RAG系统本质上是一个数据工程系统,80%的时间用于数据清洗和检索策略优化,同时指出了RAG的局限性,如语义稀释、聚合类问题等。


手摸手的RAG速成 1、RAG系统基本介绍

关注公众号,回复666,获取资料

最近看了一份很不错的教程:《A Crash Course on Building RAG Systems》,作者是 Akshay Pachaar 和 Avi Chawla。

这份文档好就好在,它没有上来就给你堆一堆数学公式讲什么高维空间,而是直接通过代码和图解,把 RAG(检索增强生成)这个被吹上天的概念,还原成了最朴素的工程问题。

我们之前聊过很多次 RAG,今天借着这份资料,咱们不聊虚的,直接从原理到代码,把这套流程彻底跑通。看完你会发现,RAG 其实非常简单。

一、为什么我们需要 RAG?

先说痛点。大模型(LLM)有两个致命毛病:

  1. 知识冻结:模型训练完那天,它的脑子就停在那一刻了。它不知道时事新闻、最新数据,因为它没见过。
  2. 幻觉:就是说胡话。再好的模型,随着上下文增长也会出现幻觉,这是Attention机制所不能避免的。。

要解决这个问题,最笨的方法是微调(Fine-tuning),但这玩意儿成本高得离谱,而且你今天调完,明天数据又更新了,模型还更好,难道换模型重新调?企业亏麻了。

所以,RAG(Retrieval-Augmented Generation)应运而生。

它的逻辑简单粗暴:既然脑子记不住,那就给它一本参考书。

在回答问题前,搜索知识库中的相关内容,把找到的内容(Context)和问题一起扔给模型,让 LLM 根据参考资料回答。

二、核心概念:向量数据库(Vector Database)

要实现 RAG,绕不开一个东西:向量数据库。

计算机不认识字,它只认识数字。我们需要把文字、图片变成一串数字(Vector/Embedding)。神奇的地方在于,经过 Embedding 模型处理后:

  • “苹果”和“梨”的向量距离很近。
  • “苹果”和“卡车”的向量距离很远。

(图注:这就是语义空间,意思相近的东西会聚在一起)

传统数据库查关键词(比如 SQL 的LIKE),向量数据库查的是意思。哪怕你搜“红色的水果”,它也能给你找出“苹果”,虽然字面上完全不匹配。而神奇的是这些代表“语义”的数字,竟然是可以像数学题一样进行加减运算的!

最经典的案例就是:国王 - 男人 + 女人 ≈ 女王。

神奇的是,这是完全基于词汇向量的加减法进行的推理。所以说,语言所承载的信息本身可能就是一种智慧。。。

三、RAG 的“洋葱模型”:从数据到答案

结合文档内容,一个标准的生产级 RAG 流程,其实就是把数据掰开揉碎了,存进去,再读出来的过程。

我们可以把它拆解为 9 个步骤。不过实际项目中你就会发现,这里面全是脏活累活。。。

第一阶段:数据准备

**1. 切块(Chunking):**第一步是把你的文档(PDF、Word、网页)清洗干净并切成小块。

为什么要切?

  • TOKEN长度有限:整本书塞进去,Token 瞬间爆炸,模型直接死机。

  • 语义稀释:一段话只讲一个知识点,检索才准。和做饭一样,语料太多混在一起,十三香一样,模型根本搞不清它是什么味。

  • PS:1.切块策略(固定大小、语义分割)策略很多,是 RAG 效果好坏的第一道生死线,之后会详细写一篇文章说明。2.数据清洗是也是工程中极具挑战性的问题,甚至是最费时间的,比切块还麻烦。本文优先介绍RAG。

2. 向量化(Embedding):切好块后,用 Embedding 模型把这些文字块变成向量(一串数字),作为这段文字的提纲(向量版)。 这里用的不是简单的词匹配,而是上下文嵌入模型(比如双向编码器)。

它能听懂“人话”,知道“苹果”和“手机”在某些语境下是相关的。

3. 入库(Indexing):把生成的向量存进向量数据库(Vector DB)。 这是 RAG 的长时记忆机制来源。

至此,矢量数据库已创建完成。

注意,这里存的不仅仅是向量,还有原始文本元数据(比如页码、作者)。这样系统就可以基于向量指针,搜索并引用原文。不然搜出来一堆数字。。。


第二阶段:检索工程

4. 用户查询(Query)

用户:“ 表面亲和度是什么意思?出处是哪个文件?”

背景资料:{chunks}问题:{query}请根据背景资料回答问题。

5. 需求翻译(Query Embedding)系统得把用户的这句人话,用同一个Embedding 模型,也转换成向量。

**注意:必须是同一个模型,**不然就像用英语字典查中文,幻觉会非常严重。

6. 粗筛(Retrieval):拿着用户问题的向量,去数据库里比对。 数据库会通过“近似最近邻搜索”(ANN),给你返回 Top-K 个最像的文本块。 这一步叫召回

**7. 精排(Reranking):这一步很多教程都没讲!**这是区分 Demo 和生产级系统的关键! 向量检索(第6步)虽然快,但有时候不够准。

具体表现为:

  1. 相关性不佳:Top 1 的结果通常没问题,但Top 2-5 的结果相关度非常随机。这直接影响了最终给大模型(LLM)参考的上下文质量。
  2. ANN算法的精度损失(随机性):为了在大规模数据(百万/千万级)中实现毫秒级检索,向量数据库通常使用****ANN(近似最近邻)算法,其机制引入了随机性,导致召回的文档排名并不完全准确,最相关的文档可能没有排在最前面。

所以,我们需要一个更聪明的模型(通常是 Cross-Encoder),把捞回来的这些知识素材,重新打个分,把真正最相关的排到前面。

Rerank 通过 **“粗排 + 精排”** 的两阶段策略,在速度和精度之间找到了平衡:根据Rerank模型计算出的精准分数,对文档重新进行排序,最后截取分数最高的 Top N(例如Top 5)投喂给大模型。

这个过程会重新排列数据块,以便优先处理最相关的数据块,从而生成响应。

虽然这一步会增加一点延迟,但为了准确率,这是必须要做的。。。


第三阶段:结果生成

**8. 生成结果(Generation)**系统把排好序的最相关文本块(Context),填进 Prompt 模板里,连同用户的问题,一起扔给大模型(LLM)。

这时候,大模型就不再是瞎编了:

“根据以下资料(我们找出来的),回答用户的问题…”

而后,模型综合这些上下文,生成一句通顺的人话,交给用户端。


总结一下:前三步是脏活累活(数据工程),中间两步是搜索技术(检索工程),最后一步才是AI 生成

RAG也好,AI也好,别光盯着最后的大模型看,没有数据科学的基本功,后面全是幻觉。。。

四、动手实战:全开源技术栈

光说不练假把式。文档里给了一套完全开源的方案,大家可以在自己的笔记本上跑起来试一试。

工具栈:

  • 大脑 (LLM): Llama 3.2 (通过 Ollama 运行,轻量级)
  • 框架 (Framework): LlamaIndex (专门做 RAG 的框架)
  • 记忆 (Vector DB): Qdrant (开源向量库,Docker 一键起)

核心代码解析:

首先,用 Docker 启动 Qdrant:

docker run -p 6333:6333 -p 6334:6334 \ -v $(pwd)/qdrant_storage:/qdrant/storage \ qdrant/qdrant

然后,用 LlamaIndex 加载数据并建立索引。这一步就是把 PDF 变成向量存进去:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReaderfrom llama_index.vector_stores.qdrant import QdrantVectorStore# 1. 读文件(脏活)documents = SimpleDirectoryReader("./docs").load_data()# 2. 连数据库vector_store = QdrantVectorStore(client=client, collection_name="chat_with_docs")# 3. 建索引(自动完成切块、Embedding、存储)index = VectorStoreIndex.from_documents( documents, storage_context=storage_context)

最后,查询并加入重排(Reranking)。这里用了一个SentenceTransformerRerank,虽然慢点,但精度提升巨大:

from llama_index.core.postprocessor import SentenceTransformerRerank# 设置重排模型rerank = SentenceTransformerRerank( model="cross-encoder/ms-marco-MiniLM-L-2-v2", top_n=3# 只取前3个最相关的)# 查询引擎query_engine = index.as_query_engine( similarity_top_k=10, # 先捞10个 node_postprocessors=[rerank] # 再精选3个)response = query_engine.query("What exactly is DSPy?")print(response)

代码跑通,你会发现模型能准确回答出 PDF 里的内容,此时恭喜你通过代码搭建了RAG 的最小应用!

泼盆冷水:RAG 的局限性

虽然 Demo 跑通了很爽,但作为工程实战派,我得提醒大家几个坑,文档最后也提到了,非常真实:

  1. 语义稀释(Semantic Dilution): 如果你的切块太大,里面混杂了无关信息,检索精度会直线下降。
  2. 聚合类问题(Aggregation)是死穴: 如果你问这100份文档里,哪一份提到的销售额最高? RAG 通常回答不出。因为向量检索是找相似,而不是做统计。它很难把所有文档扫一遍再比较。
  3. 中间迷失(Lost in the Middle): LLM 有个毛病,它对 Prompt 开头和结尾的内容印象深刻,中间的内容容易忽略。所以重排后的文档顺序也很重要。
  4. 问题与答案不相似: 有时候用户问的问题,和文档里的答案在字面上完全不沾边。这时候可能需要引入 HyDE(假设性文档嵌入)这种高级技巧,让模型先自己生成一个假答案,拿假答案去搜真答案。

最后

在真实的企业级AI项目中,我们 80% 的时间其实不是在调大模型,而是在清洗数据优化检索策略。AI系统的本质依然是数据工程系统。你可以把大模型理解成一个考试的考生,而RAG、数据工程,是背后那个递小抄的人。

RAG 可以让大模型进行开卷考试,而我们要做的所有工程上的努力,就是确保在它提笔作答前,把书翻到了最正确的那一页。

AI时代,未来的就业机会在哪里?

答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。

掌握大模型技能,就是把握高薪未来。

那么,普通人如何抓住大模型风口?

AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。

因此,这里给大家整理了一份《2025最新大模型全套学习资源》,包括2025最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题等,带你从零基础入门到精通,快速掌握大模型技术!

由于篇幅有限,有需要的小伙伴可以扫码获取!

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

4. 大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

5. 大模型行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

为什么大家都在学AI大模型?

随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。

同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!

这些资料有用吗?

这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


大模型全套学习资料已整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 10:19:36

运维系列数据库系列【仅供参考】:DM JOB作业的邮件发送

DM JOB作业的邮件发送DM JOB作业的邮件发送摘要正文DM JOB作业的邮件发送 摘要 本文详细介绍了如何在DM数据库和Oracle中利用DM作业系统与DBMS SCHEDULER系统包设置定时作业,以便在JOB执行完毕后自动发送邮件通知。涵盖了初始化作业环境、配置代理属性、创建作业与…

作者头像 李华
网站建设 2025/12/24 3:45:25

当AI面临伦理投诉时,AI应用架构师该怎么办?这5个解决步骤

当AI面临伦理投诉时,AI应用架构师该怎么办?这5个解决步骤 引言:AI伦理投诉的“灰犀牛”时刻 2020年,美国某法院使用的COMPAS算法因“对黑人被告的再犯率预测偏差高达45%”引发轩然大波;2022年,某社交平台的…

作者头像 李华
网站建设 2025/12/23 14:42:28

主存编址是什么

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

作者头像 李华
网站建设 2025/12/28 14:48:51

Python 整合 Redis 哨兵(Sentinel)与集群(Cluster)实战指南

Python 整合 Redis 哨兵(Sentinel)与集群(Cluster)实战指南面向生产环境的 Redis Python 工程化示例,涵盖: 哨兵模式 & 集群模式自动切换常用数据结构(String / Hash / List / Set / ZSet&a…

作者头像 李华
网站建设 2025/12/27 19:13:16

HLS技术的局限性说明

一、HLS技术的局限性 1.HLS编译器说明 关于HLS编译器是一个静态工具,那么对理解动态特性没有帮助,可以认为是一个翻译工具。 rtl级别的是无法在线调试和debug的,只能在c层面进行debug,但是c层面和rtl层面的结果 是两个概念。 2.HL…

作者头像 李华
网站建设 2025/12/28 1:42:49

水文监测站:水资源管理的“千里眼”与“顺风耳”

水文监测站是对江、河、湖泊、水库、渠道和地下水等水文要素进行实时监测的专业站点,在水资源管理、防洪减灾、水利工程建设与运行、生态环境保护等诸多方面都发挥着极为重要的作用。一、定义与功能水文监测站又称雷达水位监测站、自动水文监测设备,是一…

作者头像 李华