这道题其实问的是:在模型的知识来源上,我们是让模型把知识记在脑子里,还是给它配一本随时能翻的书?本质是知识存储与模型参数要不要解耦的问题。
先说为什么引入[[RAG]]。最核心的原因就是,模型参数一旦训完就冻住了,新知识进不来,而且模型会自己编造内容,也就是[[Hallucination]]。RAG的思路很简单,我不指望你背下所有知识,我给你一个外部知识库,你遇到问题先去查,查到了再回答。这样知识更新只需要改数据库,不用重新训练模型,成本低得多,而且回答能溯源到具体文档,可信度高。
那RAG和[[SFT]]的边界在哪呢?我的理解是,RAG擅长处理频繁变化的知识,SFT擅长固化模型的表达风格和行为模式。举个例子,一个电商客服场景,满减政策可能每周调整,如果用SFT,每次政策变动都得收集数据重新微调,根本来不及;用RAG,直接把最新政策文档丢进知识库,模型检索后回答,当天就能生效。反过来,如果希望客服的语气更亲切、更符合品牌调性,那就适合用SFT去固化这种风格,因为风格是长期稳定的。
具体到场景,我重点说两个。第一个是金融政策解读,比如央行突然发了一个新规,RAG能立刻把新规文档索引进去,用户问“房贷利率怎么调”,模型检索后给出带原文引用的回答。第二个是企业内部SOP与合规文档查询,不同部门、不同版本的文件堆在一起,员工问“报销流程”,RAG能精准定位到最新版SOP,并且告诉你是第几章第几条。
但这里有个坑,RAG的效果上限取决于检索质量。如果知识库里的文档切分太粗糙,或者[[Embedding]]模型选得不好,检索出来的内容驴唇不对马嘴,那模型再强也白搭。常见失败场景是:用户问的问题很口语化,比如“我上次买的那个耳机坏了咋办”,但知识库里全是“售后政策2024版”这种正式标题,检索召回率很低。我的做法是,上线前一定要做[[Hybrid Search]],把[[BM25]]关键词检索和向量检索结合起来,再配合[[Rerank]],把最相关的片段顶到前面。
另外说一个我特别关注的点:当知识库频繁更新时,[[Vector Database]]的增量索引和一致性怎么保证?比如客服知识库每天有几百条修改,你不能每次重建索引,但增量插入又可能让检索精度下降。我倾向于用双索引策略,一个base索引定期全量重建,一个delta索引处理实时增量,查询时合并结果,再按时间戳去重。
所以整体来看,我不会把RAG和SFT对立起来。真实落地往往是RAG打底,保证知识最新、来源可查,然后再用SFT优化生成风格和指令遵循能力。我更倾向于把RAG看作一个低成本、高灵活性的知识接入方案,而SFT是锦上添花的人格化打磨。