这道题问的是专业领域[[RAG]]智能助手的设计,我觉得它本质上是在问一件事:怎么让大模型在知识密度高、容错率极低的场景下,既能用上最新最准的知识,又能给出可信、可解释的回答。说白了,就是解决专业领域的 可信生成 问题。
我会从数据处理、检索、生成和评估四条线来讲,不过先划个边界:很多人纠结RAG和微调选哪个,我的看法是,高频更新的知识、需要引用溯源的场景,RAG是必选项;但像处理病历或合同这种格式稳定的文档,微调反而能提升格式规范性。真正落地往往是 RAG加微调混合,RAG负责事实,微调负责风格和合规。
先说数据处理层。专业文档结构复杂,比如一份医学指南,里面有诊断标准、用药方案、注意事项,如果你按固定字数[[切块]],很可能把“症状”和“对应治疗”切到两个块里,检索出来就是错的。所以我会按语义边界切,比如医疗文档按“症状-诊断-治疗”完整保留,法律文档按“事实-法条-判决”逻辑链来切。同时,我会提取实体关系构建一个轻量级 [[知识图谱]] ,比如药品的禁忌症、法条之间的引用关系,这能补上纯文本检索做不了的关联推理。举个例子,用户问“高血压能不能吃布洛芬”,纯文本可能只匹配到“布洛芬”和“高血压”两个词,但知识图谱能直接告诉你“布洛芬与ACEI类药物联用需谨慎”,这个信息在文本里可能分散在两段。
检索层我倾向用混合召回。单一向量检索在专业领域不够,因为术语表达很精确,比如“心动过速”和“心跳快”语义相近,但“盐酸二甲双胍”和“降糖药”向量距离可能很远。所以我会把稠密向量检索和 [[BM25]] 关键词检索结合起来,前者抓语义相似,后者保精确匹配。另外,我会做一个查询改写模块,把用户口语化的输入翻译成专业术语,比如“心跳快”转成“心动过速”。[[重排序]]这一步也很关键,用 [[Cross-Encoder]] 对初筛结果精排,把最相关的文档顶到前面。
生成模型层,基座我倾向选一个在领域上做过预训练的,比如医学的Huatuo或法律的LawGPT,如果不够成熟,就用通用模型加领域 [[SFT]] 。关键设计是强制模型输出引用来源,比如“根据《指南》第3章第2节”,这样专家能追溯验证,也方便用户判断可信度。另外,没有可靠来源的问题必须拒答,医疗场景我还会加一句“请咨询专业医师”的风险提示,这既是合规要求,也是安全底线。
评估机制不能只看ROUGE或BLEU,那些在专业领域没用。我会分三层:检索质量用 Recall@K 和MRR,生成质量用事实准确性指标,比如 [[Faithfulness]] ,让领域专家审一批典型case。最核心的是建一个bad case闭环,每次发现模型答错了,追下去看是检索没找到正确文档,还是找到了但模型生成时忽略了,还是引用格式错了。针对性地修,迭代几轮之后质量会稳定很多。
最后提一个我最近在关注的方向:当知识库频繁更新时,比如药品说明书改了,索引更新不及时会导致检索结果过时。这种情况下,我倾向用双缓冲策略,新旧索引共存,线上查询先走新索引,如果召回率不足再回退到旧索引,同时后台异步重建。但这里有个坑,如果更新太频繁,重建压力会很大,需要设计增量更新机制。
所以整体上,我更愿意把领域RAG助手看作一个知识可信的工程系统,而不是单纯堆模型。从数据切分到检索融合,再到生成约束和评估闭环,每一步都要为可解释和低容错服务。