本文介绍了RAG检索增强生成技术旨在解决大语言模型的时效性不足和知识覆盖缺陷问题。文章详细阐述了RAG的核心工作流程包括索引阶段的文档分块、向量化及存入向量数据库以及检索生成阶段的用户问题向量化、相似度计算、Top-k文档检索和LLM生成。Naive RAG作为基础实现方式通过“索引-检索-生成”三步流程为构建更高级的RAG系统奠定基础。一、RAG 简介1.1 什么是 RAGRAG(Retrieval-Augmented Generation检索增强生成) 是结合信息检索与大模型生成的 AI 技术核心逻辑是让大模型先从专属知识库中检索相关信息再基于检索到的内容生成答案类比为给大模型开卷考试避免其仅凭自身训练数据作答。1.2 为什么需要 RAG大语言模型存在两大核心局限性时效性不足大模型的训练数据有时间截止点无法回答最新的实事、热点或实时数据类问题。如实时天气、近期企业制度更新。知识覆盖性缺陷训练数据无法涵盖所有专业领域深度知识和私有数据易出现生成幻觉导致答案缺乏可信度。面对大模型的局限性微调、提示词工程是常见方案但与 RAG 相比差异显著大模型微调需基于专属数据集对模型重新训练成本高、周期长且更新知识需再次微调适合静态、高频使用的专属知识场景。提示词工程仅通过优化提问方式引导模型作答无法补充模型未学习的知识解决幻觉问题的能力有限。RAG无需修改模型本身仅通过外挂知识库补充信息知识更新成本低、实时性强适合动态更新的私有/专业知识场景是解决大模型幻觉和时效性问题的轻量化最优解。RAG 的研究范式一直在持续演进我们将其发展过程分为三个阶段朴素 RAG(Naive RAG)、高级RAG(Advanced RAG) 和模块化 RAG(Modular RAG)1.3 核心工作流程论文https://arxiv.org/pdf/2312.10997RAG 的完整工作流程分为索引阶段和检索生成阶段核心是将 “用户问题” 与 “知识库文档” 进行语义匹配再让大模型基于匹配结果作答索引阶段将知识库中的文档进行加载→分块→向量化→存入向量数据库为后续检索做准备。检索生成阶段用户输入问题→问题向量化→在向量数据库中检索语义相似的文档块→将问题 检索结果拼接为增强提示词→送入大模型→生成精准答案。简单来说无 RAG 时大模型 “凭记忆作答”有 RAG 时大模型 “先翻书再答题”。二、Naive RAG2.1 概述2.1.1 Naive RAG 简介Naive RAG(朴素 RAG) 是指 RAG 的最基本、最经典的实现方式没有引入复杂的优化或额外模块。它遵循最直接的“索引-检索-生成”三步流程是理解和构建更高级 RAG 系统的基础。2.1.2 Naive RAG 流程2.2 索引阶段2.2.1 文档分块为什么要分块大模型有上下文窗口限制且长文档直接检索易丢失关键信息分块是将大文档切分为大小合适的文本片段保证检索的精准性和效率。分块策略按固定字符数切分、按句子切分# 按固定字符数切分 def split(text, count): return [text[i:i count] for i in range(0, len(text), count)] # 按句子切分 import re def split(text): re.findall 是 Python re 模块中的一个函数它返回字符串中所有匹配的列表。 r...原始字符串防止反斜杠被转义 正则含义匹配由任意多个非句末标点字符组成的序列后面紧跟一个句末标点。 return re.findall(r[^。][。], text)固定字符数 重叠窗口切分# 即按照固定字符数切分但是要保留上一段的部分内容 def split_window(text, count, stride): return [text[i:i count] for i in range(0, len(text), count - stride)]RecursiveCharacterTextSplitter 通过递归应用不同粒度的分隔符切分在满足块大小约束的同时尽可能保留文本的自然边界(段落、句子、词语)。这是 RAG 应用中对文档进行预处理的标准工具能有效提升后续检索与生成的质量。# 从 langchain 导入递归字符文本分割器 from langchain.text_splitter import RecursiveCharacterTextSplitter # 待分割的长文本包含多个段落和句子 text 人工智能AI是计算机科学的一个分支致力于创建能够执行通常需要人类智能的任务的系统。 机器学习是AI的核心子领域它使计算机能够从数据中学习而无需明确编程。 深度学习则是机器学习的一个子集基于人工神经网络。 自然语言处理NLP使计算机能够理解、解释和生成人类语言。 计算机视觉则赋予机器“看”和识别图像的能力。 如今AI已广泛应用于医疗、金融、教育、交通等各个领域。 然而AI的发展也带来了伦理和隐私方面的挑战需要全社会共同应对。 # 初始化递归文本分割器 text_splitter RecursiveCharacterTextSplitter( # 每个块的最大字符数 chunk_size100, # 相邻块之间的重叠字符数用于保持上下文连贯避免切分边界丢失信息 chunk_overlap20, # 用于计算文本长度的函数默认 len 表示按字符数计算也可替换为 token 计数函数 length_functionlen, # 自定义分隔符优先级列表从高到低 # 首先尝试用双换行符 \n\n 切分段落边界 # 如果某个块仍太大则对该块改用单换行符 \n 切分行边界 # 接着尝试用中文句号 。 切分句子边界 # 再用逗号 切分短语边界 # 然后用空格 切分单词边界 # 最后如果还是太大就用空字符串 按字符强制切分保证块大小不超 chunk_size separators[\n\n, \n, 。, , , ] ) # 对文本执行分割返回字符串列表每个元素是一个文本块 chunks text_splitter.split_text(text) # 遍历并打印每个块的内容和长度展示分割结果 for i, chunk in enumerate(chunks): print(f块 {i1} (长度 {len(chunk)}):\n{chunk}\n{-*50})2.2.2 文档向量化向量化(Embeddings) 是将文本、图片、音频等非结构化数据转换为数值向量的过程向量由一组浮点数组成对应 n 维空间的一个点向量的维度代表语义特征的丰富度。用户查询和文档块必须使用同一个嵌入模型。如果模型不一致向量就处于不同的语义空间相似度比较将毫无意义。2.2.3 向量数据库作为 RAG 技术的关键组件向量数据库解决了 AI 时代非结构化数据的高效存储、检索和相似度匹配问题是连接海量数据与大模型的桥梁。常见向量数据库Chroma 使用安装与初始化# 安装必要的库# pip install chromadbimport chromadb存储向量# 当前配置中数据保存在内存中 client chromadb.Client(Settings(allow_resetTrue)) # 如果需要持久化到磁盘需使用 PersistentClient创建客户端 # client chromadb.PersistentClient(path./my_chroma_db) # 创建一个 Collection。可以指定距离计算方法默认为余弦相似度 collection client.create_collection( namemy_rag_docs, metadata{hnsw:space: cosine} # 指定使用余弦相似度 ) # 将数据添加到 collection 中 collection.add( # 每个文档的向量 embeddingsembeddings, # 每个文档的原文 documentschunks, # 每个文档的 id idschunk_ids ) print(fCollection 中现在有 {collection.count()} 个数据块)2.3 检索阶段2.3.1 相似度计算在 RAG 的检索阶段相似度计算是核心环节。它用于衡量用户查询向量与知识库中文档向量之间的相似程度 从而筛选出最相关的文档为后续的生成提供高质量的上下文。相似度计算本质上就是在向量空间中衡量两个向量之间的距离或角度向量夹角越小相似度越高向量距离越近相似度越相似度值通常在 [0 , 1] 或 [-1, 1]欧氏距离计算示例import numpy as np def euclidean_distance(a, b): 计算两个向量 a 和 b 之间的欧氏距离。 参数 a第一个向量NumPy数组 b第二个向量NumPy数组 返回 两个向量之间的欧氏距离标量值 # a - b: 对应元素相减得到差值向量 # np.linalg.norm(...): 计算该差值向量的长度即欧氏距离 return np.linalg.norm(a - b) # 示例使用 if __name__ __main__: # 模拟文本向量 query_vec np.array([0.1, 0.2, 0.3, 0.4, 0.5]) doc_vec np.array([0.15, 0.25, 0.35, 0.45, 0.55]) # 计算相似度 ecul_dist euclidean_distance(query_vec, doc_vec) print(f欧氏距离: {ecul_dist:.4f}) # 输出: 欧氏距离: 0.1118余弦相似度计算示例import numpy as np def cosine(a, b): 计算两个向量之间的余弦相似度。 参数: a: 第一个向量 (numpy array) b: 第二个向量 (numpy array) 返回: float: 余弦相似度 [-1, 1]。如果向量为零向量返回 0.0。 # 计算向量 a 和向量 b 的点积内积 dot_product np.dot(a, b) # 计算向量 a 的 L2 范数模长 norm_a np.linalg.norm(a) # 计算向量 b 的 L2 范数模长 norm_b np.linalg.norm(b) # 计算余弦相似度点积除以两个向量模长的乘积 cos_sim dot_product / (norm_a * norm_b) return cos_sim # 示例使用 if __name__ __main__: # 模拟文本向量 query_vec np.array([0.1, 0.2, 0.3, 0.4, 0.5]) doc_vec np.array([0.15, 0.25, 0.35, 0.45, 0.55]) # 计算相似度 cosine cosine(query_vec, doc_vec) print(f余弦相似度: {cosine:.4f}) # 输出: 余弦相似度: 0.99842.3.2 Chroma 检索查询向量化对用户输入的查询使用同一个嵌入模型转换成向量。相似度计算计算查询向量与所有文档块向量的相似度(通常用余弦相似度或欧氏距离)。返回 Top-k 块选出最相似的 k 个文本块作为检索结果。collection.query( # 查询条件向量 query_embeddingsquery_embeddings, # 最相关的个结果 n_resultstop_k )2.4 生成阶段2.4.1 构建 Prompt将检索到的上下文信息与用户原始查询进行结构化组合构建一个清晰、明确的提示模板。优秀的提示设计能够引导 LLM 正确理解任务目标有效利用上下文信息。上下文信息[检索到的块1][检索到的块2]...根据以上上下文请回答用户问题def basic_template(context, question): prompt f 上下文信息 {context} 根据以上上下文请回答 {question} # 示例使用 if __name__ __main__: # 模拟检索到的上下文 context_blocks [ 人工智能AI是一门旨在创建智能代理的计算机科学分支..., 未来十年AI预计将在以下领域取得重大突破... ] # 用户问题 question 人工智能的发展前景如何 # 构建提示 prompt basic_template(context_blocks, question) print(prompt)2.4.2 LLM 生成将提示输入给大语言模型模型基于提供的上下文生成自然语言回答。import os from openai import OpenAI client OpenAI( api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, ) completion client.chat.completions.create( modelqwen-plus, messages[ {role: system, content: You are a helpful assistant.}, {role: user, content: prompt}, ] ) print(completion.model_dump_json())如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取