尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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比如 K20个候选文档然后使用一个更精细但更耗时的“交叉编码器”模型如cross-encoder/ms-marco-MiniLM-L-6-v2对 Query 和每一个候选文档进行相关性打分最后只选取 Top NN3 或 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、段落号是否准确指向了支撑该答案的原文。我们开始使用像RAGAS、TruLens这样的开源评估框架它们提供了这些指标的自动化计算方式虽然仍依赖 LLM 进行评估有一定成本。建立评估基线后任何架构调整、参数调优的效果都有了可衡量的依据。实操心得二混合检索是生产系统的标配。不要迷信单一的向量检索。在很多场景下尤其是涉及精确代码片段、型号参数、法律条款时关键词检索的精度无可替代。将两者结合并合理设置权重需要通过 A/B 测试确定是构建鲁棒 RAG 系统的关键一步。一个常见的实践是先用关键词检索确保“准”再用向量检索扩大“全”。4. 智能体化 RAG 时代动态、推理与自我优化当模块足够多决策逻辑足够复杂时一个静态的、预定义的工作流就显得僵化了。最新的演进方向是让 RAG 系统具备更强的自主性和推理能力这就是智能体化 RAGAgentic RAG。其核心思想是引入一个“调度大脑”通常是一个 LLM来动态决定每一步该做什么、怎么做。4.1 动态规划与多步检索在传统 RAG 中检索是一次性的。但在智能体化 RAG 中系统可以根据中间结果发起多轮、迭代式的检索。场景示例复杂、多跳问题用户问“我们公司去年发布的 AI 产品在第三方评测机构 Gartner 的报告里被列入了哪个象限”第一跳智能体首先理解这个问题需要两步信息。它可能先规划“第一步需要找到‘我们公司去年发布的 AI 产品’的具体名称。第二步需要用这个产品名称去查找 Gartner 的评测报告。”第一次检索针对“第一步”它生成一个查询如“[公司名] 2023年 AI 产品发布”从知识库中检索定位到产品名为“星图AI平台”。第二次检索针对“第二步”它生成新的查询如“Gartner 魔力象限 星图AI平台”进行第二次检索找到相关报告片段。合成答案最后将两次检索的结果综合生成最终答案“根据 Gartner 2023年 X 月发布的《XX 魔力象限》报告‘星图AI平台’被列为‘挑战者’象限。”这个过程完全由 LLM 作为智能体来驱动规划、执行和反思。它可能使用的框架包括 ReActReasoning 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 没有银弹只有最适合场景的解决方案组合。而这一切的起点依然是那个朴素而强大的想法让模型学会查阅它该看的资料。
返回列表