大模型很聪明,但它不是万能的。就像你身边那个啥都懂一点的朋友:八卦很熟、冷知识一堆,但你一问“物业合同解约流程”或者“公司报销规定”,他可能一脸懵。
这时候,就需要 RAG(检索增强生成,Retrieval-Augmented Generation) 来帮忙。它相当于给大模型装了个“实时搜索外挂”,能把外部知识库的资料取出来,再结合大模型的语言能力,给你一个靠谱的答案。
不过,传统RAG虽然解决了一部分问题,但也经常掉链子。于是,进阶版的 Advanced RAG 出现了。它就像是给外挂再装了外挂,不仅能搜,还能搜得更准、答得更好。
一、为什么光有RAG还不够?
想象一下:
你去图书馆问管理员:“电梯困人了,我该打哪个电话?”
结果管理员:
- 找不到相关的书(内容缺失)。
- 把一本50页的电梯维修手册直接塞给你(文档切分不合理)。
- 给你找来一本《物业管理通则》,结果和你问的问题没关系(Not in Context)。
- 回答你“110”,结果格式要求是JSON,但它给你的是纯文本(Wrong Format)。
是不是很崩溃?这就是传统RAG常见的痛点。
二、传统RAG的常见坑点
1. 索引构建时的问题
-
内容缺失
就像图书馆没买这本书。你问再多次,也没人能回答。
→ 解决办法:补充知识库,确保资料完整。 -
文档加载不准确
PDF里的表格没读出来、合同的图片说明丢了,就像图书馆买了盗版书,缺页少字。
→ 解决办法:用专业的“文档读取器”,针对PDF、图片、HTML各自优化。 -
文档切分不合理
- 切得太大:一页书全丢进去,结果大模型看不过来。
- 切得太小:一行一行分割,结果上下文断裂,前后不连贯。
→ 解决办法:重叠分块、按标题分块、递归分块。
2. 检索和回答时的问题
三、如何优化传统RAG?
传统RAG不是废物,只是需要打磨。优化思路可以分为几类:
-
补充内容:缺啥补啥,知识库尽量全。
-
数据清洗:垃圾数据必然带来垃圾答案。
-
文档切分:重叠分块、结构化分块、递归分块,找到合适的粒度。
-
召回优化:
- 增加TopK数量(3条→5条),但注意干扰信息变多。
- 用Reranking,把最相关的段落提前。
-
答案优化:
- Prompt里加“如果不知道就说不知道”。
- 用PydanticOutputParser校验输出格式。
- 把复杂问题拆分成子问题,逐个解决后再总结。
四、Advanced RAG:让大模型回答更准的“三步优化法”
大模型很强,但并不是万能的。很多人用过 RAG(检索增强生成)后会发现:
- 有时答案不完整;
- 有时明明知识库里有内容,却没被检索出来;
- 有时答非所问,甚至格式还错了。
原因很简单:传统RAG大多只关注“有没有检索到”,而没想过 “怎么更聪明地检索和利用结果” 。
于是,Advanced RAG 出现了。它在 检索前 → 检索中 → 检索后 三个环节都做了优化,让系统能更好地理解问题、找到相关内容,并最终生成更精准的答案。
1.检索前优化(Pre-Retrieval)
检索前优化的目标是:让问题和知识更容易匹配。
换句话说,如果“问题表达太模糊”或者“文档索引不合理”,后面的检索就会出错。
索引优化
常见方法包括:
- 摘要索引:为每个文档块生成一个简洁的摘要(summary),存入数据库。检索时先比对摘要,再回溯原文。这样在处理表格或长文档时更高效。
- 父子索引:文档先分成小块(叶子块)做索引,但在检索时可以回溯到更大的父块,既保持精准度又保留上下文完整性。
- 假设性问题索引:为每个块生成几个“假设性问题”,存成向量。检索时通过“问题匹配问题”,而不是“问题匹配文本”,更符合用户提问方式。
- 元数据索引:给文档加标签(如作者、年份、主题),先用标签筛选,再结合向量检索,避免“海量文档里找针”的低效。
查询优化
很多时候,用户提问过于简略或含糊。比如:
- 用户问:“合同多久生效?”
- 实际需要的检索问题是:“物业服务合同从签署到生效的时间规定是什么?”
常见方法:
- Enrich(完善问题) :引导用户补充信息,或让LLM自动补全隐含要素。
- Multi-Query(多路召回) :基于原始问题生成多个变体,从不同角度检索。例如“合同生效时间”“合同有效期起点”。
- Decomposition(问题分解) :把复杂问题拆分成多个子问题,分别检索再汇总结果。
2.检索优化(Retrieval)
当问题准备好了,接下来就是“如何检索得更准”。
传统做法主要靠向量检索,根据语义相似度匹配。但这并不总是可靠:
- 向量可能找不到精确匹配(尤其是冷门领域术语)。
- 只靠语义可能漏掉关键词非常关键的文档。
改进方法:
- 嵌入模型优化:微调嵌入模型,让它更懂特定领域的语言。比如在医学场景,模型要明白“心梗”和“心肌梗塞”是同一回事。
- 混合检索:结合语义检索(向量)+ 关键词检索(BM25)。这样既保证语义理解,又不会漏掉关键词命中。
- 动态适配:根据场景选择检索方式,例如金融法律类要求“精确匹配”,新闻资讯类则更依赖“语义相似度”。
3.检索后优化(Post-Retrieval)
检索出来的内容,不是“全给大模型”就万事大吉。原因很简单:
- 太多上下文会导致大模型分心;
- 排序靠前的不一定是最相关的;
- 无关内容会污染答案。
所以要做 检索后的“精加工” 。
常见方法:
- Reranking(重排序) :对检索结果再打分,把最相关的排在最前。比如 LlamaIndex、LangChain 已经支持用更专业的排序模型做这件事。
- RAG-Fusion:当有多路查询结果时,使用“互惠排名融合(Reciprocal Rank Fusion)”来合并结果,保证整体相关性更高。
- 上下文压缩与过滤:只保留与问题相关的部分,而不是把整段原文丢给模型。这既减少 Token 消耗,又能避免信息过载
4.小结
Advanced RAG 的核心就是“三步走”:
- 检索前优化:让问题和文档更容易对接(索引优化+查询优化)。
- 检索优化:用更聪明的方式找到最相关的上下文(混合检索+模型优化)。
- 检索后优化:把检索结果精加工,再交给大模型(重排序+上下文压缩)。
可以把传统RAG比作:“我去书店找书,直接按照模糊关键词翻书”。
而Advanced RAG则是:
- 有人帮我先问清楚问题(检索前)
- 再用更专业的检索工具找准书(检索优化)
- 最后有人帮我划重点、过滤掉废话(检索后)
最终效果就是:答案更快、更准、更可控。
五、总结:RAG → Advanced RAG 的飞跃
传统RAG就像你去图书馆找书:
- 管理员能帮忙,但有时找错书、有时给整本书丢过来,还可能漏掉关键答案。
Advanced RAG就像是:
- 有个助理帮你先优化问题(Pre-Retrieval);
- 再用最合适的搜索方式帮你找资料(Retrieval);
- 最后帮你划重点,总结成答案(Post-Retrieval)。
结果就是:答案更快、更准、更省心。
这样一来,即便你是RAG小白,也能大致理解:
- 为什么传统RAG经常答非所问;
- Advanced RAG做了哪些改进;
- 它能让大模型在实际业务里更可靠、更聪明。
水平有限,还不能写到尽善尽美,希望大家多多交流,跟春野一同进步!!!