这道题问的是[[检索增强生成]],其实本质上是在问:怎么用外挂知识库来弥补大模型本身的知识短板。你想想,大模型参数里存的知识是静态的,而且容易[[幻觉]],RAG的思路就是我不指望你把所有东西都记在脑子里,我给你一个随时可以查的资料库,你回答的时候先查再答。
整体架构很清晰,就两段。第一段是离线索引,把文档切分成块,然后拿[[Embedding]]模型转成向量,存到[[向量数据库]]里,比如[[Faiss]]或Milvus。第二段是在线流程,用户提问来了,同样向量化,到库里搜最相似的Top-K片段,然后把这些片段和问题拼成Prompt,喂给LLM生成答案。
核心优势其实很实在。先说缓解幻觉,因为生成的内容有出处,可以溯源验证,这在金融、医疗这些合规要求高的场景特别重要。再一个是知识时效性,知识库一更新,答案就跟着变,不用重新训练模型,成本低得多。还有就是成本可控,比起全量微调,RAG几乎没什么训练开销,换知识库就行。
但落地的时候坑也不少。最关键的瓶颈是检索质量。如果Embedding模型不准,或者Query和文档的语义对不上,召回的内容就是错的,那LLM再强也答不对。另一个是上下文窗口限制,你召回的片段多了,超出LLM能处理的长度,它就开始丢信息;召回的少了,覆盖不全。还有个噪声敏感问题,检索到无关内容会干扰生成,这就是所谓的"迷失在中间"效应。
所以真正落地的时候,我会做几个工程取舍。先说[[混合检索]],不只用向量,还结合[[BM25]]这类关键词匹配,让两种方法互补。再一个是加[[重排]],召回Top-K之后用更精细的模型比如[[Cross-Encoder]]重新打分,把真正相关的顶上来。还有就是置信度过滤,分太低的直接扔掉,宁可少给信息也别给错的。
还有一个常被问到的问题是RAG和微调的边界。我的看法是,RAG适合知识更新快、需要溯源的场景,比如客服的退款政策、企业SOP;微调适合让模型学会特定风格或推理模式,比如医疗诊断的[[思维链]]。实际项目里我经常两者一起用,微调让模型更听话,RAG给它最新知识。
所以总的来说,RAG不是万能药,但它确实是当前落地大模型最务实的一条路。我会把它看成是"给模型配一个可更新的外部大脑",核心是把检索的确定性注入到生成的开放性里。