领域 RAG 架构如何控幻觉?
医疗/法律场景下数据预处理、检索与生成优化方案
原题:请设计一个基于专业领域知识(如医疗或法律)的智能助手RAG系统架构,包括数据预处理、检索优化、生成优化等关键环节的具体实施方案。
重排与优化 · 字节真题
30 秒回答
- 数据预处理:文档解析、结构化抽取、质量过滤、领域术语标准化
- 检索优化:混合检索(向量+关键词)、重排序、查询改写、多粒度索引
- 生成优化:领域Prompt工程、引用溯源、幻觉检测、人机协同审核
- 系统层面:离线在线分离、缓存策略、反馈闭环
回答与解析
答案要点
- 数据预处理:文档解析、结构化抽取、质量过滤、领域术语标准化
- 检索优化:混合检索(向量+关键词)、重排序、查询改写、多粒度索引
- 生成优化:领域Prompt工程、引用溯源、幻觉检测、人机协同审核
- 系统层面:离线在线分离、缓存策略、反馈闭环
整体架构
用户Query → 查询理解 → 混合检索 → 重排序 → 上下文组装 → 领域生成 → 后处理 → 输出
↓ ↑
离线知识库构建(文档解析→分块→向量化→索引)
一、数据预处理(以法律场景为例)
文档解析层
- 多格式支持:PDF/OCR识别表格、Word修订痕迹处理、扫描件版式还原
- 结构化抽取:用LayoutLM或专用模型提取条款层级(章-节-条-款)、案件要素(案号、当事人、判决结果)
质量与标准化
- 领域术语对齐:建立法条同义词表(如"违约金"="滞纳金"需区分场景)
- 时效性标记:标注法律废止/修订状态,设置失效预警
分块策略
- 多粒度索引:原文段落(粗粒度)+ 法条拆解(细粒度)+ 问答对(应用层)
- 语义完整性:按条款边界切分,避免"第X条"跨块断裂
二、检索优化
混合检索
| 方式 | 实现 | 适用场景 |
|---|---|---|
| 稠密向量 | 领域微调Embedding(如法律BERT) | 语义相似、概念匹配 |
| 稀疏向量 | BM25 + 法条编号精确匹配 | 条款号、关键词命中 |
| 知识图谱 | 实体链接(当事人-案由-法条关联) | 复杂关系推理 |
查询侧优化
- 意图识别:区分"法条查询"/"类案参考"/"流程咨询"
- 查询扩展:用LLM生成同义表述(如"工伤认定"→"职业病鉴定")
重排序
- 交叉编码器精排(如法律领域微调的ColBERT)
- 时效性加权:新法优先;地域匹配:当事人所在地法规优先
三、生成优化
Prompt工程
角色:资深法律顾问
约束:
- 仅基于提供的{references}回答,不确定时明确告知
- 引用格式:[《法规名》第X条]
- 区分"现行有效"与"已废止"条款
关键机制
- 引用溯源:生成内容强制关联检索片段,支持点击跳转原文
- 置信度阈值:检索分数过低时触发"知识库未覆盖"提示,拒答或转人工
- 幻觉检测:用NLI模型校验生成内容与检索片段的一致性
人机协同
- 高风险场景(医疗诊断/法律意见)设置审核节点
- 用户反馈收集:👍/👎 → 用于检索模型和生成模型的迭代
四、工程落地要点
- 离线在线分离:知识库更新走离线Pipeline,不影响在线服务
- 缓存策略:热门法条预加载,相似Query结果缓存
- 监控看板:检索命中率、生成引用率、用户满意度三联指标
口语版讲法(约4分钟)
- RAG本质是知识边界问题
- 数据预处理:分块策略和术语对齐
- 检索优化:混合检索加重排
- 生成优化:引用溯源和幻觉检测
- 工程落地:离线在线分离和缓存
这道题问的是专业领域RAG系统怎么搭,本质上是在考你怎么把通用RAG的能力约束到知识边界内,保证输出准确、可溯源,同时兼顾效率。我以法律场景为例,具体说一下我的方案。
先说数据预处理。这块最核心的不是怎么切分,而是分块策略的取舍。固定切分简单,但法律条款跨块就会丢语义,所以我倾向按段落边界切,保证每个块语义完整。同时我会做多粒度索引:原文段落做粗粒度,拆解后的法条做细粒度,再额外维护一批问答对做应用层,这样不同查询能命中不同粒度的块。还有一个前提是术语对齐,比如“违约金”和“滞纳金”在法律场景里不能简单等同,得建同义词表区分场景。时效性标记也很重要,标注每条法规的生效废止状态,否则检索到旧法就出大问题。
检索优化这块,我会上Hybrid Search,把稠密向量和稀疏向量结合起来。稠密向量用领域微调的Embedding,比如法律BERT,处理语义匹配;稀疏向量用BM25加法条编号精确匹配,处理条款号这种精确查询。为什么这么组合?因为法律场景里用户可能搜“第X条”,向量模型对这种精确数字不敏感,但BM25能直接命中。说白了,没有哪种检索方式能覆盖所有场景,落地一定是混合的。然后重排序用领域微调的Cross-Encoder,比如法律ColBERT,同时加权时效性和地域匹配。举个例子,用户问“北京地区工伤认定流程”,我会优先排北京的法规,新法在前。
生成优化这块,核心是引用溯源和幻觉检测。我会在Prompt里强制要求引用格式,比如[《劳动法》第X条],生成内容必须关联检索片段,用户能点击跳转原文。同时设置信度阈值,检索分数太低就拒答或转人工,避免胡编。幻觉检测用Faithfulness模型校验生成内容和检索片段的一致性,不一致就重新生成或提示用户。这里有个坑:不要盲目相信模型生成的引用,必须做交叉验证。
工程落地层面,我倾向离线在线分离,知识库更新走离线Pipeline,不影响在线服务。缓存策略也很关键,热门法条预加载,相似Query结果缓存,能大幅降低延迟。监控看板我会盯着检索命中率、生成引用率和用户满意度三个指标,形成反馈闭环。
其实还有一个延伸点:当知识库频繁更新时,增量更新和检索质量之间怎么平衡?比如新法出台,旧法废止,怎么保证检索实时性又不影响召回?这块我有些实践经验,可以详细展开。
关键一句:知识库频繁更新时,增量更新与检索质量的平衡问题。
面试官还可能这样问
- 问法 1 · 场景切入
假设我们要做一个法律咨询助手,用户问‘我合同违约了怎么办’,你从一堆法条和判例里捞内容。第一个环节就是数据预处理,那些PDF判决书、带修订的法律条文,你是怎么把它变成能用检索的东西?
- 问法 2 · 层层追问
RAG系统的关键是检索质量。你一般怎么保证召回来的文档是相关的?……如果用户问‘工伤认定’,数据库里既有‘工伤保险条例’又有‘职业病防治法’,你怎么让最准的那个排前面?……再具体点,光靠向量检索不够吧?结合关键词或者知识图谱怎么做?
- 问法 3 · 直球架构
设计一个医疗领域的RAG系统,数据预处理、检索优化、生成优化三个环节你分别怎么实现?重点说检索优化里的混合检索和重排序方案,还有生成优化里怎么避免幻觉。