RAG 检索增强生成:概念、原理与实战
一、为什么需要 RAG?
尽管大语言模型(LLMs)已展现出显著的能力,但以下几个挑战依然值得关注:
- 幻觉问题:LLM 采用基于统计的概率方法逐词生成文本,这一机制内在地导致其可能出现看似逻辑严谨实则缺乏事实依据的输出,即所谓的'郑重其事的虚构陈述'。
- 时效性问题:随着 LLM 规模扩大,训练成本与周期相应增加。包含最新信息的数据难以融入模型训练过程,导致 LLM 在应对诸如'请推荐当前热门影片'等时间敏感性问题时力有未逮。
- 数据安全问题:通用的 LLM 没有企业内部数据和用户数据。企业想要在保证安全的前提下使用 LLM,最好的方式是把数据全部放在本地,业务计算在本地完成,而在线的大模型仅完成归纳功能。
二、什么是 RAG?
RAG(Retrieval Augmented Generation,检索增强生成)是一种技术框架。其核心在于当 LLM 面对解答问题或创作文本任务时,首先会在大规模文档库中搜索并筛选出与任务紧密相关的素材,继而依据这些素材精准指导后续的回答生成或文本构造过程,旨在通过此种方式提升模型输出的准确性和可靠性。
三、RAG 主要包含哪些模块?
1. 版面分析
本地知识文件读取(pdf、txt、html、doc、excel、png、jpg、语音等),并进行知识文件复原。
- 富文本 txt 读取:排版整洁,获取方式简单。
- PDF 文档解析:数据复杂,包含文本、图片、表格。常用工具包括 pdfplumber、PyMuPDF。
- HTML 文档解析:使用 BeautifulSoup 等库提取网页内容。
- Doc 文档解析:使用 python-docx 处理 Word 文档。
- OCR 图片识别:光学字符识别(Optical Character Recognition)。开源项目包括 Tesseract、PaddleOCR、EasyOCR 等。流程涉及文字检测与识别。
- ASR 语音识别:自动语音识别(Automatic Speech Recognition)。将语音信号转换为文本。涉及声学信号预处理、特征提取、声学模型及语言模型。
2. 知识库构建
- 知识文本分割:根据语义完整性对长文本进行分块,避免信息丢失,同时考虑 Embedding 模型的 Token 限制。
- Docs 向量化(Embedding):将文本压缩为分布式连续值向量。相似文本在向量空间中距离更近。优势包括语义理解、容错性、多语言支持及语境理解。常用模型包括 BGE、Text2Vec、SimCSE 等。
- Docs 构建索引:使用向量数据库存储和检索。常用方案包括 Faiss、Milvus、Elasticsearch。
3. 大模型微调
- 全量微调(FFT):训练所有参数,成本高且易产生灾难性遗忘。
- 高效微调(PEFT):只训练部分参数,主流方案包括 SFT(监督微调)、RLHF(人类反馈强化学习)、RLAIF(AI 反馈强化学习)。
- 微调目的:在可控成本下提升特定领域能力,解决 Prompt 过长导致的截断或推理成本高的问题。
4. 文档检索
作为 RAG 核心工作,效果直接影响下游质量。常用方式是用用户问题进行向量召回,但口语化问题可能影响召回质量。需关注负样本挖掘及检索优化策略。
5. Reranker(重排序)
基础 RAG 架构可能无法满足高准确度要求。集成 Reranker 可在向量查询后进一步评估搜索结果相关性,精细重排结果。常用工具如 bge-reranker。
6. RAG 评测
有效评估性能是优化 RAG 的关键。需建立专门的评测体系来衡量检索与生成的质量。


