RAG 检索增强生成技术要点及应用实践
1. 概述
RAG(Retrieval-augmented Generation,检索增强生成)是一种结合信息检索与大语言模型(LLM)的技术架构。该概念最早在 2020 年发表的论文《面向知识密集型 NLP 任务的检索增强生成》中提出。
大语言模型基于预训练的历史数据进行推理,这导致其在生成回答时可能引入过期的、不可预测或错误的信息,从而产生"AI 幻觉"(Hallucination)。RAG 通过利用向量相似度检索技术搜索外部文档,将相关上下文组合成 Prompt 喂给大模型,从而有效解决 AI 幻觉问题和知识更新滞后问题。
目前超过 80% 的落地应用都采用了 RAG 架构,使其成为企业级 AI 应用的核心技术之一。
2. RAG 工作原理
构建一个完整的 RAG 系统通常经过数据提取、数据索引、检索、生成四个阶段。
2.1 数据提取(Extraction)
核心目标是将各种结构化与非结构化数据提取出来。
- 文件格式复杂:例如 PDF 文件不仅包含文字,还夹杂图表,图片内部可能还有 OCR 识别的文字。
- 元信息提取:需要提取上下文相关的元信息(如标题、作者、时间),以便后续处理。若不提取元信息,数据分块时容易切分错误,破坏语义完整性。
2.2 数据索引(Indexing)
这一步涉及文档切分和向量化存储。
- 文档切分(Chunking):切分过大或过小都会影响效果。一般按 300~400 个字符切分,更精细的策略是按意图或段落切分。
- Embedding 模型:将文本转化为向量。常用模型包括 BGE、OpenAI text-embedding-3 等。对于文图关联场景,可使用 CLIP 等多模态模型。
- 向量数据库:将生成的向量存入向量数据库(如 Milvus, Pinecone, Chroma)以支持高效检索。
2.3 检索(Retrieval)
检索过程主要包含 Query 预处理和召回两个步骤。
- Query 预处理:包括意图识别、同义词生成、专有名词扩展等,以提高查询匹配度。
- 召回与重排:向量数据库负责向量检索和文本检索。支持多路召回后,需使用重排(Re-ranking)技术对结果进行精排序。
2.4 生成(Generation)
检索出的结果在给大模型之前,需要进行 Prompt 优化。
- Prompt 工程:加入 Step-by-Step 提示、针对场景的系统指令等。
- 模型能力依赖:最终结果依赖大模型的理解、生成及逻辑推理能力。
# 简化的 RAG 流程示例 (伪代码)
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms import LlamaCpp
# 1. 初始化 Embedding 和 Vector Store
embeddings = HuggingFaceEmbeddings(model_name="bge-large-zh")
vector_store = Chroma(persist_directory="./db", embedding_function=embeddings)
# 2. 用户查询
query =
docs = vector_store.similarity_search(query, k=)
context = .join([doc.page_content doc docs])
prompt =
llm = LlamaCpp(model_path=)
answer = llm(prompt)
(answer)


