ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RAG技术演进:从古典检索到智能体化架构的工程实践

RAG技术演进:从古典检索到智能体化架构的工程实践

1. 从“检索”到“增强”:RAG 的初心与起点

如果你在过去一年里关注过 AI 应用开发,尤其是大语言模型(LLM)的落地,那么“RAG”这个词一定如雷贯耳。它几乎成了解决大模型“幻觉”、知识过时和私有数据利用问题的标准答案。但你是否想过,这个如今看似理所当然的“检索-增强生成”范式,究竟是如何一步步演变到今天这个样子的?它并非凭空出现,而是一系列技术需求、工程实践和学术研究共同推动的必然结果。今天,我们不谈那些复杂的公式和前沿论文,就从我作为一个早期实践者的视角,聊聊 RAG 系统这些年走过的路,看看它是如何从一个简单的想法,进化成一个庞大而精密的工程体系的。

简单来说,RAG 的核心思想朴素而有力:当大模型自己不知道答案时,让它学会去“查资料”。这就像一位博学的专家,身边配备了一个高效、精准的数字化图书馆管理员。专家(LLM)负责理解和创造,管理员(检索系统)负责从海量文档中找出最相关的片段。两者结合,专家的回答就不再受限于其固有的记忆,而是能基于最新、最准确的“参考资料”进行生成。这个想法在 2020 年前后,随着 GPT-3 等模型的横空出世和其暴露出的知识局限性,迅速从学术概念变成了工程界的宠儿。早期的 RAG 系统,我们姑且称之为“古典 RAG”,其架构直接明了:用户提问 -> 用问题去向量数据库里搜相似文本 -> 把搜到的文本和问题一起塞给 LLM -> LLM 生成答案。这个流程解决了“有无”的问题,但随之而来的是一连串更具体的挑战:搜得不准怎么办?搜到的信息太多或太杂怎么办?LLM 不会利用这些信息怎么办?正是对这些问题的持续追问和解决,拉开了 RAG 系统波澜壮阔的进化序幕。

2. 古典 RAG 时代:朴素架构与早期阵痛

2.1 核心三件套:Embedding、向量库与 Prompt 工程

最早的 RAG 实现,技术栈出奇地统一,基本围绕三个核心组件展开,这也是很多人入门 RAG 的第一课。

1. 文本转向量(Embedding):这是检索的基石。当时的首选通常是 OpenAI 的text-embedding-ada-002,或者开源的 Sentence-BERT 模型。它的任务是把一段文本(无论是用户问题还是知识库文档)映射成一个高维空间中的点(向量),语义相似的文本,其向量在空间中的距离也更近。这里第一个“坑”就出现了:Embedding 模型的质量直接决定了检索的上限。一个在通用语料上训练的 Embedding 模型,在面对专业领域术语(比如医疗、法律、金融)时,效果可能会大打折扣。我早期做一个医疗问答项目时,就发现“心肌梗死”和“心梗”的向量相似度并不理想,导致检索遗漏关键文档。

2. 向量数据库(Vector Database):用于存储和快速检索这些向量。Chroma、Milvus、Pinecone、Weaviate 等是当时的热门选择。它们的核心能力是进行“近似最近邻搜索”(ANN),在毫秒级时间内从百万甚至千万级向量中找出与问题向量最相似的几个。选择向量数据库时,我们主要考量几个点:部署复杂度(云服务还是自托管)、性能(QPS 和延迟)、过滤能力(能否结合元数据如日期、作者进行筛选)以及成本。对于快速原型,Chroma 的轻量易用是首选;对于生产级海量数据,Milvus 的分布式架构则更受青睐。

3. 大语言模型与提示词(LLM & Prompt):这是生成的“大脑”。早期大家普遍使用 OpenAI 的 GPT 系列 API。Prompt 的编写则是一门艺术,一个典型的古典 RAG Prompt 模板长这样:

请基于以下上下文来回答问题。如果上下文中的信息不足以回答问题,请直接说“根据提供的信息,我无法回答该问题”。 上下文: {context} 问题: {question} 请给出答案:

这个模板试图做两件事:一是约束 LLM 仅依据提供的上下文作答,以减少幻觉;二是设置一个安全边界,对于超范围的问题明确拒绝。然而,实际操作中问题很多:当{context}内容很长时,LLM 可能会忽略中间部分(“中间丢失”问题);当上下文包含多个矛盾信息时,LLM 可能无法正确取舍;更常见的是,LLM 有时会“自由发挥”,偷偷混入自己训练记忆中的知识,而不是严格引用上下文。

2.2 遭遇的典型问题与朴素优化

古典架构很快在实践中暴露出其脆弱性。以下几个问题是我和同事们踩过无数次的坑:

检索精度不足(“搜不准”):这是最头疼的问题。用户的自然语言提问(Query)和知识库中文档的表述方式(Document)往往存在“词汇鸿沟”。例如,用户问“如何缓解手机电池耗电快?”,而知识库中的文档标题可能是“智能手机续航优化十大技巧”。虽然语义高度相关,但基于词袋模型或简单语义向量的检索可能无法将它们关联起来。我们当时的优化手段非常“手工”:

  • 查询扩展(Query Expansion):手动或使用早期模型,为原始问题生成几个同义或相关的查询。例如,对“缓解耗电快”,扩展出“省电设置”、“降低电池消耗”、“提升续航”等,用这一组查询去检索,然后合并结果。
  • 关键词抽取:从问题中提取出核心名词实体(如“手机电池”、“耗电快”),将其作为过滤条件或加权项,与语义检索结合。
  • 元数据过滤:为文档添加丰富的元数据标签(如文档类型、产品型号、适用场景),在检索时进行层层过滤,缩小搜索范围。

上下文窗口与信息过载(“塞不下”和“看花眼”):早期的 LLM(如 GPT-3)上下文窗口有限(如 4096 tokens)。当检索返回多篇相关文档时,很容易超限,不得不进行截断,可能丢失关键信息。即使能塞下,过多的上下文也会干扰 LLM,让它难以聚焦于最相关的信息。我们的应对策略是:

  • 重排序(Re-ranking):这是一个重要的改进。先用快速的向量检索召回 Top K(比如 K=20)个候选文档,然后使用一个更精细但更耗时的“交叉编码器”模型(如cross-encoder/ms-marco-MiniLM-L-6-v2)对 Query 和每一个候选文档进行相关性打分,最后只选取 Top N(N=3 或 5)个最相关的文档送入 LLM。这一步的成本虽高,但对最终答案质量的提升是立竿见影的。
  • 智能分块(Chunking):不再简单按固定字数切分文档,而是尝试按段落、按标题、甚至按语义进行分块,确保每个“块”在语义上是相对完整的单元。同时,在分块时保留一定的重叠部分,避免在边界处切断重要信息。

生成阶段的“不听话”:即使给了最相关的上下文,LLM 也可能不按套路出牌。比如,它可能总结过度,丢失细节;可能混淆不同文档中的信息;也可能在上下文明确的情况下依然声称“无法回答”。这时就需要更精细的Prompt 工程。我们开始设计更复杂的指令,例如明确要求“逐条列出”、“引用原文中的具体数字”、“如果上下文中有冲突,以 [文档A] 的说明为准”。我们还会在 Prompt 中加入少样本示例(Few-shot),给 LLM 演示我们期望的输入输出格式。

实操心得一:重排序是古典 RAG 性价比最高的升级。在资源有限的情况下,与其追求更昂贵的 Embedding 模型或更大的 LLM,不如在检索后加入一个轻量级的重排序模型。它就像一道质量检验关卡,能以较小的计算代价,显著过滤掉噪声,确保喂给 LLM 的是“精华”。自建 RAG 系统,重排序模块几乎是必选项。

3. 进阶 RAG 时代:模块化、流程化与智能化

随着项目复杂度上升,我们意识到古典 RAG 的线性管道(检索->生成)不够用了。系统需要更灵活、更健壮,于是 RAG 进入了“进阶”阶段,其标志是架构的模块化和流程中引入更多决策点。

3.1 核心架构的演变:从管道到工作流

进阶 RAG 不再是一个黑箱管道,而是一个可编排、可观测的工作流。下图概括了这一阶段的核心思想:

用户提问 | v [查询理解与路由] | (决定搜索策略) v [检索器] -> (向量检索 + 关键词检索 + 混合检索) | v [后处理] -> (重排序 + 去重 + 过滤) | v [上下文构建/压缩] | v [生成器 (LLM)] | v 答案 + [引用溯源]

每一个方框都成了一个可以独立优化和替换的模块。

1. 查询理解与路由:这是入口的智能化。系统开始尝试理解用户提问的真实意图。例如:

  • 问题分类:这是需要联网搜索的实时问题,还是可以从内部知识库回答的问题?如果是前者,可能路由到搜索引擎插件;如果是后者,走 RAG 流程。
  • 意图识别:用户是想进行摘要、问答、还是数据分析?不同的意图可能触发不同的检索策略和 Prompt 模板。
  • 查询改写:自动化地优化原始查询。比如,将口语化的“帮我找下上个月卖得最好的产品是啥?”改写成更正式的“2024年3月销售额最高的产品名称”。这能极大提升检索的召回率。

2. 检索器的多元化:我们认识到,单一的向量检索并非万能。进阶 RAG 普遍采用混合检索(Hybrid Search)

  • 向量检索:负责捕捉语义相似性,解决“词汇鸿沟”问题。
  • 关键词检索(如 BM25):负责精确匹配术语、产品代号、编号等。它对拼写错误更敏感,但能确保关键实体不被遗漏。
  • 将两者的结果以一定的权重(如 70% 语义分 + 30% 关键词分)进行融合,得到更全面的候选列表。Elasticsearch 等传统搜索引擎因其强大的全文检索和过滤能力,也重新回到 RAG 架构中,与向量数据库协同工作。

3. 上下文管理与压缩:这是为了解决信息过载和成本问题。当检索返回大量相关文本时,直接全部塞给 LLM 既不经济,效果也未必好。因此出现了上下文压缩技术。例如,使用一个较小的 LLM(如 GPT-3.5-turbo)或专用模型,先对检索到的文档进行摘要,只提取与问题最相关的核心句子或观点,再将这个压缩后的摘要交给主 LLM 生成最终答案。这就像先让助理研究员整理一份简报,再交给首席专家做决策。

3.2 评估体系的建立:从“感觉”到“指标”

在古典时期,评估 RAG 好坏基本靠人工抽查和“感觉”。进入进阶阶段,我们必须建立量化的评估体系,否则优化工作就无从下手。评估通常分为检索和生成两个层面:

检索阶段评估

  • 命中率(Hit Rate):在 Top K 的检索结果中,至少包含一个能回答问题的相关文档的概率。这衡量了检索的召回能力。
  • 平均精度均值(Mean Average Precision, mAP):不仅关心是否检索到相关文档,还关心相关文档的排名是否靠前。排名越靠前,得分越高。

生成阶段评估

  • 忠实度(Faithfulness):生成的答案是否严格基于提供的上下文,有没有“无中生有”(幻觉)。这可以通过让 LLM 自己判断答案中的每一句话是否能在上下文中找到依据来评估。
  • 答案相关性(Answer Relevance):生成的答案是否直接、充分地回答了原始问题,是否答非所问或包含冗余信息。
  • 引用精度(Citation Precision):答案中提供的引用(如文档 ID、段落号)是否准确指向了支撑该答案的原文。

我们开始使用像RAGASTruLens这样的开源评估框架,它们提供了这些指标的自动化计算方式(虽然仍依赖 LLM 进行评估,有一定成本)。建立评估基线后,任何架构调整、参数调优的效果都有了可衡量的依据。

实操心得二:混合检索是生产系统的标配。不要迷信单一的向量检索。在很多场景下,尤其是涉及精确代码片段、型号参数、法律条款时,关键词检索的精度无可替代。将两者结合,并合理设置权重(需要通过 A/B 测试确定),是构建鲁棒 RAG 系统的关键一步。一个常见的实践是,先用关键词检索确保“准”,再用向量检索扩大“全”。

4. 智能体化 RAG 时代:动态、推理与自我优化

当模块足够多,决策逻辑足够复杂时,一个静态的、预定义的工作流就显得僵化了。最新的演进方向,是让 RAG 系统具备更强的自主性和推理能力,这就是智能体化 RAG(Agentic RAG)。其核心思想是引入一个“调度大脑”(通常是一个 LLM),来动态决定每一步该做什么、怎么做。

4.1 动态规划与多步检索

在传统 RAG 中,检索是一次性的。但在智能体化 RAG 中,系统可以根据中间结果,发起多轮、迭代式的检索。

场景示例:复杂、多跳问题用户问:“我们公司去年发布的 AI 产品,在第三方评测机构 Gartner 的报告里被列入了哪个象限?”

  • 第一跳:智能体首先理解这个问题需要两步信息。它可能先规划:“第一步,需要找到‘我们公司去年发布的 AI 产品’的具体名称。第二步,需要用这个产品名称去查找 Gartner 的评测报告。”
  • 第一次检索:针对“第一步”,它生成一个查询,如“[公司名] 2023年 AI 产品发布”,从知识库中检索,定位到产品名为“星图AI平台”。
  • 第二次检索:针对“第二步”,它生成新的查询,如“Gartner 魔力象限 星图AI平台”,进行第二次检索,找到相关报告片段。
  • 合成答案:最后,将两次检索的结果综合,生成最终答案:“根据 Gartner 2023年 X 月发布的《XX 魔力象限》报告,‘星图AI平台’被列为‘挑战者’象限。”

这个过程完全由 LLM 作为智能体来驱动规划、执行和反思。它可能使用的框架包括 ReAct(Reasoning + Acting)、LangChain 的 Agent 或 AutoGen 的多智能体协作。

4.2 自我优化与闭环学习

这是智能体化 RAG 更前沿的探索方向:让系统能从交互中学习,自我改进。

  • 检索反馈学习:当用户对生成的答案给出“点赞”或“点踩”时,这个信号可以反馈给检索系统。例如,如果用户点了赞,那么生成该答案所依据的检索片段和原始查询之间的关联性可以被强化(例如,调整对应向量的位置或权重)。反之,则进行弱化。这相当于系统在持续微调自己的“检索偏好”。
  • 查询改写优化:智能体可以分析哪些改写后的查询带来了更成功的检索(即最终生成了被用户认可的答案),并总结出模式,用于优化未来的查询改写策略。
  • 异常处理与降级:当智能体发现经过多轮检索和推理仍无法得到高置信度的答案时,它可以自主决策降级策略,例如,转而执行一次更宽泛的网络搜索,或者直接向用户澄清问题、索取更多信息,而不是返回一个可能错误的答案。

4.3 工具增强与外部知识源集成

智能体化 RAG 不再局限于内部的向量数据库。它将检索范围扩展到整个数字世界,通过“工具使用”(Tool Use)能力调用各种 API。

  • 实时信息检索:连接搜索引擎 API,回答关于最新新闻、股价、天气的问题。
  • 结构化数据查询:连接数据库,执行 SQL 查询,将结果作为上下文。
  • 软件工具操作:连接计算器、代码解释器、绘图工具等,进行复杂计算或生成图表。

此时的 RAG 系统,更像是一个以 LLM 为“中央处理器”,拥有多种感知器官(不同检索器、工具)和记忆系统(向量库、数据库)的智能体,能够完成高度复杂、动态的任务。

实操心得三:从智能体化 RAG 开始,重点从“工程构建”转向“智能调度”。前期的基础设施(Embedding 模型、向量库、混合检索)是坚实的底盘。而智能体化阶段,挑战在于如何设计高效、可靠的智能体规划逻辑,以及如何管理其执行过程中的不确定性和成本。提示词工程在这里进化成了“智能体指令工程”,你需要清晰地定义工具、约束智能体的行为边界,并设计有效的验证机制来确保其执行结果的可靠性。这是一个更接近 AI 应用本质的领域。

5. 核心挑战与未来方向的冷思考

回顾整个发展历程,RAG 的进化始终围绕着几个核心挑战展开。而未来的方向,也必然是对这些挑战的更深入解答。

1. 检索质量的“最后一公里”问题:即使有了混合检索、重排序、查询改写,检索到的文档片段是否就是生成答案所需的最优信息,依然存在不确定性。未来,更细粒度的检索(检索到句子级、甚至事实级)、基于生成过程的动态检索(在生成中途发现信息不足时实时发起检索)、以及将检索模型与生成模型进行端到端的联合训练,都是重要的研究方向。

2. 复杂文档的理解与处理:当前 RAG 处理非结构化文本(如 PDF、Word)已很常见,但对于包含复杂排版、图表、公式的文档,以及多模态内容(图文混排),信息提取仍然损失严重。如何让系统真正“理解”一份技术白皮书、一张财务报表或一个设计稿,是突破应用边界的关键。

3. 幻觉的根除与可解释性:尽管 RAG 旨在减少幻觉,但并未根除。LLM 可能错误解读上下文,或对上下文进行外推。未来的系统需要更强大的“事实核查”机制,以及更透明的推理过程展示(不仅给出引用,还能解释为何这些引用支持该答案)。这关系到 RAG 系统在高风险领域(如医疗、金融、法律)的应用可信度。

4. 成本、延迟与规模的平衡:一个集成了重排序、多步检索、智能体规划的 RAG 系统,其计算成本和响应延迟会显著增加。如何在效果和效率之间取得最佳平衡,如何设计分层、缓存的检索策略,如何对轻量级和重量级模型进行分工,是工程上永恆的课题。

5. 评估的自动化与客观化:目前严重依赖 LLM 的评估方式成本高,且可能受评估模型本身偏见的影响。发展更廉价、更客观的评估指标和基准测试集,对于推动整个领域健康发展至关重要。

从我个人的实践来看,RAG 已经从一个技术概念,演变为一套包含数据预处理、检索算法、提示工程、评估运维的完整技术栈。它的进化史,就是 AI 工程化落地的微观缩影。对于开发者而言,理解这段历程,不是为了记住每一个技术名词,而是为了建立起一种系统性的思维:当你面对一个具体的问答需求时,你能清晰地判断它处于哪个复杂度层级,应该选用古典、进阶还是智能体化的架构,又该如何针对性地优化其中的薄弱环节。RAG 没有银弹,只有最适合场景的解决方案组合。而这一切的起点,依然是那个朴素而强大的想法:让模型学会查阅它该看的资料。

返回列表