医疗法律 RAG 合规追溯
医疗/法律 RAG 的合规、权限、证据追溯和拒答
原题:请详细阐述如何为医疗或法律等专业垂直领域构建一个完整的RAG(检索增强生成)系统链路,包括关键组件设计、领域知识处理、检索策略优化等核心环节。
知识图谱 · 字节真题
30 秒回答
- 领域知识结构化与非结构化数据的统一处理方案
- 多路召回策略(向量+关键词+知识图谱)的设计与融合
- 查询意图识别与改写机制
- 专业术语的Embedding适配与微调方案
回答与解析
答案要点
- 领域知识结构化与非结构化数据的统一处理方案
- 多路召回策略(向量+关键词+知识图谱)的设计与融合
- 查询意图识别与改写机制
- 专业术语的Embedding适配与微调方案
- 答案生成的事实性校验与溯源机制
一、整体架构设计
用户查询 → 查询理解层 → 多路检索 → 重排序 → 上下文组装 → LLM生成 → 后校验
二、关键组件详解
1. 领域知识处理(最核心)
数据分层
- 结构化:药品库、疾病编码、法条条款 → 构建知识图谱(Neo4j/自研)
- 半结构化:病历模板、合同范本 → 抽取标准化字段
- 非结构化:医学文献、判例文书 → 按语义切块(医疗按就诊流程切,法律按争议焦点切)
领域Embedding微调
- 用领域语料(PubMed/裁判文书)继续预训练BERT,或基于LLM构造对比学习数据
- 关键:术语对齐,如"心肌梗死"和"MI"需映射到同一向量
2. 检索策略:多路召回+精排
| 召回通道 | 适用场景 | 实现 |
|---|---|---|
| 稠密向量 | 语义相关、同义表达 | 微调后的Embedding+Faiss/Milvus |
| 稀疏向量(BM25) | 精确匹配、专有名词 | Elasticsearch |
| 知识图谱 | 实体关系、推理查询 | 实体链接+子图检索 |
| 倒排索引 | 时效性筛选、地域过滤 | 元数据索引 |
融合策略:RRF(Reciprocal Rank Fusion)或轻量模型打分,避免单路失效
3. 查询理解与改写
- 意图识别:区分"诊断建议"vs"用药禁忌"(医疗)、"法条查询"vs"类案检索"(法律)
- Query扩展:用领域词典做同义词扩展,如"新冠"→"COVID-19/新型冠状病毒肺炎"
- 多轮澄清:置信度低时主动追问(如"您指的是刑法第X条还是民法第X条?")
4. 生成与校验
- 上下文压缩:用LLM摘要长文档,保留关键证据片段
- 引用溯源:强制要求模型输出引用来源,用户可点击验证
- 事实性校验:医疗用UMLS知识库做实体一致性检查;法律用法条时效库过滤失效条款
三、领域特殊考量
| 维度 | 医疗 | 法律 |
|---|---|---|
| 时效性 | 诊疗指南版本管理 | 法条修订追踪、地域差异 |
| 权威性 | 多源证据等级标注 | 判例效力层级(指导案例>参考案例) |
| 风险管控 | 风险提示+人工复核触发 | 执业资质校验+边界拒答 |
四、迭代优化闭环
线上收集bad case → 归因(检索漏召/排序错位/生成幻觉)→ 针对性补充数据或调整策略
口语版讲法(约4分钟)
- 本质是领域知识做结构化+多路召回
- 知识处理:结构化/半结构化/非结构化分层
- 检索策略:向量+关键词+知识图谱多路融合
- 生成校验:引用溯源+事实性检查
- 落地风险与迭代
这道题其实问的是,当RAG落到医疗、法律这种高价值、高风险的垂直领域时,到底要怎么搭一条能真正跑通的链路。核心已经不是通用RAG那套“文档切一切、向量存一存、召回来拼Prompt”了,而是怎么把领域知识的结构化、查询的复杂意图、还有最终答案的可靠性串起来。
我先说知识处理这块,这是最花功夫的。通用RAG里往往一刀切Chunk,但垂直领域不行。我的做法是把数据分成三层来对待:结构化数据,比如药品库、法条,直接做成Knowledge Graph,存实体和关系;半结构化数据,像病历模板、合同范本,我会抽成标准字段,比如病历里的主诉、现病史,合同里的当事人、标的额;非结构化数据,比如医学文献、裁判文书,才做语义切块。切块策略也得按场景来,医疗我倾向按就诊流程切,比如主诉、检查、诊断、治疗各一段;法律按争议焦点切,比如“是否构成违约”“赔偿金额计算”各一段。这样检索时命中率更高。
再一个,领域Embedding不能直接用通用模型。我会拿PubMed或者裁判文书继续做SFT,或者构造对比学习数据,让“心肌梗死”和“MI”映射到相近向量。这是个大前提,如果直接拿通用Embedding去搜,专有名词匹配会非常差。
说回检索策略。我倾向于多路召回加精排,而不是单靠向量。具体来说,我会开三路:第一路是稠密向量,用微调后的Embedding配合Faiss做ANN,解决语义相似但字面不同的问题;第二路是BM25,走精确关键词,专治药品名、法条序号这种必须精确匹配的;第三路是知识图谱,走实体链接加Relation Extraction,比如用户问“阿司匹林和布洛芬能一起吃吗”,知识图谱直接返回药物相互作用关系。三路结果用RRF融合,简单有效。如果只靠向量,精确匹配会漏;只靠关键词,同义表达会漏,说白了,真正落地都是混合着上。
查询理解这块也不能省。我会先做意图识别,区分用户是想查诊断建议还是用药禁忌,或者查法条还是找类案。然后做Query扩展,用领域词典把“新冠”扩展成“COVID-19/新型冠状病毒肺炎”。如果意图置信度低,我会主动追问,比如“您指的是刑法第X条还是民法第X条?”,这样能减少后面检索的噪音。
生成阶段,我特别关注事实性校验和引用溯源。我会强制模型输出时带上来源索引,用户能点过去看原文。同时做实体一致性检查,医疗场景用UMLS知识库,看生成结果里的药物、症状是不是匹配;法律场景用法条时效库,过滤掉已废止的条款。这里有个坑:如果知识库里混了过时的诊疗指南或废止的法条,生成结果直接会错。所以上线前我会特别关注知识库的版本管理和权威性标注,比如给每条数据打上“来源等级”和“有效期”,检索时按需过滤。
最后,落地后我会建一个bad case闭环。线上收集错误案例,归因到是检索漏召、排序错位还是生成幻觉,然后针对性补数据或调策略。
另外,当用户问“我该用什么药”这种涉及诊断的问题时,我倾向在系统层面设置边界:直接拒答,或者输出前置风险提示,并触发人工复核。这个边界怎么划、怎么落地,其实挺值得细聊的。
所以整体上,我更愿意把垂直领域RAG看成一套“知识结构化+多路检索+强校验”的组合,而不是单纯的检索加生成流水线。
关键一句:涉及诊断或法律建议的敏感问题,系统应设置拒答或人工复核边界。
面试官还可能这样问
- 问法 1 · 场景切入
假设咱们要给一家律所做个智能法律助手,他们有成堆的判例和法条,用户问“正当防卫怎么认定”,系统得从几百份文书里找到最贴切的。你从零开始搭这个RAG链路,会怎么设计关键组件,尤其是领域知识怎么处理?
- 问法 2 · 层层追问
垂直领域的RAG你了解吧?……如果用户问的术语很专业,比如“心肌梗死”和“MI”在检索里怎么对齐?……那多路召回你怎么融合,避免漏掉关键信息?……最后生成答案怎么保证不胡说八道?
- 问法 3 · 直球架构
详细说说为医疗或法律这类领域构建完整RAG系统链路的方案,包括如何结构化与非结构化处理领域知识、多路召回策略的设计与融合、查询意图识别与改写,以及答案的事实性校验和溯源机制。