这道题问的是[[RAG]],其实本质上是在问:当大模型的知识不够用时,怎么低成本地给它外挂一个知识库。RAG的核心思想很简单,就是给LLM配一本参考书,让它生成前先翻书找证据,而不是全靠记忆瞎编。
具体流程分三步。第一步是建索引,把文档切碎,用 [[Embedding]] 模型转成向量存到 [[Vector Database]] 里。切分这里就有个坑:固定字数切容易把语义切散,我一般会按段落或小节切,结合[[滑动窗口]]保留上下文。第二步是检索,用户的问题也转成向量,去库里做相似度搜索,拿回Top-K个片段。第三步是生成,把检索到的片段和原始问题拼成prompt喂给LLM,让它基于这些证据回答。
这里最关键的其实是检索质量,它决定了生成的上限。如果检索回来的东西不相关,LLM再强也白搭。所以落地时我会特别关注两点:一是 [[Hybrid Search]],把向量检索和 [[BM25]] 关键词检索结合起来,因为向量擅长语义匹配但可能漏掉精确词,关键词正好互补;二是 [[重排]],初检索召回几百条,再用 [[Cross-Encoder]] 精排一遍,把最相关的前几条送进生成,能显著减少噪声。
说个真实业务场景吧,比如电商客服的退款政策问答。用户问“七天无理由退货的运费谁出”,如果只用LLM微调,模型可能记错或者把旧政策当答案。用RAG的话,我把最新版的售后规则文档切成块建索引,每次检索到对应条款,模型直接引用条款回答,准确率能到95%以上,而且政策更新只需替换文档,不用重新训练。
那RAG和微调的边界怎么划?我的理解是:知识频繁更新、需要溯源、对[[幻觉]]零容忍的场景,优先RAG,比如企业SOP、合规文档、客服知识库。需要改变模型行为风格、或者内化复杂推理模式的任务,更适合 [[LoRA]] 微调,比如把模型调成客服语气。但实际落地常常是两者一起上:微调让模型学会用检索工具,RAG提供最新知识,互不冲突。
不过RAG也不是银弹,有个常见失败场景是检索回来的内容冲突或过时,反而把模型带偏。所以我上线前会特别关注 [[Faithfulness]] 评估,看生成内容是忠实于检索结果还是自己脑补,如果忠实度低就得调重排或加 [[Self-RAG]] 让模型自己判断要不要引用。
所以我会把RAG看作一个工程框架,它的核心价值是低成本、可回溯、易更新,但前提是检索质量得过硬。如果检索底子没打好,RAG反而比纯LLM还差。我更倾向先建好知识库的质量基线,再考虑上RAG。