大模型最让人头疼的问题是什么?——它要么像文盲一样啥都不知道,要么一本正经地胡说八道。RAG(Retrieval-Augmented Generation)的出现,某种程度上算是给LLM上了门“补习课”。不是要它死记硬背,而是教会它像人类一样查资料、验证事实。
传统LLM的训练数据是静态的,就像一本过时的百科全书。用户问2023年的股市行情,模型大概率会引用2020年的数据,因为训练时没包含新信息。RAG的解决思路很简单:先动态检索相关文档片段,再让模型基于这些片段生成回答。这相当于给模型开了个实时搜索引擎,而不是让它靠记忆硬撑。
核心组件拆解
-
检索器(Retriever):通常用稠密向量检索(如ColBERT、DPR),把文档分块编码后建立向量库。比如问“Transformer层数对模型的影响”,系统会从知识库中找到相关论文段落,而不是依赖模型自身的知识。
-
生成器(Generator):接收检索到的上下文,像普通LLM一样生成回答,但关键是要设计prompt明确标注来源。例如:“根据下方材料回答问题:[检索到的文本] → [问题]”
-
端到端训练:现代RAG会联合优化检索和生成模块,避免“检索不准导致生成错乱”或“过度依赖检索丢失逻辑性”的问题。
为什么RAG比纯微调靠谱?
直接微调的LLM确实能记住文档,但存在几个致命缺陷:
-
灾难性遗忘:新数据覆盖旧知识,比如微调医疗模型后,原来学的儿科内容可能消失。
-
幻觉加剧:模型可能虚构不存在的文献引用,显得更可信。
-
更新成本:每次有新文档都要重新微调,而RAG只需更新检索库的索引。
举个栗子:假设你有一个法律知识库,用RAG处理用户提问时,系统会实时检索相关条款(如《民法典》第584条),并生成回答时注明出处:“根据《民法典》第584条……”。这种可追溯性在金融、司法等领域简直是救命稻草。
踩坑指南
-
检索质量>模型大小:见过用GPT-4做RAG却只用了Elasticsearch基础版的情况?结果不如GPT-3.5 + 精心优化的向量数据库。
-
长文档处理:超过2048 token的文档需要分块检索,但简单平均分块会导致上下文断裂。我的经验是按语义边界分块(用Sentence-BERT聚类)。
-
冷启动问题:如果初始知识库稀疏,可以先用稠密检索补全,再逐步过渡到混合检索(稠密+稀疏)。
争议点
有人觉得RAG只是“打补丁”,离真正的推理还远。但我认为这是必要的妥协——毕竟让LLM从头理解人类知识库(比如arXiv的全部论文),算力成本堪比造原子弹。RAG的终极目标不是替代思考,而是为思考提供弹药库。
最后留个思考题:如果你要部署一个医疗问答系统,纯微调、纯RAG,还是两者结合?欢迎评论区讨论。