RAG 本身并不算是个坏主意。我们认真实践过,也确实在某些场景下跑通了。
去年,我们花了几个月搭过几套完整的 RAG 管线:三阶段处理( Extract 、Chunk 、Embed ),三种搜索策略( Vector 、BM25 、Hybrid + Reranking )。从文本提取,粗排,到 Rerank 精排,每一个环节都认真做了一遍。工程量不小,技术上看着很漂亮。
但最终不得不承认一个事实:效果不好
这篇文章不是要批判 RAG ,而是诚实地分享下我们具体遇到了哪些问题,以及我们后来怎么想的。以及,小广告。。。
做本地桌面应用,Embedding 模型的选择是一个没有好答案的问题。
小模型(参数量 < 500M )在设备上跑得动,但语义理解质量不稳定——碰到专业文档、跨语言搜索、长文档时,召回率明显下降。大模型( 1B+)质量好,但在普通用户的笔记本上内存和计算开销太大,后台常驻时对系统资源的占用让人无法接受。
桌面应用没有服务器可以依赖,只能在"跑得动"和"效果好"之间妥协。选了一个,另一个就要让步。这个困境在服务端应用里不存在,在本地优先应用里却是无解的。
向量语义搜索有一个根本性的弱点:它对专业术语的理解很差。
原因并不复杂。Embedding 模型是在通用语料上训练的,而代码函数名、医学缩写、法律条款、产品专名这些词在训练语料里出现频率低,在向量空间里的位置偏僻且不稳定。
实际表现是什么样的?用户搜 "RLHF",不一定能找到写着 "Reinforcement Learning from Human Feedback" 的文档。搜"LTV",可能匹配不到写着"用户生命周期价值"的分析报告。搜某个产品的型号,向量搜索根本抓不住这个词的准确语义。
这不是配置问题,不是参数调优能解决的,业内常见做法是做 embedding 模型的微调,但一般都是针对特定领域,只能在 ToB 场景中 work 。
Embedding 优势是模糊语义匹配,它的劣势恰好就是精确词汇匹配。而用户的真实需求往往是两者都要。
召回率低和准确性差,是 RAG 管线的两个经典问题。针对准确性问题,业界的标准解法是引入 Rerank 模型做最后一步的精排。
我们也做了这一步,然后发现问题并没有被解决,只是被转移了。
Rerank 模型比 Embedding 模型更重、更慢。引入它之后,整个检索链路的延迟大幅上升,对本地应用来说尤其明显。更关键的是,Rerank 模型同样是在通用语料上训练的,同样存在专业词汇不敏感的问题——它只是在你已经召回的候选里重新排序,而不能召回那些一开始就没被捞到的文档。
最终结果:链路变慢了,架构变复杂了,根本问题还在。引入 Rerank 后,排序质量的提升非常有限,反而让 BM25 的作用几乎被掩盖了。
分块( Chunking )是 RAG 最无法绕开的问题。
文档被切成固定大小的片段之后,每个片段都与它的前后文脱节了。AI 拿到的是一段从报告中间截取的内容,不知道这段话在哪个章节,不知道前一段在讲什么,也不知道后续有没有结论。
最糟糕的情况是:一个关键段落恰好横跨两个 Chunk 的边界,两个 Chunk 都能匹配到,但又各自不完整。AI 拿到的两份碎片都沾了边,却都缺少关键信息,最终给出一个似是而非的回答。
这个问题业内有很多补丁办法,比如:加大 Chunk 重叠,加入父 Chunk 检索,引入 Small-to-Big 策略……每个补丁都能在某个维度上改善问题,但也都会带来新的代价——更多 Token 、更复杂的管线、更难调试的行为、更加无法通用。
我们把这些补丁叠在一起,得到了一个复杂、易出错,但仍然不够好的系统。
通用分块策略对不同文档类型的效果差异极大,这是我们当初没有充分预判到的。
论文有 Abstract + 正文 + References 的结构;书籍有章节层级和页眉页脚;合同有条款编号和交叉引用;代码文档有 API 列表和示例代码;表格类文档的"内容"是列名和数据类型,而不是单元格里的文字……
固定窗口切块的策略不理解这些结构,分块点往往切在语义中间,把标题和它的正文分开,把条款编号和条款内容切断,把表头和数据分离。
每种文档类型其实需要完全不同的处理逻辑。但针对每种类型都写特化的解析器和分块策略,工作量巨大,维护成本也高——而且即使都做完了,效果也只是"比通用策略好一些",仍然是碎片化的。
以上五个问题单独看,每个都还在可接受的范围内,但当 RAG 被实际接入 AI Agent 使用的时候,所有问题叠加在一起,效果非常糟糕。
一个真实的场景:AI 在帮用户分析一份合同,调用 search() 检索相关条款,拿到了 10 个 Chunk 。有几个 Chunk 沾了边,但信息不完整。AI 无法判断该怎么继续,只好调整关键词重新搜索。再拿到 10 个 Chunk ,还是不够。再换关键词,再搜一次。
每次搜索都是黑盒:AI 不知道换哪个关键词才能找到它需要的内容,不知道文档里到底有没有这个信息,不知道自己距离答案有多远。这种低效不是 Agent 能力不够,而是工具本身的设计不支持它做出合理的决策。
RAG 在设计上是为"用户直接提问"场景优化的,不是为"Agent 自主探索"场景设计的。
这些问题不是我们独有的,业内已经有明显的应对趋势:
微软的 GraphRAG 引入知识图谱来缓解上下文碎片化问题,把相关实体和关系显式地存储下来,而不是靠碎片拼凑。
PageIndex 不按固定大小切 Chunk ,而是以页面为单位建立索引,保留文档的自然边界。
Agentic RAG 尝试让 AI 自主决定检索策略,而不是走固定管线——方向是对的,但在 RAG 架构上叠加 Agent 逻辑,复杂度随之翻倍。
最彻底的转向来自 Claude Code 和 Manus 。它们干脆放弃了 RAG ,回到最原始的方式:Glob + Grep + Read。找文件、搜关键词、读内容。没有向量数据库,没有 Embedding 模型,没有 Chunk 管线。效果反而更好。
这让我们想明白了一件事:RAG 的设计假设是"LLM 不够聪明,需要我们帮它把信息预处理好"。这在 GPT-3.5 时代是合理的。但现在的 LLM 已经有能力自主使用工具完成多步检索任务——它们不需要预切碎片,它们需要的是线索:文件在哪,结构是什么,然后它自己能决定读什么、读多少。
Glob + Grep + Read 对代码库很有效,但对用户文档行不通。代码库里 src/services/auth.ts 这个路径本身就在告诉你这是认证服务;但 2024 年度总结(修改版)(最终版).docx,路径告诉你的信息约等于零。更别提 PDF 和 Word 是二进制格式,grep 根本读不了。
所以我们的问题变成了:能不能给文档也建立一套等价的"目录索引",让 AI 用 search → outline → read 的方式渐进式地翻阅你的文件?
我们把这套方案叫做 Outline Index。
核心思想一句话:不替 AI 预切信息,而是给它一张地图。
为每个文档建立一份结构化"名片",包含文档的元数据(标题、作者、关键词、摘要)和结构大纲(章节标题、层级关系、行号范围)。AI 按三层路径访问文档:
这与人类阅读的方式完全一致:先找书,看目录,翻到对应章节精读。AI 在这个过程中有完整的上下文,知道自己在文档的什么位置,可以决定"再多看一点",也可以跨文档对比。
对比传统 RAG:同样的场景下,Outline Index 方式的 Token 消耗约 800-3400 ,AI 拿到有完整上下文的精确信息。传统 RAG 返回 10 个预切碎片,消耗 4000-6000 tokens ,AI 对文档结构一无所知。
另一个副产品:Embedding 的对象从原文 Chunk 变成了 Outline Index 本身。一个文档只需要一个向量。10000 个文档 ≈ 10000 个向量 ≈ 30MB 存储,检索速度也快得多。
关于领域词汇不敏感的问题,BM25 全文检索补上了这块短板。双路检索( BM25 精确匹配 + 向量语义理解),通过 RRF 融合,不再需要 Rerank 模型。
最后,是广告时间:
1
metalvest 12 小时 55 分钟前 大纲索引生效的前提是文档本身是高度结构化的,而且章节内容极度聚焦
|
2
moxida 12 小时 54 分钟前
感谢分享
|
3
xdongiang 12 小时 24 分钟前 via iPhone
和 lcm 啥区别
|
4
MIUIOS 12 小时 16 分钟前
写得非常好
|
5
Fish1024 12 小时 12 分钟前
明年再来一篇:为什么放弃了 Outline Index ? Outline Index 的三大顽疾
|
6
zhengfan2016 12 小时 11 分钟前 |
7
ovtfkw 12 小时 10 分钟前
这是啥 完全不知所云
|
8
murmur 12 小时 4 分钟前
@zhengfan2016 那不是向量数据库么,推荐算法也不是 rag 啊
|
9
CoderGeek 12 小时 2 分钟前
这个远古时期的推荐系统打标签 多维度数据有何区别 - -
|
10
CoderGeek 11 小时 58 分钟前
分词 检索 权重 - - 感觉企业知识库 定制客服之类的 还是那样 提取完加 AI 选择一下 走个聊天机器人 一直没太搞懂这个 RAG 我本地搭了 dify 把我自己之前学 MBA 的整体资料罐给他 做个 MBA 课程老师玩 配着配着感觉都是问题
|
11
karld 11 小时 54 分钟前
真假 效果提升多少!
|
12
orion1 PRO 没玩过,感谢
|
13
murmur 11 小时 52 分钟前
@zhengfan2016 说错了,你说小红书我可能还认为高深,b 站的推荐系统完全是基于 tag 做的,因为当你喜欢上一个内容之后,带着标签的黑稿全推到首页上来了,所以证明他完全不检测相似度,就是看打了什么 tag
而且首页 5 个视频里必定一个商单一个广告 简而言之 b 站推荐系统屎中屎,不具备技术研究讨论的价值 |
14
MoozLee 11 小时 52 分钟前
ai 能力提升的必然吧。本来需要更多人为的编排流程,现在 ai 能力强了自然就减少了这块的需求。
|
15
qaqbreak 11 小时 44 分钟前
这个是不是相当于做了个摘要,然后用摘要进行检索了
|
16
NoobNoob030 11 小时 41 分钟前
思路很好,感谢分享
|
17
imxiaolong 11 小时 37 分钟前
现在用 google 的 notebookLm ,挺好用的。可以根据以往文件生成我想要的方案。
|
18
zwithz1998 11 小时 31 分钟前
主要还是看使用场景,你的使用场景很明确了,是本地应用,使用 RAG 成本反而很高。
像企业知识库(如飞书)这类的协同文档平台,只能构建 RAG ,并且协同文档涉及到文档权限的问题,直接使用路径去构建上下文,反而会导致信息泄露。 |
19
Ketteiron 11 小时 28 分钟前
@zhengfan2016 #6 这是用户画像系统+推荐系统。
RAG 主要是节约成本的前提下为 AI 提供合理的上下文,但目前向量搜索的命中率实在扯淡,很长一段时间直到现在,这种模式一般是用来骗投资的,没多少现实意义。 最合理的还得是 Agentic RAG + 深度预处理,将资料完全数字化,让 AI 整理、打标签、抽样、归纳、建立依赖关系,当需要检索时让 AI 自主决定调取什么资料。 OP 的方案本质上也是深度预处理的一种,比知识图谱化省钱,但其正确性由文档本身的结构化程度决定 |
20
zhengfan2016 11 小时 18 分钟前
@murmur #13 举个例子,像独立开发者做一些 saas 的推荐还是能用用的
,我自己做的图库和音乐网站的推荐系统就打算用这个,使用用户 like 过的内容 embedding 之后算出一个大概的范围,再使用向量 db 搜索最接近这个范围的结果 ![]() |
21
op351 11 小时 16 分钟前
我觉得可以不要太局限于文档类的(PDF,docx,纯文本等等)
可以往专业性强一点的文件类型扩展,应用场景才可能更广,更有生产力 比如你文章里也提了 Claude 能通过读软件开发领域的源代码,代码中的引用声明来了解路径信息和项目结构 其实在工作中,其他类型的文件也会有很多 比如制造业里大量的机械图纸,3d 文件,再比如影视行业大量的视频素材,音频素材 对于偏视觉系的资料,我觉得按现在多模态模型的能力 做视觉识别,总结,然后结构化列出文件大纲信息也是不错的 idea |
23
coefu 10 小时 55 分钟前
有一点思考,但不多,解决了一些小 case 。指望这个当主业务赚钱,还是差点味道。
|
24
AoEiuV020JP 10 小时 52 分钟前
别和 rag 比,要比就和把文档一对一转成 txt 之后 ai 自己搜索的效果比,
|
25
telemsg 10 小时 52 分钟前
这篇文章的作者指出的痛点(如上下文碎片化、本地资源开销、专业词汇不敏感)是非常真实的,确实反映了**早期/基础 RAG ( Naive RAG )**在实际落地中的普遍困境。
但是,如果要反驳这篇文章,核心切入点在于:**作者是在用“2023 年的基础 RAG”的缺点,来衬托“2024 年高级 RAG”的优点,然后通过“偷换概念”宣称自己放弃了 RAG ,本质上是一篇为自己产品( Linkly AI )带货的精彩软文。** 以下是具体的反驳逻辑和视角: ### 1. 概念偷换:他并没有放弃 RAG ,只是做了一个“层级 RAG” 作者提出的终极解法是 **Outline Index (搜索 -> 看大纲 -> 精读)**。 * **反驳**:这根本不是放弃 RAG ,这在业界被称为 **Hierarchical Retrieval (层级检索)**、**Document Summary Index** 或者类似 RAPTOR 的树状检索结构,LlamaIndex 等框架早就支持了。 * 本质上,它依然是“检索( Retrieval )+ 增强( Augmented )+ 生成( Generation )”的管线。作者只是把“直接检索碎片( Chunk )”改成了“先检索大纲( Outline ),再按需加载大区块( Section )”,这是 RAG 架构的演进,而非颠覆。 ### 2. 逻辑自相矛盾:解析难度问题 * **作者的论点(问题四、五)**:文档被固定大小切块后语义破碎。并且不同文档类型(表格、合同、代码)结构不同,提取和分块的开发维护成本极高,效果还不好。 * **反驳(致命漏洞)**:如果一份排版复杂的 PDF (包含多级标题、跨页表格、双栏文本),你连准确的文本分块都做不到,**你的 Outline Index 是如何凭空为它生成完美的“结构化大纲(章节、层级、行号)”的?** * **真相是**:无论做高级 RAG 还是做 Outline Index ,核心瓶颈都是**文档版面分析与结构化提取**( Document Parsing )。只要你能完美解析出文档结构,传统的语义切块( Semantic Chunking )加上父子文档关联( Parent-Child Retriever )同样能完美解决碎片化问题。作者把文档解析的锅,硬扣在了 RAG 的头上。 ### 3. 以偏概全:拿“纯向量检索”的弱点当作整个 RAG 的弱点 * **作者的论点(问题二、三)**:Embedding 对专业词汇不敏感,Rerank 模型太重且不能解决根本的召回问题。 * **反驳**:现代生产环境的 RAG 标配是 **混合检索( Hybrid Search = 向量 Dense + 关键词 Sparse/BM25 )**。作者在文末也承认自己的方案也是用“BM25 + 向量”双路召回来解决领域词汇问题的。既然大家都在用双路召回,为什么这成了传统 RAG 的缺点,却成了他们产品的卖点?此外,API 化的 Rerank 模型(如 Cohere 、BGE )速度极快,几百毫秒的延迟在动辄数秒的 LLM 生成时间面前几乎可以忽略不计。 ### 4. 场景局限:把“本地优先”的短板无限放大 * **作者的论点(问题一)**:本地桌面应用跑大 Embedding 模型太吃资源,跑小模型效果差,陷入两难。 * **反驳**:这是“本地桌面端”的软硬件限制,而不是 RAG 技术的限制。绝大多数企业级 RAG 或 SaaS 应用都在云端运行,调用顶级的 Embedding API 成本极低且效果极好。即便在本地端,随着端侧 NPU/Apple Silicon 的普及以及诸如 BGE-M3 等轻量级高性能模型的出现,这个门槛正在迅速降低。 ### 5. 成本与效果的掩耳盗铃(关于大模型长文本陷阱) * **作者的方案**:给 AI 一张地图,AI 看完大纲后决定按需加载精读(甚至加载整个章节)。 * **反驳**:这种做法极度依赖大模型的**超长上下文能力( Long Context )**和**推理能力**。 * **Token 成本极高**:如果用户问一个简单的数据点(例如“Q3 的利润是多少?”),传统 RAG 返回 3 个精准的 Chunk 可能只消耗 1000 Token 。而 Outline Index 需要先让 AI 读几百 Token 的大纲,然后加载可能长达 5000 Token 的整个财报章节去“精读”,Token 消耗和首字等待时间( TTFT )反而飙升。 * **迷失在中间( Lost in the middle )**:即便是现在的长文本模型,在塞入一个巨大的章节让其自己寻找细节时,依然很容易出现幻觉或遗漏。精准的 Chunk 召回反而是降低 LLM 幻觉的最有效手段。 ### 总结 如何一针见血地评价并反驳这篇帖子? > “文章写得很好,对早期无脑切块( Naive RAG )的批判刀刀见血。但作者用 2023 年最基础的 Fixed Chunk + 纯向量检索作为‘靶子’,刻意无视了 2024 年业界早已普及的**混合检索、语义切块、父子文档结构( Auto-merging retrieval )以及多步 Agentic RAG**。 > 作者兜售的『 Outline Index 』本质就是带 Metadata 的层级检索( Hierarchical RAG ),依然是 RAG 家族的一员。这就像是说:**‘为什么我放弃了汽车?因为三轮车太颠簸了,而且拉货太少。所以我现在改用四个轮子、带独立悬挂的交通工具了。’** 这是一次精彩的降维打击式营销,但从技术层面来看,RAG 并没有被放弃,只是在向着更精细的结构化和 Agent 化演进。” |
26
nullEDYT 10 小时 47 分钟前
解法感觉是变相 RAG
|
27
cfer 10 小时 39 分钟前
我个人最初使用方法是把问题和答案进行结构化处理,然后将问题作为索引内容作为文档保存到向量数据库中,它效果很好,但是一旦问题数据量多起来的话,命中的索引也会成倍的增加,最终效果就不好了。只适用于小型数据量的处理。
|
28
hahiru 10 小时 24 分钟前
嗯不错,我先试试你的软件效果怎么样。
|
29
Ketteiron 10 小时 14 分钟前
@YanSeven #22 知识图谱化召回率非常高,这肯定是有价值的。对于知识密集型行业效果很好,例如医疗、法律、历史、地理等等,至于像企业内部知识库等场景或许划不来,烧掉的 token 实在太多了。
有没有价值还是得看资料的质量如何,garbage in, garbage out |
30
kulove 9 小时 50 分钟前 via Android
写的不错 之前也发现 RAG 有这些问题 所以干脆不搞了 等大模型能力上来再说
|
31
la2la 8 小时 53 分钟前
你们主要的盈利方式是什么
没有商业模式必定整不久的 |
40
ztm0929 5 小时 9 分钟前 via iPhone
|
41
raydied 4 小时 46 分钟前
RAG 的设计假设是"LLM 不够聪明,需要我们帮它把信息预处理好"。
--- 核心原因其实是:1. LLM 上下文/KV 缓存有限,2. token 成本很高。 --- 你们产品的 rag 正确率是如何评估的?内部测试 rag 的正确率能达到多少? |
42
kafm 3 小时 4 分钟前
“渐进式披露大量文档”蛮有意思,思路像 skills 。区别在于 skills 的场景是合理加载 SOP 手册,整个放到上下文里并不浪费。RAG 加载整个文档还是有点奢侈,但效果应该还不错?
|
43
kafm 3 小时 2 分钟前
哦哦,不是加载整个文档,是章节*
|
44
charleslin 2 小时 0 分钟前
RAG 好像也就只能用于忽悠下老板 AI 欲
|
45
BenHunDun 8 分钟前
简单了解过 RAG 的内容, 自己觉得一个比较大的问题是 Embedding 模型其实还在发展. 生成的 RAG 一定程度上是绑定 Embedding 的. 感觉很难推动一个大规模的落地, 一个现在 RAG 效果没有特别好, 不够成熟. 一个如果有新的, 优质的 Embedding 出现可能就会变成需要全量重建.
问题 1 感觉是用户群体的问题. 问题 2 专业化的应该如果真的要效果好估计还是要对通用模型微调训练. 还是感谢分享. 学到了一点新的东西, 针对不同的需求和资源, 调整合适的技术方案, 达到好的效果. 刚好看到前几天 Google 推了新的 Embedding 模型. |