RAG基础
RAG基础
RAG基础 RAG基础 Modified November 26, 2025 1. 数据预处理,构建向量索引库 ◦ 文档分块:将文档切分为适当大小的片段(chunks),以便后续检索。分块策略需要在语义完整性与检索效率之间取得平衡 ◦ 向量化处理:使用嵌入模型(如BGE、M3E、Chinese Alpaca 2等)将文本块转换为向量,并存储在向量数据库中 2. 检索(Retrieval) 当用户提出问题时,系统从外部知识库(如企业文档、维基百科、数据库)中检索与问题相关的文本片段。检索方式包括: ◦ 向量检索:将问题和文档转化为向量,通过相似度计算(如余弦相似度)匹配语义相关的内容。 ◦ 关键词检索:基于关键词匹配快速定位内容(如BM25算法)。 ◦ 混合检索:结合向量与关键词检索,提升召回率和准确性。 3. 生成(Generation) 将检索到的相关文本与用户问题合并为提示(Prompt),输入大语言模型(如GPT、DeepSeek),生成自然语言答案。模型基于外部知识而非仅依赖训练数据生成回答,显著降低虚构信息的风险 🗒️ 敲黑板:RAG本质就是通过用户的query,结合索引内容去重构出一个新的prompt 4、RAG基础架构演进分类 Naive RAG(基础RAG) • 核心流程:索引构建 → 检索召回 → 直接生成。 • 用途:适用于简单问答(如FAQ查询、封闭域单轮对话)。 • 缺陷: ◦ 检索噪声干扰(如语义相似但主题无关的内容); ◦ 信息碎片化(固定分块割裂长上下文); ◦ 多跳推理失效(无法关联跨文档信息)。 • 典型场景:企业产品手册查询、基础聊天机器人。 Advanced RAG(高级RAG) • 优化策略: ◦ 检索前:查询改写(Query Rewriting)、子查询分解(HyDE)、元数据过滤; ◦ 检索中:混合检索(向量+关键词)、图数据库增强; ◦ 检索后:重排序(Reranker)、上下文压缩(Prompt Compression)。 • 用途:提升高精度场景的答案质量,如法律合同解析、医疗诊断支持。 • 优势:解决Naive RAG的噪声问题,支持复杂语义对齐。 Modular RAG(模块化RAG) • 架构特性:解耦为可插拔模块(检索器、重排器、路由代理等)。 • 核心能力: ◦ 迭代检索:逐步优化结果(如Adaptive RAG按问题难度选择路径); ◦ 动态路由:将查询分配至最优模块(如API、数据库)。 • 用途:企业级知识管理平台,需整合多源异构数据(如金融风控系统)。 Agentic RAG(智能体RAG) • 技术分支: ◦ 单智能体路由(Router):动态分配任务至专用模块; ◦ 多智能体协同(Multi Agent):并行调用多个工具(如数据库+搜索引擎)。 • 用途:超复杂任务处理(如全球新闻汇总、多轮跨工具推理)。 5、RAG技术选型建议 • 基础场景:Naive RAG(低成本快速部署)。 • 高精度需求:Advanced RAG + 重排序模块(如法律、医疗)。 • 多源异构数据:Hybrid RAG 或 Modular RAG。 • 实时多模态处理:Multimodal RAG(如电商推荐)。 • 超复杂任务:Agentic RAG(多智能体协同)。 6、如何提升RAG质量方法 数据准备环节,阿里云考虑到文档具有多层标题属性且不同标题之间存在关联性,提出多粒度知识提取方案,按照不同标题级别对文档进行拆分,然后基于Qwen14b模型和RefGPT训练了一个面向知识提取任务的专属模型,对各个粒度的chunk进行知识提取和组合,并通过去重和降噪的过程保证知识不丢失、不冗余。最终将文档知识提取成多个事实型对话,提升检索效果; 知识检索环节,哈啰出行采用多路召回的方式,主要是向量召回和搜索召回。其中,向量召回使用了两类,一类是大模型的向量、另一类是传统深度模型向量;搜索召回也是多链路的,包括关键词、ngram等。通过多路召回的方式,可以达到较高的召回查全率。 答案生成环节,中国移动为了解决事实性不足或逻辑缺失,采用FoRAG两阶段生成策略,首先生成大纲,然后基于大纲扩展生成最终答案。 智能文档技术:通过ocr智能识别技术结合AI深度学习,对文档进行智能分块 阿里云智能文档技术:https://www.aliyun.com/product/ai/docmind?spm=a2c4g.11174283.0.0.bfe667a8tIVMdG 7.代码实践 大学生创新创业三年行动计划.pdf Code block Markdown 项目实践一:基于RAG和大模型实现杭州大学生补贴政策问答程序 实现过程: 1.收集知识库 2.提取知识库文本内容记录每行内容和对应页码 3.将文本进行分割并保存到向量数据库 4.进行相似度搜索,找到与查询相关的文档 5.导入大模型,使用问答链对用户问题进行回答 工具: 1.环境:conda 2.ide:PyCharm 3.语言:Python 4.模型:阿里云百炼大模型 5.查询知识库数据:大学生创新创业三年运动计划. Code block Python 提供跨平台的操作系统交互接口,允许开发者执行文件管理、进程控制、环境配置等底层操作 import os 专业日志管理核心工具,可以监控生产环境、调试、运行状态等 import logging Python中的序列化库,可以将Python对象序列化二进制字节流,保存到文件在中,同时可以反序列化还原对象 import pickle 用于读取PDF文件内容,提取文本、元数据(作者/标题)、页面对象等基础信息 from PyPDF2 import PdfReader 加载预定义的问答任务链,自动化实现“检索→生成”流程 from langchain.chains.question answering import load qa chain 调用OpenAI的GPT系列模型,实现文本生成、问答、摘要等任务 from langchain openai import OpenAI, ChatOpenAI 使用OpenAI的嵌入模型(如text embedding ada 002)将文本转换为高维向量,用于语义相似度计算 from langchain openai import OpenAIEmbeddings 阿里云DashScope提供的嵌入模型,适合中文场景优化,功能类似OpenAI Embeddings from langchain community.embeddings import DashScopeEmbeddings 监控OpenAI API调用开销(消耗的tokens数量、费用),调试性能瓶颈 from langchain community.callbacks.manager import get openai callback 将长文本按语义递归分割为小片段(如按段落、句子),适配语言模型的上下文长度限制 from langchain.text splitter import RecursiveCharacterTextSplitter Facebook开源的向量数据库库,支持快速相似性搜索(最近邻检索) from langchain community.vectorstores import FAISS from openai import OpenAI Python类型标注库,用于声明函数参数/返回值的类型(如List[str]表示字符串列表),提升代码可读性与静态检查支持 from typing import List, Tuple 函数一:读取pdf文件,提取每行内容和每行对应的页码,同时拼接成一个大文本 def extract text with page numbers(pdf) Tuple[str,List[int]]: """ 从pdf中提取文本并记录每行文本对应的页码 参数: pdf: PDF文件对象 返回: text: 提取的文本内容 page numbers: 每行文本对应的页码列表 """ text = "" page numbers = [] 遍历PDF的每一页,enumerate从1开始计数页码 for page number,page in enumerate(pdf.pages, start=1): 提取当前页的文本 extracted text = page.extract text() 如果该页面有文本 if extracted text: 将当前页文本追加到总文本中(字符串拼接文本) text += extracted text 记录每行文本对应的页码(按换行符分隔) page numbers.extend([page numbers] len(extracted text.split("\n"))) else: 处理无文本页面的情况 logging.warning(f"NO TEXT FOUND ON page {page number}.") return text ,page numbers 向量化处理函数,对识别到的PDF文件进行分割,将分割好的文本块构建成向量存储 def process text with splitter(text: str, page numbers: List[int], save path: str = None): """ 处理文本并创建向量存储 参数: text: 提取的文本内容 page numbers: 每行文本对应的页码列表 save path: 可选,保存向量数据库的路径 返回: knowledgeBase: 基于FAISS的向量存储对象 """ 创建递归式文本分割器 text splitter = RecursiveCharacterTextSplitter( separators=["\n\n", "\n", "\t", "."," "], 按语义单位分割 chunk size=512, 区块最大长度 chunk overlap= 128, 区块间重叠长度 length function= len, 长度计算函数 ) 文本分块处理 chunks = text splitter.split text(text) print(f"文本被分割成: {len(chunks)}个块。") 使用阿里云DashScope生成文本嵌入向量 embeddings = DashScopeEmbeddings(model="text embedding v2") 构建FAISS向量数据库 knowledgeBase = FAISS.from texts(chunks,embeddings) print("已从文本块创建知识库...") 建立区块 页码映射关系,enumerate(chunks)同时获取分块的索引 i和内容 chunk。 page numbers[i]表示第 i个分块在源文档中的起始页码 page info = {chunk: page numbers[i] for i, chunk in enumerate(chunks)} knowledgeBase.page info = page info 附加元数据 持久化存储 if save path: 确保目录存在 os.makedirs(save path, exist ok=True) 保存向量索引 knowledgeBase.save local(save path) print(f"向量数据库已保存到: {save path}") 序列化储存页码元数据,保存页码信息到同一目录 with open(os.path.join(save path, "page info.pkl"), "wb") as f: pickle.dump(page info, f) print(f"页码信息已保存到: {os.path.join(save path, 'page info.pkl')}") return knowledgeBase 加载向量化数据库内容和页码信息 def load knowledge base(load path: str, embeddings = None) FAISS: """ Code block Python 返回检索到的内容如下: """ 根据杭州市的相关政策,大学生可以领取以下补贴: 1. 一次性创业补贴 :毕业5年内的高校毕业生或在校大学生在杭新创办企业,可享受3000元的一次性创业补贴。 2. 一次性创业社保补贴 :毕业5年内的高校毕业生或在校大学生在杭新创办企业,可享受5000元的一次性创业社保补贴。 3. 创业带动就业补贴 : 带动3人就业且符合相关条件的,可享受每年2000元的创业带动就业补贴。 在带动3人就业基础上,每增加1人可再享受每人每年1000元补贴。 每年补贴总额不超过2万元,补贴期限最长不超过3年。 4. 经营场所房租补贴 :毕业5年内的高校毕业生或在杭高校在校大学生在杭新创办企业租赁办公用房的,可申请3年内最高10万元的经营场所房租补贴。 5. 人才专项租赁住房或公共租赁住房 : 大专及以上学历大学毕业生可申请人才专项租赁住房。 1. 数据预处理,构建向量索引库 ◦ 文档分块:将文档切分为适当大小的片段(chunks),以便后续检索。分块策略需要在语义完整性与检索效率之间取得平衡 ◦ 向量化处理:使用嵌入模型(如BGE、M3E、Chinese Alpaca 2等)将文本块转换为向量,并存储在向量数据库中 ◦ 文档分块:将文档切分为适当大小的片段(chunks),以便后续检索。分块策略需要在语义完整性与检索效率之间取得平衡 ◦ 向量化处理:使用嵌入模型(如BGE、M3E、Chinese Alpaca 2等)将文本块转换为向量,并存储在向量数据库中 2. 检索(Retrieval) 当用户提出问题时,系统从外部知识库(如企业文档、维基百科、数据库)中检索与问题相关的文本片段。检索方式包括: ◦ 向量检索:将问题和文档转化为向量,通过相似度计算(如余弦相似度)匹配语义相关的内容。 ◦ 关键词检索:基于关键词匹配快速定位内容(如BM25算法)。 ◦ 混合检索:结合向量与关键词检索,提升召回率和准确性。 ◦ 向量检索:将问题和文档转化为向量,通过相似度计算(如余弦相似度)匹配语义相关的内容。 ◦ 关键词检索:基于关键词匹配快速定位内容(如BM25算法)。 ◦ 混合检索:结合向量与关键词检索,提升召回率和准确性。 3. 生成(Generation) 将检索到的相关文本与用户问题合并为提示(Prompt),输入大语言模型(如GPT、DeepSeek),生成自然语言答案。模型基于外部知识而非仅依赖训练数据生成回答,显著降低虚构信息的风险 🗒️ 敲黑板:RAG本质就是通过用户的query,结合索引内容去重构出一个新的prompt 敲黑板:RAG本质就是通过用户的query,结合索引内容去重构出一个新的prompt 4、RAG基础架构演进分类 Naive RAG(基础RAG) • 核心流程:索引构建 → 检索召回 → 直接生成。 • 用途:适用于简单问答(如FAQ查询、封闭域单轮对话)。 • 缺陷: ◦ 检索噪声干扰(如语义相似但主题无关的内容); ◦ 信息碎片化(固定分块割裂长上下文); ◦ 多跳推理失效(无法关联跨文档信息)。 ◦ 检索噪声干扰(如语义相似但主题无关的内容); ◦ 信息碎片化(固定分块割裂长上下文); ◦ 多跳推理失效(无法关联跨文档信息)。 • 典型场景:企业产品手册查询、基础聊天机器人。 Advanced RAG(高级RAG) • 优化策略: ◦ 检索前:查询改写(Query Rewriting)、子查询分解(HyDE)、元数据过滤; ◦ 检索中:混合检索(向量+关键词)、图数据库增强; ◦ 检索后:重排序(Reranker)、上下文压缩(Prompt Compression)。 ◦ 检索前:查询改写(Query Rewriting)、子查询分解(HyDE)、元数据过滤; ◦ 检索中:混合检索(向量+关键词)、图数据库增强; ◦ 检索后:重排序(Reranker)、上下文压缩(Prompt Compression)。 • 用途:提升高精度场景的答案质量,如法律合同解析、医疗诊断支持。 • 优势:解决Naive RAG的噪声问题,支持复杂语义对齐。 Modular RAG(模块化RAG) • 架构特性:解耦为可插拔模块(检索器、重排器、路由代理等)。 • 核心能力: ◦ 迭代检索:逐步优化结果(如Adaptive RAG按问题难度选择路径); ◦ 动态路由:将查询分配至最优模块(如API、数据库)。 ◦ 迭代检索:逐步优化结果(如Adaptive RAG按问题难度选择路径); ◦ 动态路由:将查询分配至最优模块(如API、数据库)。 • 用途:企业级知识管理平台,需整合多源异构数据(如金融风控系统)。 Agentic RAG(智能体RAG) • 技术分支: ◦ 单智能体路由(Router):动态分配任务至专用模块; ◦ 多智能体协同(Multi Agent):并行调用多个工具(如数据库+搜索引擎)。 ◦ 单智能体路由(Router):动态分配任务至专用模块; ◦ 多智能体协同(Multi Agent):并行调用多个工具(如数据库+搜索引擎)。 • 用途:超复杂任务处理(如全球新闻汇总、多轮跨工具推理)。 5、RAG技术选型建议 • 基础场景:Naive RAG(低成本快速部署)。 • 高精度需求:Advanced RAG + 重排序模块(如法律、医疗)。 • 多源异构数据:Hybrid RAG 或 Modular RAG。 • 实时多模态处理:Multimodal RAG(如电商推荐)。 • 超复杂任务:Agentic RAG(多智能体协同)。 6、如何提升RAG质量方法 数据准备环节,阿里云考虑到文档具有多层标题属性且不同标题之间存在关联性,提出多粒度知识提取方案,按照不同标题级别对文档进行拆分,然后基于Qwen14b模型和RefGPT训练了一个面向知识提取任务的专属模型,对各个粒度的chunk进行知识提取和组合,并通过去重和降噪的过程保证知识不丢失、不冗余。最终将文档知识提取成多个事实型对话,提升检索效果; 知识检索环节,哈啰出行采用多路召回的方式,主要是向量召回和搜索召回。其中,向量召回使用了两类,一类是大模型的向量、另一类是传统深度模型向量;搜索召回也是多链路的,包括关键词、ngram等。通过多路召回的方式,可以达到较高的召回查全率。 答案生成环节,中国移动为了解决事实性不足或逻辑缺失,采用FoRAG两阶段生成策略,首先生成大纲,然后基于大纲扩展生成最终答案。 智能文档技术:通过ocr智能识别技术结合AI深度学习,对文档进行智能分块 阿里云智能文档技术:https://www.aliyun.com/product/ai/docmind?spm=a2c4g.11174283.0.0.bfe667a8tIVMdG 7.代码实践 大学生创新创业三年行动计划.pdf 大学生创新创业三年行动计划.pdf You don't have permission to access this synced block. Please log in and try again. Log In 1、什么是RAG? RAG(Retrieval Augmented Generation,检索增强生成) • 是一种将外部知识检索与大语言模型(LLM)生成能力结合的人工智能技术架构。 • 其核心思想是让语言模型在生成答案前,先通过检索外部知识库获取相关信息,从而解决传统语言模型的“知识滞后”和“幻觉编造”问题,生成更准确、可靠且实时的回答 RAG(Retrieval Augmented Generation,检索增强生成)是一种将外部知识检索与大语言模型(LLM)生成能力结合的人工智能技术架构。其核心思想是让语言模型在生成答案前,先通过检索外部知识库获取相关信息,从而解决传统语言模型的“知识滞后”和“幻觉编造”问题,生成更准确、可靠且实时的回答 。 2、为什么需要RAG? 传统语言模型的局限性推动了RAG的发展: ◦ 知识滞后:模型训练后无法获取新知识。 ◦ 幻觉风险:对未知问题可能编造看似合理实则错误的答案。 ◦ 专业领域局限:缺乏特定领域知识(如法律条款、医疗指南、企业本身数据)。 ◦ 知识滞后:模型训练后无法获取新知识。 ◦ 幻觉风险:对未知问题可能编造看似合理实则错误的答案。 ◦ 专业领域局限:缺乏特定领域知识(如法律条款、医疗指南、企业本身数据)。 RAG的优势: ◦ 实时性:通过更新知识库获取最新信息。 ◦ 准确性:答案基于检索内容生成,减少幻觉。 ◦ 可解释性:答案可追溯至知识库原文,方便验证。 ◦ 轻量化:无需重新训练大模型,成本更低 ◦ 实时性:通过更新知识库获取最新信息。 ◦ 准确性:答案基于检索内容生成,减少幻觉。 ◦ 可解释性:答案可追溯至知识库原文,方便验证。 ◦ 轻量化:无需重新训练大模型,成本更低 3、RAG 的工作原理 RAG 的工作流程分为三步: ◦ 知识库构建:收集并整理文档、网页、数据库等多源数据,构建外部知识库