一、LLMs 已经具备了较强能力,为什么还需要 RAG?
尽管大语言模型(LLM)已展现出显著的能力,但以下几个挑战依然值得关注:
- 幻觉问题:LLM 采用基于统计的概率方法逐词生成文本,这一机制内在地导致其可能出现看似逻辑严谨实则缺乏事实依据的输出,即所谓的'郑重其事的虚构陈述'。
- 时效性问题:随着 LLM 规模扩大,训练成本与周期相应增加。包含最新信息的数据难以融入模型训练过程,导致 LLM 在应对诸如'请推荐当前热门影片'等时间敏感性问题时力有未逮。
- 数据安全问题:通用的 LLM 没有企业内部数据和用户数据。企业想要在保证安全的前提下使用 LLM,最好的方式是把数据全部放在本地,企业数据的业务计算全部在本地完成,而在线的大模型仅仅完成一个归纳的功能。
二、什么是 RAG?
RAG(Retrieval Augmented Generation,检索增强生成)是一种技术框架,其核心在于当 LLM 面对解答问题或创作文本任务时,首先会在大规模文档库中搜索并筛选出与任务紧密相关的素材,继而依据这些素材精准指导后续的回答生成或文本构造过程,旨在通过此种方式提升模型输出的准确性和可靠性。
[图:RAG 技术架构图]
三、RAG 主要包含哪些模块?
模块一:版面分析
本地知识文件读取(pdf、txt、html、doc、excel、png、jpg、语音等),并进行知识文件复原。
Step 1:本地知识文件获取
针对不同类型的文件,需要采取特定的访问与解析策略来有效获取其中蕴含的知识。
- 富文本 txt:直接读取即可。
with open('document.txt', 'r', encoding='utf-8') as f:
content = f.read()
- PDF 文档:数据复杂,包含文本、图片、表格。推荐使用
pdfplumber或PyMuPDF。
import pdfplumber
with pdfplumber.open('document.pdf') as pdf:
text = ''
for page in pdf.pages:
text += page.extract_text()
- HTML 文档:推荐使用
BeautifulSoup提取正文。 - Doc 文档:推荐使用
python-docx。 - 图片内容:使用 OCR(如 PaddleOCR, Tesseract)。
- 语音内容:使用 ASR(如 Wenet, WeTextProcessing)将语音转为文本。
Step 2:知识文件复原
本地知识文件获取后,容易将一个多行段落分割成多个段落,导致语义断裂。需要根据内容逻辑重新组织段落。
- 方法一:基于规则的知识文件复原。
- 方法二:基于 Bert NSP 进行上下句拼接。
模块二:知识库构建
Step 1:知识文本分块
- 原因:避免信息丢失风险;受限于 Embedding 模型的 Tokens 限制及语义完整性。
- 策略:考虑 embedding 模型的 Token 限制情况;确保语义完整性对整体检索效果的影响。
Step 2:Docs 向量化(Embedding)
Embedding 是文本语义含义的信息密集表示,每个嵌入都是一个浮点数向量,使得向量空间中两个嵌入之间的距离与原始格式中两个输入之间的语义相似性相关联。
- 优势:语义理解、容错性(同义词/拼写错误)、多语言支持、语境理解。
- 限制:输入词数限制(TopK 阈值可能引发信息遗漏);仅支持文本数据;大模型仍可能胡编乱造。
- 常用模型:BGE(智源开源)、M3E、Sbert、SimCSE、text2vec。
Step 3:Docs 构建索引
- 工具:Faiss、Milvus、Elasticsearch。
模块三:大模型微调
为什么需要微调?
- 全量训练成本高,微调性价比更高。
- Prompt Engineering 会导致推理成本高(与长度平方正相关)且易被截断。
- 自有数据能更好提升特定领域能力。
- 个性化服务需求。
- 数据安全,数据不能传递给第三方大模型服务。
技术路线:
- FFT (Full Fine Tuning):全量参数训练。缺点:成本高、灾难性遗忘。
- PEFT (Parameter-Efficient Fine Tuning):部分参数训练。主流方案包括 SFT(监督式微调)、RLHF(人类反馈强化学习)、RLAIF(AI 反馈强化学习)。
模块四:文档检索
文档检索作为 RAG 核心工作,其效果对于下游工作至关重要。常用的方式直接用用户的问题进行文档召回,但口语化描述会影响向量召回质量。
优化策略:
- 负样本挖掘:从大量候选样本集合中采样高质量负例配合正例训练。
- 检索优化:改进查询重写、混合检索等策略。
模块五:Reranker
为什么需要 Reranker? 基础 RAG 架构虽能解决幻觉问题,但企业对上下文相关性和问答准确度要求更高。集成 Reranker 可更精细地对结果重排,提高搜索质量。
流程:拿到向量查询(ANN)结果后使用 Reranker,评估搜索结果相关性。
- 工具:bge-reranker。
模块六:RAG 评测
如何有效评估 RAG 性能是关键问题。需关注检索准确率、生成质量、响应时间等指标。
模块七:RAG 开源项目推荐
- RAGFlow:基于深度文档理解的开源 RAG 引擎,提供精简工作流程,支持复杂格式数据问答及引用。
- QAnything:本地知识库问答系统,支持多种文件格式和数据库,允许离线安装。
- Langchain-Chatchat:基于 Langchain 与 ChatGLM 的本地知识库问答应用。
四、RAG 相较于直接使用 LLMs 进行问答有哪些优点?
- 可扩展性:减小模型规模及训练开销,简化知识库扩容更新。
- 准确性:引用信息源,用户可核查答案可信度。
- 可控性:支持知识内容灵活更新与个性化配置。
- 可解释性:展示模型预测依赖的检索条目。
- 多功能性:适应问答、摘要、对话等多种场景。
- 时效性:捕捉最新信息动态。
- 领域定制性:对接特定行业数据集。
- 安全性:数据库层面实施角色划分与安全管控。
五、RAG 和 SFT 的区别
SFT(Supervised Fine-Tuning)是 LLM 实现应用的基础步骤。两者并非非此即彼,合理方式是结合业务需要与两种方法的优点。
- SFT:侧重于让模型学习特定任务的输出格式和风格,适合指令遵循。
- RAG:侧重于引入外部知识,解决知识时效性和幻觉问题,适合知识密集型任务。
通常建议先使用 RAG 解决知识注入问题,若需优化模型风格或特定任务表现,再辅以 SFT。

