RAG 怎么提升生成质量?
检索增强生成原理,外部知识如何减少幻觉
原题:什么是检索增强生成(RAG),它如何通过引入外部知识来提升大语言模型的生成质量和事实准确性?
RAG基础 · 字节真题
回答与解析
RAG核心定义
RAG(Retrieval-Augmented Generation)= 检索 + 生成。不是让模型硬背知识,而是按需检索外部知识库,把相关文档塞进Prompt,让模型基于"开卷考试"作答。
标准流程(三阶段)
| 阶段 | 关键动作 | 技术要点 |
|---|---|---|
| 索引 | 文档切分→Embedding→入库 | 分块策略(按语义/固定长度)、向量化模型选型 |
| 检索 | Query向量化→相似度搜索→TopK召回 | 向量数据库(Milvus/Faiss)、多路召回(向量+关键词) |
| 生成 | 拼接Prompt→LLM生成答案 | 上下文压缩、引用溯源、拒答机制 |
为什么能提升质量?
- 事实准确性:知识库可维护、可溯源,直接引用原文降低幻觉
- 知识时效性:不用重新训练,更新文档即可
- 领域适配:低成本接入私有知识,比微调便宜10-100倍
- 可解释性:答案从哪来一目了然
关键优化点(加分项)
- 检索侧:Query改写、多轮检索、重排序(Cross-Encoder精排)
- 生成侧:上下文窗口压缩、让模型先判断"是否足够回答"
- 工程侧:缓存热点Query、检索失败兜底策略
一句话总结
RAG = 给LLM配个"外挂硬盘",需要时查资料,不用死记硬背,答不准还能甩锅给知识库。
学习建议
建议系统学习该知识点
口语版讲法(约4分钟)
- 一句话定位:RAG解决的是大模型知识不新、不私有、不可控的问题
- 边界划分:RAG适合事实更新和知识注入,SFT适合行为风格和稳定性
- 真实业务场景:客服退款查询,结合订单状态和退款政策
- 落地风险:检索质量、知识库质量、模型推理能力是前提
- 工程师姿态:RAG是外挂硬盘,模型是表达助手,要平衡检索和生成
这道题其实问的是,大模型落地时怎么解决知识不新、知识不私有、答案不可控这三个问题。RAG不是简单给模型加个搜索,而是把事实性知识从模型参数里拆出来,放到一个可更新、可追溯的外部系统里。
具体流程分三步:先把文档切碎转成向量存到 Vector Database,用户提问时把问题也转成向量去库里搜最相关的几段,最后把搜到的内容拼到Prompt里让模型基于这些资料生成答案。说白了就是给模型开卷考试,不用它死记硬背。
那它为什么能提升质量和准确性?首先,知识库可以随时更新,不像模型参数知识有截止时间。比如问最新退款政策,RAG查文档就行,不用重新训练。其次,领域适配成本低,企业把内部SOP、产品手册、合同条款一放,模型就能用私有知识回答,比微调便宜很多。还有可解释性,答案能追溯到具体文档片段,用户质疑时能说'这是根据某条政策第几款来的'。
这里有个边界划分问题。RAG和 SFT 不是二选一,而是各管一摊。RAG更适合解决事实更新和知识注入,比如今天改了个满减规则,明天生效,改文档就行;SFT更适合改变模型的行为风格和任务格式,比如让模型学会客服话术的礼貌语气。真正落地常常是RAG加SFT一起上,RAG保证事实准,SFT保证表达稳。
举一个具体的客服退款场景。用户问'退款什么时候到账',如果纯靠模型参数,它可能给一个通用答案说'3到5个工作日'。但RAG会先查这个用户的订单状态,是已退款还是审核中,再查支付渠道的到账规则,微信是T+1还是T+2,最后查最新的退款政策,有没有因为大促调整过时效。然后把这三段信息拼起来,生成一个针对当前用户的回答。这里价值不只是答准,政策改了能快速生效,出了问题能查来源,合规审核也容易。
但落地时有个前提:检索结果本身必须靠谱。如果知识库质量差,比如文档切分不合理、向量模型没选好,搜出来的东西牛头不对马嘴,那RAG就是把脏数据更快喂给模型。常见失败场景是,用户问了一个需要多步推理的问题,但检索只返回了零散片段,模型推理能力弱就答错了。所以我上线时会特别关注检索的召回率,用 Hybrid Search 把关键词和向量结合起来,再做个 重排 把最相关的排前面。
还有一个点值得注意:当知识库频繁更新时,索引的实时性和一致性很难平衡。新增简单,但修改和删除怎么处理?我倾向用软删除加异步重建,避免原地动图索引导致检索质量崩掉。
总的来说,我会把RAG看成给LLM配了个外挂硬盘,需要时查资料,不用死记硬背。检索负责提供事实,生成负责组织表达。我更倾向在工程上把检索质量和生成约束都管好,而不是迷信任何一个单一方案。
关键一句:知识库频繁更新时,索引实时性和一致性的平衡问题
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个智能客服系统,用户问“你们公司总部在哪”,你希望模型回答时能引用官网上的最新地址,而不是靠它自己的训练数据。你会怎么设计这个流程?
- 问法 2 · 层层追问
大模型生成答案时,你怎么保证它不胡说八道?……如果让它先查资料再回答呢?……具体来说,资料怎么存、怎么查、怎么和生成结合?
- 问法 3 · 直球架构
说说RAG的核心思想。它怎么通过检索外部知识来提升生成的事实准确性?请从索引、检索、生成三个阶段展开,并指出每个阶段的关键技术点。