一、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:知识文件复原
本地知识文件获取后,容易将一个多行段落分割成多个段落,导致语义断裂。需要根据内容逻辑重新组织段落。
- 方法一:基于规则的知识文件复原。


