跳到正文

医疗法律RAG架构怎么搭?

医疗/法律场景下检索、生成与知识更新机制详解

原题:针对医疗或法律等专业领域,设计一个基于检索增强生成(RAG)的智能助手系统,说明其整体架构、检索模块、生成模块及知识更新机制。

RAG基础 · 字节真题

回答与解析

整体架构

四层设计:

  • 数据层:领域知识库(法规/指南/病例)、外部数据源、用户交互日志
  • 检索层:多路召回 + 精排,输出Top-K相关片段
  • 生成模块:基座模型 + 领域Prompt + 引用约束
  • 应用层:对话管理、权限控制、审核反馈

检索模块设计

多路召回

  • 向量检索:Dense Embedding(领域微调,如E5-Mistral-medical)
  • 关键词检索:BM25 + 领域同义词词典(如ICD-10编码映射)
  • 结构化检索:SQL/图查询针对法条层级、药品属性

精排与过滤

  • Cross-Encoder重排序
  • 时效性过滤(法律:优先现行有效;医疗:优先近3年指南)
  • 权威性分级(法规 > 专家共识 > 文献)

生成模块

Prompt设计

你是{领域}助手,基于以下参考资料回答:
[检索片段,带来源标注]

约束:1) 不确定时明确说明 2) 引用具体条款/文献 3) 禁止编造

安全机制

  • 拒答策略:超范围问题(如具体诊疗建议)转人工
  • 引用溯源:输出必须关联检索片段ID

知识更新机制

场景 方案 示例
增量更新 新文档向量化入库 新发布诊疗指南
失效标记 版本标签 + 生效时间字段 法律修订/药品退市
全量重建 季度离线重建索引 Embedding模型升级
实时修正 运营后台人工标注 用户反馈纠错

关键:建立知识版本表,记录每条的生效/失效时间,检索时过滤。


领域特殊考量

  • 医疗:多模态支持(影像报告+文本),严格遵循循证等级
  • 法律:地域适配(不同法域),区分"参考案例"与"强制性条文"

学习建议

建议系统学习该知识点

口语版讲法(约4分钟)

  • 一句话定位:本质是知识库与LLM的边界划分
  • 检索模块:多路召回+重排,边界与前提
  • 生成模块:Prompt约束与引用溯源
  • 知识更新:增量与软删除,风险点
  • 收尾:取舍与可延伸点

这道题其实本质在问一件事:专业领域里,知识库和模型能力之间的边界怎么划分。RAG不是简单的检索加生成,它要解决的是模型不知道、知道但不准、知道但过时这三个问题。我下面从架构、检索、生成、更新四个维度讲一下我的设计思路。

先说整体架构。我一般会分四层:数据层、检索层、生成层、应用层。数据层不只是存文档,还包括用户交互日志,用来做后续的反馈闭环。检索层我坚持混合检索,不只用向量。生成层核心是让模型学会说「我不知道」,而不是瞎编。应用层负责权限、审核、对话管理。

检索模块我重点讲。很多人一上来就用 Hybrid Search,但它的前提是你的标注数据够好,不然权重调不准。我的做法是:先做多路召回,向量检索和 BM25 关键词检索并行,再加结构化查询。举个例子,法律场景里查《民法典》第几条,关键词检索比向量准得多;但医疗场景里查「罕见病用药」,语义相似度更重要。所以我会根据领域调权重。召回之后做 重排,用 Cross-Encoder 精排,这一步很关键,能把 Top-100 压到 Top-10,而且能过滤掉时效性不符的。比如法律条文,我会优先选现行有效的,失效的虽然向量相似度高,但精排直接砍掉。这里有个常见失败场景:如果领域词表没建好,同义词映射不准,关键词召回会漏掉大量相关结果。比如医疗里「心肌梗死」和「心梗」,向量能处理,但 BM25 就不行,所以必须维护一个领域同义词词典。

生成模块相对简单,但坑也不少。我主要做两件事:一是 Prompt 约束,二是引用溯源。Prompt 里我会明确说:基于以下参考资料回答,不确定就说不知道,必须引用具体条款或文献编号。然后生成的结果必须带上检索片段的 ID,方便审核时追溯。这样能大幅降低 Hallucination。但有个前提:基座模型本身得有一定领域理解能力,如果模型完全不理解法律逻辑,光靠 Prompt 约束是不够的。这时候我可能会考虑做一点 SFT 微调,但那是另一回事。

知识更新是落地最头疼的部分。我把它分成四种场景:增量新增、修改、失效、全量重建。新增最简单,新文档直接向量化入库。修改我把它拆成「旧版软删除+新版新增」,不原地动索引,否则图索引的局部性会被破坏,召回质量下降。失效也是软删除,打一个失效时间戳,检索时过滤掉。全量重建一般季度做一次,比如 Embedding 模型升级了,就离线重建索引。这里有个关键风险:如果你做的是医疗系统,新指南发布后旧版必须立刻失效,软删除的异步重建可能来不及。所以我会加一个实时修正通道,运营后台可以人工标记某条知识紧急下架,检索时直接从内存黑名单过滤,不依赖索引重建。

另外,我最近在关注 Self-RAG 的思路,让模型在生成过程中自己判断要不要去检索,而不是每次固定检索。这个对专业领域很有价值,因为有些问题模型本身就知道,不需要检索,能省不少延迟。但它的可靠性还需要验证,比如模型误判了该检索却没检怎么办。

所以整体上,我会把 RAG 看成一种 「知识库在前、模型在后」的协作模式,核心是让模型做它擅长的事,理解和生成,而把事实性交给检索。前提是检索质量要足够高,否则模型再强也是白搭。我更倾向在检索层多下功夫,而不是在生成层硬约束。

关键一句:Self-RAG 让模型自主决定是否检索,能减少不必要的检索延迟,但在专业领域需要验证模型误判的风险。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设我们要给医院做一个智能问诊助手,医生问“这个药对肾病患者安全吗”,系统要检索最新的指南和药品说明。你大概会怎么设计它的检索和生成流程?

  2. 问法 2 · 层层追问

    做专业领域问答,怎么保证回答可靠?……那如果用户问的问题在知识库里没完全匹配的呢?……你觉得检索和生成怎么配合,才能既准确又避免幻觉?

  3. 问法 3 · 直球架构

    设计一个面向法律或医疗领域的RAG智能助手,从整体架构、检索模块、生成模块到知识更新机制,你会怎么设计?说清楚每个模块的关键点。

同模块相关题目