RAG(检索增强生成)
大语言模型(LLM)能流畅地写文章、回答问题、编写代码,但它有一个根本性的局限:它的知识被冻结在训练数据截止的那一刻。问它昨天发生了什么新闻?不知道。问它你公司内部的技术文档?更不知道。 更棘手的是,LLM有时候会"一本正经地胡说八道"——这就是所谓的**幻觉(Hallucination)**问题。模型会自信满满地编造一个不存在的论文引用、一个错误的API参数、甚至一个虚构的历史事件。 **RAG(Retrieval-Augmented Generation,检索增强生成)**正是为解决这些问题而生。它的核心思想简单而有效:在让LLM回答之前,先从外部知识库中检索相关信息,把这些信息塞到提示词(Prompt)里,让LLM基于真实资料来回答。 一、RAG的核心思想 1.1 一个直觉的类比 想象你是一个闭卷考试的学生(这就是纯LLM)——只能靠记忆作答,记不清的地方就只能猜。 现在允许你带一本参考书(这就是RAG)——遇到不确定的问题,先翻书找到相关段落,然后基于书中的内容来组织答案。 显然,开卷考试的准确率会高得多。 1.2 RAG的核心价值 LLM的局限 RAG的解决方案 知识过期,无法获取训练截止后的信息 随时更新知识库,实时生效 幻觉问题,生成不存在的信息 基于真实文档生成,可追溯来源 垂直领域知识不足 接入专业知识库,提供领域专业回答 更新成本高,Fine-tuning代价大 只需更新知识库,成本低且灵活 1.3 RAG的基本流程 graph LR Q["用户提问"] --> R["检索器Retriever"] KB["知识库"] --> R R --> C["相关文档片段"] C --> P["构造Prompt问题 + 相关文档"] P --> LLM["大语言模型"] LLM --> A["生成回答"] 三个核心步骤: 检索(Retrieve):根据用户的问题,从知识库中找到最相关的文档片段 增强(Augment):将检索到的信息与原始问题一起构造成Prompt 生成(Generate):LLM基于增强后的Prompt生成回答 二、从关键词到语义:检索方式的演进 2.1 传统关键词搜索的局限 最简单的检索方式是关键词匹配。比如用户问"如何购买商品?",搜索引擎会提取关键词"购买"、“商品”,然后去匹配包含这些词的文档。 问题很明显: 文档中写的是"下单流程说明"——语义完全一致,但没有任何关键词重合 无法理解同义词:“购买"vs"下单"vs"采购"vs"买” 必须精确匹配关键词,用词不同就检索不到 我们需要一种理解语义的检索方式。 2.2 文本嵌入(Text Embedding) 文本嵌入模型(如OpenAI的text-embedding-3-small、BGE等)将文本转换为高维向量(通常512/768/1024/1536维),使得语义相近的文本在向量空间中距离相近: "如何购买商品?" → [0.23, -0.15, 0.82, ...] (768维向量) "下单流程说明" → [0.21, -0.12, 0.79, ...] ← 向量很近,语义匹配! "今天天气真好" → [-0.65, 0.43, -0.21, ...] ← 向量很远 在高维向量空间中,每个维度代表不同的语义特征(如情感倾向、主题领域、动作类型等)。语义相似的文本会在空间中聚集在一起——“购买”、“下单”、“采购"形成一个语义簇,而"天气预报"则远离这个簇。 ...