跳到正文

专业领域RAG数据与检索优化?

数据预处理、检索优化、生成改进三大环节详解

原题:请设计一个专业领域的RAG(Retrieval-Augmented Generation)系统架构,包括数据预处理、检索优化、生成改进等关键环节

重排与优化 · 字节真题

30 秒回答

  1. 分模块阐述数据预处理(解析、分块、质量过滤)、检索层(多路召回、重排序)、生成层(上下文压缩、引用溯源)的设计
  2. 体现领域适配思路(领域术语表、专用Embedding)
  3. 提到评估闭环和持续优化机制
  4. 避免只讲基础RAG流程,要有工程化深度

回答与解析

答案要点

  • 分模块阐述数据预处理(解析、分块、质量过滤)、检索层(多路召回、重排序)、生成层(上下文压缩、引用溯源)的设计
  • 体现领域适配思路(领域术语表、专用Embedding)
  • 提到评估闭环和持续优化机制
  • 避免只讲基础RAG流程,要有工程化深度

一、数据预处理层

文档解析与清洗

  • 多格式统一:PDF/Word/网页用专用解析器(如MinerU、Marker),保留表格结构和层级标题
  • 领域术语标准化:建立专业词表,做实体链接和指代消解
  • 质量过滤:去重、低质量页面过滤、敏感信息脱敏

智能分块策略

  • 语义分块:用领域微调的小模型做句子边界识别,非固定长度
  • 结构感知:按章节/条款切分,保留父子层级关系用于后续递归检索
  • 多粒度冗余:同一内容生成256/512/1024三种chunk,适配不同查询深度

二、检索优化层

多路召回

召回通道 适用场景 实现方式
向量检索 语义相关 领域微调Embedding + HNSW索引
关键词检索 精确匹配 BM25 + 领域同义词扩展
结构化检索 条件过滤 元数据标签(时间、版本、文档类型)

重排序与精排

  • 交叉编码器做精排,领域数据微调(如bge-reranker)
  • 引入用户反馈信号(点击、停留时长)做在线学习

三、生成改进层

上下文工程

  • 动态窗口:根据问题复杂度选择top-k,复杂问题用递归检索扩展上下文
  • 引用溯源:生成时强制标注来源chunk_id,支持答案验证

生成策略

  • 领域Prompt模板:定义输出格式(如法律场景的法条引用格式)
  • 不确定性处理:检索置信度低时触发"需补充信息"话术,而非幻觉生成

四、评估与迭代

  • 离线:Recall@K、答案相关性(LLM-as-judge)
  • 在线:用户满意度、答案采纳率、人工标注badcase回流
  • 持续更新:增量索引+版本管理,支持数据回溯

口语版讲法(约4分钟)

  • 一句话定位:RAG落地是系统工程,不是搭积木
  • 预处理:结构化保留与多粒度切分
  • 检索:混合召回加重排,划清场景边界
  • 生成:引用溯源与不确定性处理
  • 评估闭环与持续优化

这道题其实问的是,当你要把一个专业领域的RAG系统真正用起来的时候,你到底要解决哪些工程问题。不是搭积木,是系统工程。我重点讲几个环节。先说数据预处理。很多团队上来就分块,但专业文档最大的坑是结构丢失。比如法律合同里的条款层级、表格里的数值对应关系,如果纯文本切碎,后面检索就找不准。我的做法是,先用专门的解析器把PDF、Word这些格式统一处理,保留标题层级和表格结构,再做实体链接和指代消解,比如把“本协议”替换成具体合同名。分块策略上,我倾向语义分块加结构感知,按章节切分,同时保留父子关系,这样递归检索时能拿到上下文。还有一个细节,我会对同一内容生成256、512、1024三种粒度的chunk,适配不同查询深度,短查询用细粒度,长查询用粗粒度。当然,这么做的前提是你的存储和索引能撑住多粒度冗余。再说检索。我一般不做单一召回,而是混合检索:向量检索抓语义,关键词检索抓精确匹配,比如订单号、错误码这些必须精确命中。结构化检索用来过滤元数据,比如只查某个时间段的文档。你问向量和关键词怎么选?其实看场景:语义相关用向量,精确匹配用关键词,真正落地是两条路一起走。检索完还有重排,我用领域微调的交叉编码器做精排,同时引入用户反馈信号,比如点击停留时长,做在线学习。这里有个坑:如果领域数据量不够,微调Embedding和重排器效果反而会变差,所以我会先评估数据量,不够就先用通用模型加少量领域样本做快速适配。生成层,我重点做两件事。一是上下文工程,根据问题复杂度动态调整top-k,复杂问题用递归检索扩展上下文,同时强制生成时标注来源chunk id,方便验证。二是生成策略,领域Prompt模板定义输出格式,比如法律场景必须精确引用法条。还有一个关键:当检索置信度低时,我不让模型硬生成,而是触发“需补充信息”话术,避免幻觉。简单说,我宁可不答,也不错答。评估闭环我会做两层:离线用Recall@K和答案相关性,用LLM-as-judge打分;在线看用户满意度和答案采纳率,人工标注badcase回流。持续更新上,增量索引加版本管理,支持数据回溯。其实还有一个更前沿的方向,就是让模型在生成过程中主动判断是否需要额外检索,比如用Self-RAG或者Agentic RAG,这样能减少无效检索,但实现复杂度高,需要平衡延迟和效果。

关键一句:让模型在生成过程中主动判断是否需要额外检索,比如Self-RAG或Agentic RAG,能减少无效检索但实现复杂。

面试官还可能这样问

  1. 问法 1 · 场景切入

    我看你做过电商客服系统,假设用户问“我的订单为什么还没发货”,我们得从商品、物流、政策多个文档里找答案。你会怎么设计一个RAG系统来搞定这种多源检索和准确生成?

  2. 问法 2 · 层层追问

    专业领域的问答系统,你一般怎么从文档里找答案?……那如果文档格式很乱,有PDF、表格、条款呢?……检索出来一堆结果,怎么挑出最相关的?……最后生成时怎么避免幻觉,还能让用户信服?

  3. 问法 3 · 直球架构

    请直接设计一个面向专业领域的RAG系统架构,重点讲数据预处理(解析、分块、质量过滤)、检索优化(多路召回、重排序)和生成改进(上下文压缩、引用溯源)三个环节的具体方案。

同模块相关题目