RAG(检索增强生成)详解
一、为什么需要 RAG?
尽管大语言模型(LLMs)已展现出显著的能力,但在实际应用中仍面临以下挑战:
- 幻觉问题:LLM 基于统计概率逐词生成文本,可能导致看似逻辑严谨实则缺乏事实依据的输出。
- 时效性问题:训练数据截止后,模型难以获取最新信息,无法回答如'当前热门影片'等时间敏感问题。
- 数据安全问题:企业数据需本地化处理。通用 LLM 无法直接访问企业内部数据,RAG 允许在本地完成业务计算,仅将归纳任务交给在线模型。
二、RAG 核心架构
RAG(Retrieval Augmented Generation, 检索增强生成)是一种技术框架。其核心在于当 LLM 面对解答问题时,先在大规模文档库中搜索相关素材,再依据这些素材指导回答生成,以提升准确性和可靠性。
主要模块
1. 版面分析
处理本地知识文件(pdf、txt、html、doc、excel、图片、语音等),进行文件读取与内容复原。
- 富文本 txt:直接使用文本读取函数。
- PDF 文档:推荐使用
pdfplumber或PyMuPDF解析,处理表格和图片。 - HTML 文档:使用
BeautifulSoup提取正文内容。 - Doc 文档:使用
python-docx解析。 - 图片 OCR:使用 Tesseract、PaddleOCR 等工具识别文字。
- 语音 ASR:使用 Wenet、WeTextProcessing 将语音转为文本。
2. 知识库构建
- 文本分块:根据 Embedding 模型的 Token 限制和语义完整性切分文档。避免一次性嵌入整个文档导致信息丢失。
- 向量化(Embedding):将文本转换为向量表示。常用模型包括 BGE、M3E、SBERT 等。语义检索相比关键词检索具有更好的容错性和多语言支持能力。
- 构建索引:使用 FAISS、Milvus 或 Elasticsearch 存储向量索引,支持高效相似性检索。
3. 大模型微调
针对特定领域需求,可结合 SFT(监督微调)或 PEFT(参数高效微调)。
- 全量微调 (FFT):成本高,易产生灾难性遗忘。
- PEFT:主流方案,如 LoRA、QLoRA,降低训练成本并保留原有能力。
- SFT/RLHF:利用人工标注数据或人类反馈优化模型输出质量。
4. 文档检索与重排序
- 检索:用户 Query 向量化后召回 Top-K 相关文档片段。
- 重排序 (Reranker):在向量召回基础上,使用 Cross-Encoder 模型对结果进行精细排序,提升相关性。
- Prompt 构建:拼接 Query 与 Context,输入大模型生成最终答案。
三、RAG 与 SFT 对比
| 维度 | RAG | SFT (微调) |
|---|---|---|


