RAG关键模块解析:实践必备指南

2026-06-22阅读 0热度 0
ai 人工智能

检索增强生成(RAG)首次由Meta在2020年的论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中提出。核心思路是让大模型不再依赖内部知识,而是从外部知识库实时检索并利用信息。在大模型落地场景中,RAG已成为解决幻觉、知识滞后、超长文本处理等系统性问题的“标配”方案。

RAG的挑战

理想与现实存在差距。RAG在实际部署时,核心挑战集中在三个环节:检索精度、增强衔接、生成质量。

检索质量

  • 语义歧义:典型如“苹果”指水果还是科技公司?向量表示常混淆概念,导致检索结果偏离目标。
  • 用户输入变复杂:用户提问从关键词转向完整自然语言对话,包含多轮上下文和口语化表达,传统关键词逻辑严重失效。
  • 文档切分:基于标点、段落还是语义切分?切分后的“块”如何向量化?这些细节直接决定后续匹配效果。
  • 多模内容的提取及表征:现实文档包含表格、图表、公式等非纯文本内容。如何提取并清晰表达这些信息?尤其在处理模糊或否定查询时,影响显著。

增强过程

  • 上下文的集成:检索结果与生成任务如何无缝衔接?若衔接不当,生成内容则像拼接般缺乏连贯性。
  • 冗余和重复:多段检索结果信息重叠,生成时容易重复表述,导致内容冗余。
  • 排名和优先级:面对多个检索结果,如何判断哪段对当前任务最重要?增强过程需学会赋予每段信息合理权重。

生成质量

  • 过度依赖检索内容:模型有时过于信任检索材料,丧失自主判断,甚至将检索中的错误一并吸收,加剧幻觉。
  • 无关性:生成的答案未能解决用户提问,答非所问,是常见痛点。
  • 毒性或偏见:生成内容包含有害信息或偏见,必须彻底根除。

整体架构

面对上述挑战,一个健壮的RAG系统应具备怎样的分层架构?

产品架构

宏观上,产品架构分为四层:

  • 模型层:作为地基,需屏蔽不同模型(如自研序列猴子、开源模型、第三方API)的差异。同时,为支持向量跨语言检索,需专门开发跨语言Embedding模型。
  • 离线理解层:负责“后勤”工作。一是构建智能知识库,对非结构化文本(PDF、表格、图片中的文字等)进行解析、打标、入库。二是搜索增强,通过问句改写、重排等技巧提升检索精准度。
  • 在线问答层:面向用户的前线,需支持多文档、多轮对话、多模态问答,同时做好安全性和拒识,直接影响用户体验与竞争力。
  • 场景层:针对不同行业(金融、医疗、法律等)预制角色与模板,降低用户使用门槛。

技术架构

从技术实现角度看,RAG核心可拆为三部分:Query理解、检索模型和生成模型。

  • Query理解:明确用户意图,将问题“翻译”为系统能高效执行的结构化查询。涵盖Query改写、扩写、意图识别等子模块。
  • 检索模型:从知识库中“捞”出最相关信息。核心技术包括文档加载、文本转换、Embedding和向量检索。
  • 生成模型:基于Prompt和检索到的上下文,生成连贯且有价值的答案。涉及聊天系统(短期/长期记忆管理)、Prompt优化等。

简言之,RAG通过检索的“准确”与生成的“创意”互补,用知识库为大模型“打底”,确保输出有据可依。

Query理解

许多RAG系统效果不佳,根因在于Query理解。用户提问方式未必适合检索,或需从问题中提取结构化查询条件。因此,必须在此下功夫。

意图识别

判断用户想做什么。例如,用户要摘要还是具体答案?通常可用LLM决策(将各种选择塞入Prompt供其选择),也可单独训练传统分类模型(如基于Bert的意图分类器)。应用场景包括决定从哪个数据源查询、使用摘要还是搜索策略、是否同时尝试多个方案。

Query改写

原始用户问题常非最优检索词。需利用LLM进行“润色”。

  • HyDE:先让LLM根据问题生成一个“假设的”完美答案,再用该假设答案的向量检索真实文档。因假设答案的语义空间与文档更接近,可搜到更相关的内容。
  • Rewrite-Retrieve-Read:直接使用LLM改写查询。还可训练小模型(如T5)专门负责,甚至用强化学习优化改写策略,目标使改后query在后续检索和生成中表现更佳。

Query扩写

面对复杂问题,采用“分而治之”。将大问题拆解为多个具体子问题分别检索,最后整合结果。

  • Step-Back Prompting:鼓励LLM“后退一步”,先抽象出问题的更高层级概念。例如问“水温是多少”,先抽象成“水的物理性质”,再会同原问题一起检索,效果更优。
  • CoVe:Chain of Verification。让LLM自我“挑错”:先生成初步答案,围绕该答案生成验证问题,检索知识库验证,最后修正答案,赋予模型自我纠错能力。
  • RAG-Fusion:简单但有效。让LLM生成多个不同角度的子查询,并行搜索,再用“倒数排名融合”算法排序合并,覆盖更广知识面。
  • ReAct:推理与行动结合的经典范式。模型一边推理(CoT),一边执行动作(如搜索知识库),根据反馈更新推理,循环直至解决问题。

Query重构

在实际pipeline中,我们将上述思想综合,自研“Query重构”模块。只需一次请求,即可对用户复杂问题同时进行改写、拆解和拓展,挖掘深层子问题,一举解决复杂问题检索不准的痛点。

检索模型

检索模型的挑战

检索环节面临直接挑战:Embedding模型向量化是否准确?文档切分是否合理?此外,将检索内容拼接成Prompt送入大模型时,模型能否在长上下文中快速定位有用信息?《Lost in the Middle》论文指出,大模型对长上下文中间位置的信息“迟钝”,开头或结尾的信息更易被采纳。

文档加载器

负责从各种来源(.txt文件、网页、甚至YouTube字幕)加载文档数据,转化为文本和元数据。支持“懒加载”,避免一次性加载所有内容到内存。

文本转换器

加载后的文档需先“切块”。理想情况是将语义相关的片段合并,并控制块大小,确保能塞入模型上下文窗口。常见切分方式:按字符递归切分(最推荐)、按HTML/Markdown标签切分(保留结构化信息)、按代码语言切分、按Token数量切分。开源工具Chunkviz可辅助可视化,便于调整参数。

文本嵌入模型

将文本转化为向量表示的核心。理想嵌入模型应具备跨语种关联能力(如“苹果”与“Apple”),能关联长原文与短摘要、不同表述但语义相同的文本、以及问题与可能答案。更重要的是,检索结果越靠前越有用,最好能自动过滤低质量片段。

向量数据库与索引

数据处理后需建立索引以支持快速检索。常见索引结构包括:摘要索引(按顺序存储)、树索引(构建层级摘要树,便于高层检索)、关键词表索引(建立关键词到文档块的多对多映射)、以及主流的向量索引(基于向量相似度匹配)。

排序和后处理

检索结果需排序。常用策略:按相似度分数过滤、按关键词过滤、让LLM打分重排、按时间过滤、或按时间对相似度加权排序等。

生成模型

回复生成策略

检索到的文本块如何喂给大模型生成回答?常见两种思路:一种是“吃一口想一步”,每拿一个块就让模型修正一次答案;另一种是“吃饱再想”,一次性将所有块塞入Prompt,让模型一次性生成。实践中可组合使用。

Prompt拼接策略

如何将系统指令、检索文档、历史对话和用户问题组装成有效Prompt?常用字符串提示(直接拼接所有模板)和聊天提示(按消息列表组织,如SystemMessage、HumanMessage、AIMessage等)。

基于混合演示检索的上下文学习

这听起来复杂,实则在做RAG时不仅检索知识库,还检索“过往成功问答案例”(示范性示例)。将与当前问题最相似的问答对一并塞入Prompt,让模型模仿回答。但关键是如何找到最合适的示例?单一检索方法(如纯语义或纯文本)效果不佳。

我们的解法是构建“混合检索+重排”插件模块。

检索模块

采用多路召回。语义检索使用双塔模型(如OpenAI的embedding-ada),文本检索使用BM25。既能捕捉语义相似,又能确保关键词匹配,互补短板。

重排模块

多路召回结果如何融合?不同算法分数区间不同,无法直接比较。我们引入倒数排名融合算法:忽略分数,只看排名,将各算法给候选示例的排名位置综合计算新分数。鉴于大模型“偏食”开头和结尾,我们不简单按新分数排序,而是将结果“两头填”——例如排好的12345重排后变为13542,确保重要信息置于模型最容易看到的两端。

生成模块

最后,将重排后的示例、系统Prompt、长期/短期对话记录及用户当前问题,一起组装成Prompt,送入大模型生成最终答案。

引用或归因生成

让模型“有据可查”至关重要。归因即让生成答案指向知识库具体来源,提高用户信任度,也是减少幻觉的有效手段。

实现方式主要有两种。一种是模型生成:在Prompt中要求模型“每个观点后面注明来源”。该方法最直接,但对指令遵循能力要求极高,且易编造引用。另一种是动态计算:在模型流式生成时,实时将生成句子与参考源匹配(关键词或向量相似度),找出最可能来源并附上。该方法更可控,badcase修复周期短,但依赖良好匹配阈值,且假设模型文本确实来源于参考信息。

评估

开发AI应用需具备MDD(指标驱动开发)意识。理想情况是先确定场景、数据、指标、目标分值,再逐步实现。但现实中常面临场景不清、数据难洗、指标未定义。

如何量化证明RAG系统更优?需关注以下方面对性能的影响:位置偏见(大模型偏爱开头和结尾)、检索内容相关性(不相关即噪音)。

评测指标

  • Faithfulness:生成回答是否忠实于检索到的上下文?这是避免幻觉的关键。
  • Answer Relevance:生成答案是否真正解决用户问题?
  • Context Relevance:检索到的上下文是否精炼,尽可能少含无关信息?冗余越少,相关性越高。

评测方法

  • RGB:系统评估LLM在噪声鲁棒性、拒答能力、信息整合和反事实鲁棒性四项基本能力。
  • RAGAS:提供无需参考答案的评估框架,从检索、利用和生成质量三维度打分,已开源。
  • Llamalindex-Evaluating:LlamaIndex提供衡量生成和检索质量的模块,非常实用。

总结

大模型浪潮催生了大量技术细节。从Query理解到检索、生成、评估,每个环节若想在企业级应用中做到极致,都需要长期研究、实践和打磨。本文总结了我们团队过去一年在RAG实践中的核心模块,希望能带来启发。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策