1784637222338

问题: 什么是RAG,讲一下原理和流程

👇 点击展开/折叠 面试背诵模板(建议先背这个) RAG(Retrieval-Augmented Generation,检索增强生成)是一种将外部知识检索与大语言模型生成能力相结合的技术框架。核心原理是在LLM生成答案前,先从外部知识库中检索与问题相关的文档片段,将这些片段作为上下文注入提示词,再由LLM基于检索到的事实生成回答。流程分为两阶段:索引阶段将外部文档切分、向量化后存入向量数据库;查询阶段将用户问题向量化,在数据库中检索相似文档,将检索结果与问题拼接为增强提示,交由LLM生成答案。RAG有效解决了LLM的幻觉问题、知识时效性不足和缺乏私有领域知识等局限性。
------
  1. 相关检索 (Retrieve):用问题向量在向量数据库中搜索,找出语义最相似的N个文本块作为参考信息。有的系统会先对用户问题进行查询重写,使其更清晰、更利于搜索。
  2. **上下文增强 (Augment)**:将检索到的文本块和用户原始问题,按特定模板组合成一个内容丰富的提示词(Prompt)。
  3. **答案生成 (Generate)**:将增强后的提示词发给大语言模型(LLM)。模型会基于提供的参考资料生成答案,从而得到更准确、有依据的回复。

一、RAG产生的背景与核心价值

大语言模型存在三个固有限制:

① 知识截止于训练数据时间点,无法回答最新问题;

② 训练数据不含企业私有文档或专业领域知识;

③ 容易产生事实性幻觉(hallucination)。

RAG通过实时检索外部知识库注入相关上下文,让模型基于检索到的事实而非仅凭参数化记忆生成答案,从而提升准确性、可控性和可解释性。

二、核心运作流程(两阶段详解)

阶段一:离线索引(数据准备)

  1. 文档加载与解析:从多种数据源(PDF、Word、网页、数据库)读取原始文档。
  2. 文本分块(Chunking):将长文档切分为语义完整的短文本块(通常256-512 tokens),便于精准检索。
  3. 向量化嵌入Embed:使用嵌入模型(如OpenAI text-embedding-3-small、BGE等)将文本块转换为高维向量。
  4. 存储索引:将向量及对应的原始文本存入向量数据库(如Milvus、Pinecone、Chroma等),并构建索引加速相似度搜索。倒排索引

阶段二:在线查询(检索与生成)

  1. 问题向量化:将用户输入的问题用与索引阶段相同的嵌入模型转换为向量。
  2. 相似性检索:在向量数据库中进行ANN(近似最近邻)搜索,返回与问题语义最相似的Top-k个文本块。
  3. 上下文注入:将检索到的文本块作为上下文,与用户问题一起组合成结构化提示词。
  4. LLM生成:将增强后的提示词输入大语言模型,生成基于检索事实的最终答案。

RAG文本预处理属于特征工程吗?

是,但视角不同。

在RAG(检索增强生成)系统中,文本预处理是特征工程在特定领域的具体应用。两者目标一致:都是将非结构化或半结构化的原始数据,处理成更适合下游任务(对RAG而言是检索和生成)的格式。

它们的主要区别在于应用场景和最终目的:

  • 传统特征工程:服务于机器学习模型(如分类、回归),最终产出是结构化的特征向量。
  • RAG文本预处理:服务于检索系统和大语言模型(LLM),最终产出是结构清晰、语义完整的文本块(Chunks)及其元数据,以便高效检索和生成准确回答。

RAG文本预处理的核心操作

RAG的文本预处理通常包含以下关键步骤:

1. 文档解析

  • 目标:从不同格式的原始文档中提取出纯文本内容。
  • 操作:解析PDF、Word、HTML、Markdown等格式,提取正文、标题、表格、代码块等核心文本信息,并丢弃无关的格式和元素。

2. 数据清洗与标准化

  • 目标:消除噪声,提升文本质量。
  • 操作:
    • 清洗:去除HTML标签、特殊符号、乱码、广告、页眉页脚等无关或干扰性内容。
    • 去重:使用哈希算法或语义相似度计算,删除重复或高度相似的段落。
    • 标准化:统一日期、数值、单位等格式(如将“今天”转换为具体日期“2025-07-17”),保证数据一致性。

3. 文本分块

  • 目标:将长文档切分成大小合适、语义完整的文本块,这是RAG中最关键的步骤之一。
  • 操作:
    • 固定长度分块:按固定的字符数(如512个字符)进行切割,实现简单但可能破坏语义。
    • 语义分块:利用句子边界检测或段落分割,尽可能保留完整的语义单元。
    • 动态分块:根据内容复杂度(如技术文档按章节,短文本合并相邻段落)动态调整块大小。

4. 元数据提取

  • 目标:为每个文本块添加上下文“标签”,丰富其信息维度。
  • 操作:提取并附加文档来源(URL、文件名)、创建时间、作者、文档类型等信息。这些元数据可用于检索时的精准过滤(如只搜索特定时间范围内的文档)和结果排序。

5. 结构化增强(可选)

  • 目标:为文本注入更深层的语义信息。
  • 操作:运用命名实体识别(NER)等技术,从文本中提取出人名、地名、组织名等关键实体,并将其作为标签或直接拼接到文本中,增强语义表示。

总结

可以将传统特征工程理解为数据进入模型前的“通用翻译”,而RAG文本预处理则是数据进入检索和生成系统前的“专项精加工”。后者借鉴了前者的思想,并根据RAG系统的特定需求,发展出了一套专门的操作流程。