如何提升 RAG 检索的效果及优化实践

提升RAG检索的效果,是构建高质量问答系统的核心。下面我会从数据质量、检索策略、索引优化三个层面,分享一些经过验证的优化实践,其中也会特别考虑中医领域的需求。

一、源头治理:优化数据质量与分块策略

检索效果的上限,取决于索引数据的质量。

  • “五良”分块法:根据文档特点选择策略。**小型块(128-256 token)**适合精准匹配(如方剂组成);语义块保留自然段落完整性,适合复杂论述;**滑动窗口(15-20%重叠)**避免关键信息被切断,适合检索条件密集的文本。
  • 元数据与结构化:为每个块附加来源、章节、实体标签(如含有的方剂)等信息,支持在检索前通过元数据过滤缩小范围,既提升精度也提高速度。
  • 丰富与增强:对简略的原文(如古籍条文),可补充现代译文或名家注解;对医案等,可将其拆解为症状、舌脉、辨证、方药等结构化字段分别索引。

二、策略升级:从单一向量到混合检索

只依赖向量检索,容易漏掉关键词精确匹配。混合检索是提升召回的利器。

  • 混合检索(Hybrid Search):结合向量检索(语义相似)与关键词检索(BM25)(词法匹配),通过倒数排序融合(RRF)或加权合并结果,能有效兼顾“脖子发僵”和“麻黄汤”两类不同查询。
  • 查询优化
    • 查询重写:在多轮对话中,将“它的剂量呢?”重写为独立的“麻黄汤的剂量是多少?”。
    • 查询扩展:利用同义词表(如“便秘”=“大便难”)扩展查询,提升召回。

三、精排:用重排序(Reranking)提升精度

初筛的Top K结果可能包含噪声,重排序能精细化调整,确保最相关的内容排在前面供模型生成答案。

  • 实现方式:先用轻量检索取回Top 100(甚至200)个候选,再用强大的**交叉编码器(Cross-Encoder)**逐对计算相关性,重新打分后取Top 5-10。
  • 关键点:Rerank模型(如bge-reranker-v2)比双编码器更准,建议直接使用。如果有中医数据,微调一个专用Reranker效果更佳。

四、模型与索引调优

  • Embedding模型选型:通用模型(如BAAI/bge-large-zh-v1.5)是良好起点。若追求极致,可用中医语料微调领域模型。同时注意动态量化以平衡速度与精度。
  • 索引参数调优:调整nlist(聚类中心数)和nprobe(搜索中心数),在检索速度和召回率间找到平衡点。

五、中医领域专项优化

  • 术语归一化:用户口语(“后脖子发僵”)和古籍术语(“项强”)常不匹配。可建立一个映射表,在检索前进行术语转换。
  • 条文特殊处理:短小的古籍条文直接检索效果差。可为条文生成一句话摘要(如“太阳中风,桂枝汤主之”),检索摘要再映射回原文。
  • 医案按需检索:允许用户按“症状”、“方剂”等不同字段检索,或加权组合,满足“有哪些用麻黄的医案”这类精准需求。
  • 别名自动扩展:针对中药别名(如“山茱萸”即“枣皮”),在查询时自动扩展,避免漏检。

六、评估驱动的持续迭代

优化是一个闭环过程,需要数据驱动。

  • 构建黄金测试集:准备200个典型问题,并人工标注出对应的理想文档块(Golden Chunks)。
  • 关注核心指标:**命中率(Hit Rate)**关注是否召回正确答案;**平均倒数排名(MRR)**关注正确答案的排位。
  • 分析Bad Case:定期分析失败案例,并针对性地优化数据或策略。

总结:优化路径建议

  1. 诊断基线:先分析是“没召回到”还是“排序太靠后”。
  2. 数据先行:检查数据清洗和分块,这是最根本的。
  3. 引入混合检索:快速提升召回率。
  4. 加入重排序:提升Top结果质量。
  5. 精细化:根据Bad Case进行查询重写、术语归一化等专项优化。

如果你在某个具体环节(比如如何构建中医同义词表)遇到困难,我们可以继续深入探讨。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐