这道题其实问的是,大模型[[幻觉]]本质是它只靠训练时记住的静态知识,遇到没见过或记错的问题就乱编。[[RAG]] 的思路很简单,就是给它配一个外挂知识库,让它先查再答,而不是凭空想。换句话说,我们不是要教会模型更多知识,而是让它学会「不知道就去查」。
具体实现分三步:先把用户问题转成向量,去 [[Vector Database]] 里召回最相关的 Top-K 文档;然后把检索到的内容跟原始问题拼成一个增强提示;最后让模型基于这个提示生成答案。这样一来,模型回答就被约束在检索到的证据里,幻觉自然就减少了。
但真正落地时,检索质量才是瓶颈。如果召回的内容是错的,或者跟问题不相关,那生成再好也没用。所以实际系统里,我会特别关注几个点:一是 [[Embedding]] 模型要领域适配,比如医疗场景用专门的医学 Embedding 模型;二是要加 [[Rerank]] 这一步,因为向量相似不等于语义相关,用 [[Cross-Encoder]] 精排能过滤掉很多噪声;三是文档切分策略,固定长度切分经常把语义切碎,我倾向按语义段落或者用 [[Sliding Window]] 加重叠来切。
这里有个常见的坑:很多人以为 RAG 跟微调是二选一,其实不是。微调适合让模型学固定格式或风格,比如客服话术;RAG 适合知识频繁更新的场景,比如政策文档。真正落地常常是 RAG 加微调一起上,比如用 RAG 检索最新政策,再用微调过的模型生成符合客服规范的回复。
我举个具体业务场景:电商客服处理退款纠纷。用户问「我买了件衣服,有质量问题,退款流程怎么走?」如果只靠模型记忆,它可能给出过时的流程。用 RAG 的话,我会把最新的退款政策、商品质检标准、常见纠纷案例做成知识库。用户提问时,先召回相关条款,再让模型结合召回内容生成步骤。这样答案能溯源到具体政策条款,既准确又有说服力。
但 RAG 也不是银弹。前提是知识库本身的质量要够高,如果文档里有矛盾信息,模型会困惑。另外,延迟是硬伤,检索加重排可能增加几百毫秒,对实时客服来说需要做缓存或预计算。我上线前会特别关注召回率,用 [[RAGAS]] 这类框架评估 [[Faithfulness]] 和 [[Context Recall]],确保模型没有忽略检索到的证据。
说到优化方向,**[[混合检索]]**是个很有效的思路。纯向量检索对同义词和缩写不敏感,比如用户搜「订单异常」但文档里写的是「交易失败」,向量可能匹配不上。我会把 [[BM25]] 关键词检索和向量检索结合,再用 Rerank 统一排序。另外,[[Self-RAG]] 让模型自己判断要不要检索,有些简单问题直接生成更快。
所以我会把 RAG 看成一套系统工程,核心不是模型多强,而是检索链路多稳。我更倾向先保证检索的精度和召回,再考虑生成,因为一旦检索错了,后续生成再优化也救不回来。