反对主流RAG的六个观点: 向量检索并非必须

发布时间:2026/7/11 13:45:49
反对主流RAG的六个观点: 向量检索并非必须 观点一检索的本质是“过滤”而不是“搜索”● 传统RAG传统做法把检索当成“搜索”总试图通过计算语义相似度来硬凑出几个结果没有真正相关的也会塞给你“看着有点像”的。● 新做法“过滤”代替搜索把文档变成结构化数据表句表line_df目录表toc_df检索就变成了类SQL条件筛选。好处在于没找到就是没找到且不管过多久重新运行结果都是一样的。● 举例类似line.contains(“X”) 过滤条件即使过了6个月重新运行结果依然一致。而向量检索依赖模型维度难以复现今天搜出来的结果明天可能就变了。观点二“答案的精确位置”和“背景上下文”必须分开找● 传统RAG“一刀切”成固定大小文本块。切得太小容易把长答案切断丢失关键信息切得太大又容易把关键信息淹没在废话里。● 新做法分开找关键信息和补充信息先用关键词定位“答案精确位置”锚点然后提取锚点所属的整个章节作为“补充上下文”。既保证答案绝对精准又提供了完整无缺的上下文让大模型回答更全面。● 例子○ 如概念解释类问题锚点是定义概念的单句例免赔额是被保险人在保险责任生效前需自行承担的费用补充信息是锚点所属完整段落。最终结构化输出「锚点 补充上下文」的配对数据。○ 原生 Top-K 检索只会二选一输出要么仅返回核心单句无上下文支撑要么返回整段文本核心概念被模糊。观点三关键词检索优先向量兜底● 传统RAG习惯先使用向量计算。计算成本高且对于非常明确的专有名词或数字不关键词搜索准确。● 新做法成本低、结果确定的关键词检索放在第一位。只有当关键词没搜到如用户用了同义表达时才启动向量检索作为备用方案。保证准确率又节省成本。● 例子用户问“生效日期”系统直接搜索 “effective”“date” 两个词。直接定位同时包含两个关键词的单行内容并终止检索 整个过程仅需对行数据表line_df执行一轮正则匹配不需要将问题向量化观点四必须能确认“文档里到底有没有答案”● 传统RAG传统向量检索最大问题是“无法确认答案不存在”。向量相似度为0可能是答案缺失也可能是表达方式不同但总会返回相对最接近的片段做不到0返回。● 新做法关键词检索出结果是0条就能百分百确定文档里没有这个词让系统可以理直气壮地告诉用户“查无此果”从而有效避免幻觉问题。● 例子在一个洪水灾害保险单的行数据表line_df中检索关键词earthquake检索结果为空可以直接判定答案不存在。而向量检索逻辑不同依旧会返回 5 个语义最接近的文本片段内容围绕自然灾害、洪水相关描述。大模型读取这些片段很容易擅自推理、错误得出 “保单包含地震损失” 的结论。观点五在狭窄企业文档库上文本共现结构优于 BM25● 传统RAGBM25 依靠 TFIDF 打分。文档数量太少 IDF 难拉开差距排序基本靠词频TF容易召回词频高但不含有效答案的释义段落。● 新做法企业问答的答案往往有固定结构如“关键词具体数值”。通过检测这类共现模式能直接定位到包含答案的句子● 例子用户问“免赔额是多少”○ BM25 靠deductible免赔额出现频次排序因此该词反复出现十几次的术语解释段落会排到首位而这个段落并不包含具体金额。○ 词共现思路则围绕答案结构特征优先筛选同时包含deductible数字的文本行。如目标条款“免赔额为 1000 美元”会排在首位 。观点六目录导航作用模型判断哪些章节有用● 传统RAG把目录和正文混在一起切碎浪费了目录的导航作用。● 新做法将目录数据表toc_df输入小型模型由模型判断哪些目录能回答用户问题。● 原文例子用户问“何时能提前退保”检索关键词“leave”在目录中无法命中任何内容因为答案所在章节《终止与取消》和问题不存在重合词汇。而把28条目录喂给小模型进行一次推理模型能够识别“退出”与“终止”表达同一含义从而精准定位相关章节且成本极低后续可命中缓存