跳到正文

RAG 怎么提升生成准确性?

通过检索外部知识增强 LLM 的事实一致性

原题:请解释什么是RAG(Retrieval-Augmented Generation),并说明它如何通过引入外部知识来提升语言模型的生成准确性和事实一致性。

RAG基础 · 字节真题

回答与解析

RAG核心定义

RAG(检索增强生成)是一种将外部知识检索大语言模型生成结合的技术架构。核心思想:模型生成答案前,先从外部知识库中检索相关信息作为上下文,再基于这些证据进行生成。

标准工作流程

  1. 索引阶段:文档切分 → Embedding模型编码 → 存入向量数据库
  2. 检索阶段:用户Query向量化 → 相似度检索Top-K相关片段
  3. 生成阶段:将"检索结果 + 原始Query"拼接输入LLM → 生成最终回答

解决的核心问题

问题 传统LLM RAG方案
知识幻觉 参数化记忆,容易"编造" 检索提供事实依据,可溯源
知识时效性 训练后无法更新 知识库动态更新,无需重训模型
领域适配 微调成本高 零样本接入私有知识

关键优化点

  • 检索质量:Embedding模型微调、混合检索(向量+关键词)、重排序(Rerank)
  • 上下文组织:片段截断策略、多轮检索、检索结果去重融合
  • 生成控制:提示词约束模型严格基于检索内容回答,拒绝无关Query

与微调对比

RAG优势在于知识可解释、更新即时、成本可控;适合知识频繁变更、需溯源的场景。微调更适合改变模型行为风格或需要内化复杂推理模式的任务。

学习建议

建议系统学习该知识点

口语版讲法(约4分钟)

  • RAG本质是给LLM配个参考书
  • 工作流程:建索引、查、拼起来生成
  • 落地关键:检索质量决定上限
  • 和微调的边界:更新快用RAG,改风格用微调
  • 风险:检索失败反而带偏模型

这道题问的是RAG,其实本质上是在问:当大模型的知识不够用时,怎么低成本地给它外挂一个知识库。RAG的核心思想很简单,就是给LLM配一本参考书,让它生成前先翻书找证据,而不是全靠记忆瞎编。

具体流程分三步。第一步是建索引,把文档切碎,用 Embedding 模型转成向量存到 Vector Database 里。切分这里就有个坑:固定字数切容易把语义切散,我一般会按段落或小节切,结合滑动窗口保留上下文。第二步是检索,用户的问题也转成向量,去库里做相似度搜索,拿回Top-K个片段。第三步是生成,把检索到的片段和原始问题拼成prompt喂给LLM,让它基于这些证据回答。

这里最关键的其实是检索质量,它决定了生成的上限。如果检索回来的东西不相关,LLM再强也白搭。所以落地时我会特别关注两点:一是 Hybrid Search,把向量检索和 BM25 关键词检索结合起来,因为向量擅长语义匹配但可能漏掉精确词,关键词正好互补;二是 重排,初检索召回几百条,再用 Cross-Encoder 精排一遍,把最相关的前几条送进生成,能显著减少噪声。

说个真实业务场景吧,比如电商客服的退款政策问答。用户问“七天无理由退货的运费谁出”,如果只用LLM微调,模型可能记错或者把旧政策当答案。用RAG的话,我把最新版的售后规则文档切成块建索引,每次检索到对应条款,模型直接引用条款回答,准确率能到95%以上,而且政策更新只需替换文档,不用重新训练。

那RAG和微调的边界怎么划?我的理解是:知识频繁更新、需要溯源、对幻觉零容忍的场景,优先RAG,比如企业SOP、合规文档、客服知识库。需要改变模型行为风格、或者内化复杂推理模式的任务,更适合 LoRA 微调,比如把模型调成客服语气。但实际落地常常是两者一起上:微调让模型学会用检索工具,RAG提供最新知识,互不冲突。

不过RAG也不是银弹,有个常见失败场景是检索回来的内容冲突或过时,反而把模型带偏。所以我上线前会特别关注 Faithfulness 评估,看生成内容是忠实于检索结果还是自己脑补,如果忠实度低就得调重排或加 Self-RAG 让模型自己判断要不要引用。

所以我会把RAG看作一个工程框架,它的核心价值是低成本、可回溯、易更新,但前提是检索质量得过硬。如果检索底子没打好,RAG反而比纯LLM还差。我更倾向先建好知识库的质量基线,再考虑上RAG。

关键一句:RAG的常见失败场景——检索结果冲突或过时,导致模型被带偏,需要用Faithfulness评估和Self-RAG机制来兜底。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设我们做一个智能客服系统,用户问‘我的订单到哪了’,模型有时会瞎编物流信息。如果让你用RAG来解决,你会怎么设计?

  2. 问法 2 · 层层追问

    大模型生成答案容易幻觉,你有什么办法缓解?……如果靠外部知识,怎么把知识引进来?……那检索和生成怎么衔接,才能保证答案准确?

  3. 问法 3 · 直球架构

    解释一下RAG的原理,它怎么通过检索外部知识来提升语言模型的事实一致性?工作流程分哪几步?关键优化点有哪些?

同模块相关题目