跳到正文

RAG增强与生成如何衔接?

检索、增强、生成三阶段实现细节与关键技术点

原题:请详细描述检索增强生成(RAG)技术的完整工作流程,包括检索、增强和生成三个核心阶段的实现细节。

重排与优化 · 高德真题

30 秒回答

  1. 离线知识库构建(文档解析、分块、向量化)
  2. 检索阶段的双路召回策略(向量+关键词)
  3. 重排序优化
  4. 上下文拼接与提示模板设计

回答与解析

答案要点

  • 离线知识库构建(文档解析、分块、向量化)
  • 检索阶段的双路召回策略(向量+关键词)
  • 重排序优化
  • 上下文拼接与提示模板设计
  • 生成阶段的引用溯源与幻觉控制

RAG完整工作流程

一、离线知识库构建(预处理)

  • 文档解析:处理PDF/Word/网页等多格式,提取结构化文本
  • 知识分块(Chunking):按语义/固定长度/递归分割,通常512-1024 token,块间保留重叠防止断句
  • 向量化:用Embedding模型(如BGE、M3E)将文本转为稠密向量
  • 索引存储:写入向量数据库(Milvus/Faiss/Elasticsearch),建立HNSW等近似索引加速检索

二、在线检索阶段

双路召回策略

  • 向量检索:Query向量化后ANN搜索,捕获语义相似性
  • 关键词检索:BM25等传统方法补充,确保专有名词命中
  • 结果融合:RRF(Reciprocal Rank Fusion)合并两路结果

重排序优化

  • 用Cross-Encoder(如BGE-Reranker)精排Top-K候选,提升相关性

三、增强与生成阶段

  • 上下文拼接:按相关性排序检索结果,拼入Prompt模板
  • 提示工程:明确指令"基于以下参考资料回答",约束模型引用来源
  • 生成控制
    • 引用溯源:要求模型标注信息来源块
    • 拒答机制:检索置信度低时触发"信息不足"回复
    • 多轮优化:检索失败时自动扩展Query重写

关键工程细节

环节 典型选型 注意点
Embedding BGE-large-zh 领域适配需微调
向量DB Milvus 考虑增量更新与版本管理
重排序 BGE-Reranker-v2 计算成本高,控制候选规模
幻觉控制 引用+置信度阈值 不能100%消除,需人工兜底

高德场景下,地图POI、实时路况等结构化数据需特殊处理:先SQL过滤再向量检索,混合查询提升精度。

口语版讲法(约4分钟)

  • RAG本质是给大模型配外挂知识库
  • 离线建库的坑:分块和向量化
  • 在线检索:混合检索加重排才是常态
  • 生成阶段:引用溯源和拒答机制
  • 落地风险:前提和取舍

这道题问RAG的工作流程,其实本质是在问怎么把大模型的知识边界扩展出去,让它能回答训练数据里没有的东西。我理解RAG不是单一技术,而是一套工程组合拳,核心就三件事:先把外部知识存成索引,再根据问题准确定位到相关片段,最后让模型基于这些片段生成答案,同时还要避免它胡编。

先说离线建库。这一步很多人只关注选哪个向量数据库,但我认为真正的难点在分块和向量化。分块不是简单按512 token切,要结合业务场景。比如客服退款场景,一个订单的完整上下文往往跨越多个段落,固定长度切分会把因果链条切断。我倾向用语义分块加滑动窗口,块间是否保留重叠、保留多少都作为候选变量,用同一评测集验证边界证据是否更完整。Embedding模型也不是通用的,如果处理的是企业合规文档,大量专业术语和内部缩写,通用 BGE 效果可能不好,需要领域适配微调。

然后是检索阶段。这里有个常见误区,以为纯向量检索就够了。实际落地中,向量检索对语义相似性很敏感,但遇到精确匹配的场景,比如订单号、错误码,向量检索反而会跑偏。所以线上我一般用 混合检索,向量走 ANN 搜语义,关键词走 BM25 搜精确匹配,最后用 RRF 融合排序。但这样就够了吗?不够。融合后的Top-K候选里,可能还有一两篇不相关的,所以我会再加一层 重排,用 Cross-Encoder 精排一下。重排计算成本高,所以只对Top-50做,控制延迟。这里有个坑:重排模型本身也有偏差,如果训练数据分布和线上不一致,排序可能反而变差,所以上线前一定要用线上query回测。

接下来是生成阶段。这一步最关键的工程细节是上下文拼接和提示设计。我会按相关性从高到低把检索结果拼进Prompt,但不会全塞,信息太多模型会迷失,我一般限制在3到5个片段,每个不超过500 token。提示模板里明确写“请基于以下参考资料回答”,并且要求模型标注引用来源,比如“根据文档第X块”。另外,我还会加一个置信度阈值:如果检索结果和query的相似度低于某个值,直接触发拒答机制,返回“当前信息不足以回答”,而不是让模型硬猜。这能显著降低 幻觉 风险。

不过,RAG不是万能的。它的前提是知识库质量够高,如果文档本身就有错,或者分块把关键信息切碎了,检索再强也白搭。所以我会把RAG看成一种“快速扩展知识边界”的方案,适合知识频繁更新的场景,比如实时政策、产品手册;但如果是需要深度推理或常识性知识,我更倾向结合微调或知识图谱。

总结下来,RAG落地的核心不是哪个环节最酷,而是整个链路的一致性:从分块策略、Embedding选型、检索融合,到生成控制,每一步都要对齐业务场景。

关键一句:RAG的前提是知识库质量,不适合深度推理场景。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个电商客服助手,用户问“上次那个订单发货没”,你首先得从知识库里找到他的订单信息。能从头到尾讲一下,从文档处理到最终回答,RAG是怎么一步步干的吗?

  2. 问法 2 · 层层追问

    RAG你熟悉吧?先说说你一般怎么把知识库准备好……然后用户提问了,你怎么把相关内容捞出来……捞出来之后又怎么拼给模型让它回答?

  3. 问法 3 · 直球架构

    请详细描述RAG的完整工作流程,包括离线知识库构建、检索阶段的向量与关键词双路召回、重排序,以及增强生成阶段的上下文拼接和幻觉控制,每个环节怎么实现?

同模块相关题目