news 2026/4/22 21:31:40

初识 RAG:让 AI 学会“开卷考试“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
初识 RAG:让 AI 学会“开卷考试“

导读: 你是否遇到过 ChatGPT 一本正经地"胡说八道"?或者发现它对去年发生的事情一无所知?本文将带你认识 RAG——一项让 AI 既能"博学"又能"查资料"的核心技术,零基础友好,附代码实战。


一、大模型的"阿喀琉斯之踵"


在使用 ChatGPT、DeepSeek 这类大语言模型(LLM)时,你可能遇到过这两种让人抓狂的情况:

场景一:自信地"胡说八道"

你问:“2025 年诺贝尔物理学奖得主是谁?”
AI 答:(编造一个听起来很合理的名字)……

场景二:对新知识一问三不知

你问:“我们公司最新的产品手册里,第三章讲的是什么?”
AI 答:“对不起,我没有相关信息……”

这两个问题的根源是一样的——大模型的知识是"冻结"的。

大模型的两个痛点

LLM 在训练完成后,其内部参数(“记忆”)就被固定下来了。它:

  • ❌ 不知道训练数据截止日期之后发生的事(知识时效性问题)
  • ❌ 不了解你的私域数据(企业内部文档、个人知识库等)
  • ❌ 有时会"幻觉"——用错误信息填补知识空白

那么,如何破解这个困局?答案就是 RAG。


二、什么是 RAG?


RAG,全称 Retrieval-Augmented Generation(检索增强生成),是目前 AI 应用领域最火热的技术范式之一。

用一句话来概括它的精髓:

💡 RAG 就是让 LLM 学会了"开卷考试"——它既能利用训练时学到的通识知识,也能在回答时临时"翻阅"指定的外部资料。

2.1 两种知识,一个系统

理解 RAG,首先要理解两种知识的概念:

知识类型存储位置特点类比
参数化知识模型权重(参数)中固化、模糊、有截止日期你脑子里记住的知识
非参数化知识外部知识库精准、可实时更新你手边的参考书

RAG 的核心价值,就是在生成答案之前,先通过检索机制从外部知识库动态捞取最相关的"参考资料",再交给 LLM 综合作答。

两种知识对比动图

动图:参数化知识(模型内部)vs 非参数化知识(外部知识库)的核心差异

2.2 RAG 的工作流程

RAG 系统的运作分为两个核心阶段:检索阶段 与 生成阶段。

RAG 核心工作流程动图

动图:完整 RAG Pipeline——从文档入库到最终生成答案

阶段一:知识入库(索引构建)

在用户提问之前,系统需要先把所有"参考书"处理好、建好索引:

  1. 1. 文档解析:将 PDF、Word、网页等格式的文档切割成小片段(Chunk)

  2. 2. 向量化:调用 Embedding 模型,将每个文本片段转化为一串数字(向量),这串数字能代表文本的"语义含义"

  3. 3. 存入向量库:将所有向量存入专门的向量数据库(如 Chroma、Faiss、Milvus)

阶段二:检索 + 生成(推理)

用户提问时,实时执行:

  1. 1. 问题向量化:将用户的问题同样转化为向量

  2. 2. 相似度检索:在向量库中找出与问题向量"最近"的若干个文档片段(Top-K 召回)

  3. 3. 上下文整合:将检索到的片段 + 用户原始问题,拼成一个完整的 Prompt

  4. 4. LLM 生成答案:将这个 Prompt 交给大模型,大模型基于提供的上下文给出有据可查的回答


三、为什么选 RAG,而不是微调?


面对"大模型不知道我的私域数据"这个问题,技术上有几种解法。我们来理清它们的关系:

技术选型象限图

💡 技术选型口诀:先 Prompt → 再 RAG → 最后微调,成本逐级递增,改动逐级加深。

横轴代表对模型本身的修改程度,纵轴代表对输入信息(上下文)的增强程度。

在实际选型时,应遵循"最小改动原则",按以下顺序依次尝试:

第一步:提示词工程(Prompt Engineering)

适用场景:模型已经具备相关知识,只是回答不够好

做法:精心设计提问方式、给出示例、明确格式要求

成本:极低,不需要改动任何代码或模型

局限:模型真的"不知道"时,再好的提示词也无济于事


第二步:RAG(检索增强生成)✅ 推荐优先选择

适用场景:模型缺乏特定领域知识或实时信息

做法:外挂知识库,让模型"参考"外部资料回答

成本:中等,需要搭建检索管道和向量库,但不修改模型参数

优势:

  • 知识可实时更新,无需重新训练模型
  • 答案有据可查,可追溯来源,减少幻觉
  • 成本远低于微调

第三步:微调(Fine-tuning)

适用场景:需要改变模型的"行为方式"而非"知识储备"

做法:用特定数据集重新训练部分或全部模型参数

成本:极高,需要高质量数据集、大量 GPU 算力和专业知识

什么时候才真正需要微调?

  • 让模型严格遵循某种特殊输出格式
  • 模仿特定人物的写作风格
  • 将极其复杂的指令"内化"进模型权重
  • 在某个极度垂直的专业领域提升推理能力

一句话总结:大多数企业级 AI 应用,RAG 是性价比最高的选择。


四、代码实战:用 LangChain 搭建你的第一个 RAG


文档切割 Chunking 动图

动图:长文档被切割成带 overlap 的小片段,黄色高亮区域为相邻块的重叠部分

理论说了这么多,现在来动手实现一个最简单的 RAG Demo。我们使用 LangChain 框架,它是目前最流行的 LLM 应用开发框架,极大地简化了 RAG 的搭建流程。

4.1 环境准备

pip install langchain langchain-community langchain-openai chromadb

4.2 准备知识库文档

假设我们有一个关于公司产品的文本文件knowledge.txt

# 关于 SuperBot 3000 产品手册 ## 第一章:产品简介 SuperBot 3000 是一款智能客服机器人,支持 7x24 小时全天候服务, 可同时接入微信、钉钉、飞书等平台。 ## 第二章:核心功能 - 多轮对话:支持上下文感知的多轮对话 - 知识库管理:支持导入 PDF、Word、Excel 等格式文档 - 数据统计:提供详细的会话质量分析报表 ## 第三章:定价方案 基础版:每月 299 元,支持 3 个坐席 专业版:每月 999 元,支持 20 个坐席,含高级数据分析 企业版:定制报价,无限坐席,含专属技术支持

4.3 完整 RAG 代码

# simple_rag.py from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA # ==================== 第一步:加载文档 ==================== print("📚 正在加载知识库文档...") loader = TextLoader("knowledge.txt", encoding="utf-8") documents = loader.load() # ==================== 第二步:切割文档 ==================== # 将长文档切割成小片段(Chunk),便于精准检索 text_splitter = RecursiveCharacterTextSplitter( chunk_size=200, # 每个片段最多 200 个字符 chunk_overlap=20 # 相邻片段重叠 20 字符,避免语义断裂 ) chunks = text_splitter.split_documents(documents) print(f"✅ 文档切割完成,共 {len(chunks)} 个片段") # ==================== 第三步:向量化并存入向量库 ==================== print("🔢 正在生成向量索引...") embedding_model = OpenAIEmbeddings() # 可替换为本地 Embedding 模型 vectorstore = Chroma.from_documents( documents=chunks, embedding=embedding_model, persist_directory="./chroma_db" # 向量库持久化路径 ) print("✅ 向量索引构建完成!") # ==================== 第四步:构建 RAG 检索链 ==================== llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) # RetrievalQA 自动完成:检索 → 拼接 Prompt → 调用 LLM → 返回答案 qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # "stuff" 策略:直接将检索结果塞入 Prompt retriever=vectorstore.as_retriever( search_kwargs={"k": 3} # 检索最相关的 3 个片段 ), return_source_documents=True # 同时返回参考来源,便于溯源 ) # ==================== 第五步:提问!==================== questions = [ "SuperBot 3000 的专业版每月多少钱?", "这个产品支持哪些平台接入?", ] for question in questions: print(f"/n❓ 问题:{question}") result = qa_chain.invoke({"query": question}) print(f"💬 答案:{result['result']}") print(f"📄 参考来源:{result['source_documents'][0].page_content[:50]}...")

4.4 运行结果

📚 正在加载知识库文档... ✅ 文档切割完成,共 8 个片段 🔢 正在生成向量索引... ✅ 向量索引构建完成! ❓ 问题:SuperBot 3000 的专业版每月多少钱? 💬 答案:SuperBot 3000 专业版每月 999 元,支持 20 个坐席,并含高级数据分析功能。 📄 参考来源:专业版:每月 999 元,支持 20 个坐席,含高级数据分析... ❓ 问题:这个产品支持哪些平台接入? 💬 答案:SuperBot 3000 支持接入微信、钉钉、飞书等平台。 📄 参考来源:可同时接入微信、钉钉、飞书等平台...

向量相似度检索动图

动图:查询向量(Q)在语义空间中飞入,系统找到距离最近的 3 个文档片段(Top-3 召回)

关键点说明:

步骤对应 RAG 原理核心作用
TextLoader知识获取读取原始文档
RecursiveCharacterTextSplitter文档切割将长文本切成可检索的小片段
OpenAIEmbeddings+Chroma向量化 + 存储建立语义检索索引
as_retriever(k=3)相似度检索召回最相关的 Top-3 片段
RetrievalQA生成整合上下文,让 LLM 作答

五、总结与展望


RAG 进阶路线图

学到这里,你已经掌握了 RAG 的核心概念和基础实现。让我们回顾一下今天的重点:

  • 是什么:RAG = 检索(Retrieval)+ 增强(Augmented)+ 生成(Generation),通过外部知识库弥补 LLM 的知识局限
  • 为什么用:相比微调,RAG 成本低、可更新、答案可溯源,是企业 AI 应用的首选方案
  • 怎么做:索引构建(文档切割 → 向量化 → 存库)+ 检索生成(相似度召回 → 拼接 Prompt → LLM 作答)

当然,本文展示的只是一个最基础的 Naive RAG。在真实的生产环境中,还有大量值得深入探索的进阶话题:

进阶方向关键技术解决的问题
高级 RAG查询改写、混合检索、重排序(Rerank)提升检索召回的精准度
模块化 RAG自定义检索策略、多路召回融合应对复杂业务场景
Agentic RAG工具调用、多步推理、自我反思处理需要多轮推理的复杂问题

如果这篇文章对你有帮助,欢迎点赞 + 转发支持!
下一篇,我们将深入讲解 文档切割策略——为什么切割方式会直接影响 RAG 的最终效果,以及如何选择最适合你场景的切割方案。

这里给大家精心整理了一份全面的AI大模型学习资源包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

👇👇扫码免费领取全部内容👇👇

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

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍

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

3. 大模型视频教程

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

4. 2026行业报告

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

5. 大模型项目实战

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

6. 大模型面试题

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

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

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

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

AgentCPM深度研报助手效果实测:对比Claude在专业金融分析上的表现

AgentCPM深度研报助手效果实测:对比Claude在专业金融分析上的表现 最近,我花了不少时间研究市面上那些号称能辅助金融分析的大模型。说实话,很多通用模型在聊天、写诗上表现不错,但一碰到专业的财报、行业分析,就有点…

作者头像 李华
网站建设 2026/4/15 3:19:35

Python pandas 大数据量处理的性能瓶颈

Python pandas作为数据科学领域的核心工具,凭借其简洁的API和丰富功能广受青睐。然而当数据规模突破千万行时,其性能瓶颈逐渐显现,处理速度可能骤降百倍,甚至引发内存溢出。本文将从内存管理、循环效率、类型优化等关键维度&#…

作者头像 李华
网站建设 2026/4/17 20:34:42

5分钟掌握B站视频下载神器:BilibiliDown终极免费指南

5分钟掌握B站视频下载神器:BilibiliDown终极免费指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…

作者头像 李华
网站建设 2026/4/17 16:15:27

嵌入式c语言——关键字其6

做乘除法相当于移位后做加减法 mod操作 可以生成特定区间的随机数 位运算

作者头像 李华
网站建设 2026/4/17 1:45:51

OpenClaw人人养虾:RPC 适配器

RPC Adapter(远程过程调用适配器)是 OpenClaw Gateway 对外暴露的编程接口层。外部系统通过 RPC 协议与网关通信,实现消息发送、Agent 管理等操作。协议概述OpenClaw RPC 基于 HTTP JSON 协议:属性说明传输协议HTTP/1.1 或 HTTP/…

作者头像 李华