RAG 为什么搜不全?向量检索的数学上限
RAG 为什么总说没找到?DeepMind 论文证明:「只存一串数字」的向量检索,固定维数里能装下的答案组合有数学上限——100 万文档、每问 1000 份答案,理论下限 3296 维。视频还讲清考卷结果、四条撞墙的路,以及查文件时该怎么用它。
这期讲了什么
- RAG 的捞法是「变成数字、比远近」:意思近的文字数字挨得近,但只挑最像的十份、二十份或一百份,挑不上的连出场资格都没有
- 数学上限:固定长度的数字串能塞下的「答案方向」有上限;100 万份文档、每问要 1000 份答案,理论下限就要 3296 维,而实际在用的多数不到 1000 维——有些答案从设计那天起就捞不出来
- 考卷结果:46 份文档的小考场,最强模型两下全中只有 54.3%、放宽到前 20 名也只有 97.7%;5 万份完整版前 100 名命中不到两成;而 1995 年出自论文的关键词老办法 BM25 拿到 93.6%,小考场直接满分
- 四条路都撞墙:加长数字串到 4096 维也只撑到 2.5 亿份文档;同领域微调前 10 名命中只有 2.8;通用榜单状元在这张卷子只有 4.8 分;换回关键词一遇同义词掉 89% 以上
- 半年后有人换存法翻了盘:一篇文档给每个词各存一串数字,同一张卷子做到 98.0%,证明天花板是「只存一串数字」这个做法的,不是搜索本身的
文字稿
AI 怎么捞材料:把文字变成一串数字比远近
RAG,就是 AI 回答你之前,先去资料堆里捞一遍,再拿着捞回来的东西写答案。你把一堆文件丢给它,问一个你确定有答案的问题,它偏偏回你一句:没找到。换个说法再问,还是没找到。文件明明放在那儿,它翻来翻去,就是告诉你没有。可如果,问题根本不在你的问法上呢?
AI 找东西,不靠翻目录。它先把每段文字变成一串数字,意思越近的文字,数字挨得越近:「苹果」和「水果」离得近,「苹果」和「螺丝刀」离得老远。你问问题,它把问题也变成一串数字,挨个跟每份文件比远近,最近的就是它认为的答案。你换个说法问,比如「谁爱吃水果」,因为数字挨得近,它还是能找到提到苹果的那份文件。这正是它比搜关键词聪明的地方,可这份聪明是要拿东西来换的:它不会把全部文件摆出来,只挑最像的那几份,挑不上的连出场资格都没有。
这套捞法眼下最主流,但它只是捞法的一种。这是谷歌旗下 DeepMind 团队研究出来的结论,论文 2025 年 8 月放出、2026 年 3 月更新第二版,被 ICLR 2026 收录。第一作者 Orion Weller 同时在约翰霍普金斯大学做研究,论文标题直译就是「关于向量检索的理论局限」,搜这个名字能找到原文。更麻烦的是,捞不到的时候它往往不老实说没找到,而是拿不相关的材料硬凑一个像模像样的答案。
数学上限:一串数字装不下所有答案组合
文件一多,麻烦就来了。一组答案需要一个专门的方向:你问「谁喜欢苹果」,答案可能是乔恩;你问「谁喜欢苹果也喜欢夏威夷披萨」,答案就是乔恩和玛丽。答案一多,方向就要跟着多。每个方向都得跟别的方向保持距离,可空间就这么大,总有两组答案会挤在一起,谁也分不开谁。
而这串数字的长度是固定的。一个固定长度的数字串里,能塞下多少互不干扰的方向,是有上限的——这是被证明过的数学结论,跟模型努不努力、数据多不多都没关系。数字摆出来更直观:一百万份文档、每份答案要拿出一千份,光理论下限就要一串 3296 个数字,而真实在用的大多不到一千个。一个「只存一串数字」的搜索系统,从设计那天起,就有答不出来的题。
一张简单考卷:四条路全撞墙
光说数学没感觉,作者就做了张考卷,简单到可笑:文档就是「乔恩喜欢苹果」这种一句话,爱好是程序随机分配的。小考场 46 份文档配 1000 个问题,46 份里挑 2 份当答案有 1035 种挑法。结果,能两下全中的只有 54.3%;最好的模型放宽到前 20 名也只有 97.7%,给了 20 次机会还是做不到全对。换成 5 万份文档的完整考场更难看:所有「只存一串数字」的模型,命中率都不到 20%,放宽到前 100 份也不到两成。考卷的数据和代码都公开了,谁都能自己下载跑一遍。
那有没有一个办法能捞出来?还真有一个:只会认关键词的老办法,出自 1995 年的一篇论文,是检索领域用了三十多年的老基准。它认字不认意思,在这张卷子上拿到 93.6%,小考场直接满分——一堆最聪明的新模型,输给了一个不知道「意思」是什么的老古董。
接下来四条路都试了。加大数字串?就算拿标准答案去优化,4096 个数字也就撑到 2.5 亿份文档,而且串越长越占地方、越慢,只是把崩盘点往后推。多训练?同领域数据微调一遍,前 10 名命中率从几乎为零涨到 2.8。换更强的模型?通用检索榜单的状元在这张卷子上只有 4.8,直接垫底。回到关键词?把卷子里的词全换成同义词,老办法的成绩直接掉了 89% 以上,反而比新模型还差。四条路都堵上了,剩下的可能只有一个:这套「一串数字」的做法,本身装不下那么多答案。
半年后翻盘,和你以后该怎么用
半年后,还是那张考卷,有人换了个做法:一篇文档不只存一串数字,而是存一排,每一个词都有自己的数字串。同一张卷子他们做到 98.0%,成了第一个在语义检索上超过关键词老办法的模型,成绩公布在公司官方博客里,同期几家头部厂商最强的模型全都不到 10 分。代价当然有:一排数字占的地方大得多。但至少证明了,那个天花板是「只存一串数字」这个做法的天花板,不是搜索本身的。这张考卷还被收进了业界最常用的评测榜单,成了新模型绕不开的必考题。
对普通人来说,最值钱的是几条能直接用的判断。第一,AI 说「没找到」未必是你的问题,有些答案组合数学上就是表达不出来,别对着同一个问题改措辞改到天亮。第二,带编号、型号、错误码的东西别指望它按意思找,像 ERR-502 这种错误码本来就是关键词的活,语义搜索会成批漏掉;合同条款、产品规格、政策文件这种半结构化内容最容易踩坑。第三,「同时满足好几个条件」的问法最容易翻车,比如找一份 2024 年 Q3 华东区、还签了按效果付费条款的合同,不如拆成几步、每问只碰一个条件。第四,重要的事自己再核一遍,检索漏掉文件时,AI 可能一本正经给你编一个像模像样的答案。第五,选 AI 工具时多问一句:是纯数字比较,还是混了关键词?后者在查文件、编号、条款上可靠得多——有工程师分享过公司的做法,两套各跑一遍再合起来,照做就行。
说到底,AI 说「没找到」,是它那套捞法天生装不下某些答案。摸清这块盲区,它就是顺手的工具;摸不清,你就被一句「没找到」反复折磨。
常见问题
RAG 搜不到是问法不对吗?
不一定。DeepMind 的论文证明,「把文字变成一串数字比远近」这种向量检索,固定维数能表达的答案组合有数学上限——有些答案换一百种问法也捞不出来。所以「没找到」未必是你的问题,也未必是 AI 笨,是那套捞法天生装不下某些答案。
向量检索为什么有理论上限?
因为固定长度的数字串里,能塞下多少互不干扰的「答案方向」是有上限的。每组答案需要一个专门指向它的方向,方向多了必然挤在一起。论文算过:100 万份文档、每问要 1000 份答案,理论下限要 3296 维,而实际在用的多数不到 1000 维。
BM25 为什么能赢最聪明的模型?
BM25 是 1995 年出自论文的关键词检索方法,认字不认意思。在 DeepMind 那张 46 份文档的合成考卷上它拿 93.6%、小考场满分,因为答案恰好靠字面对应。但它不是万能钥匙:把卷子里的词换成同义词,它的成绩直接掉 89% 以上,反而比新模型还差。
用 AI 搜文件时应该注意什么?
带编号、型号、错误码的内容别指望语义搜索,那是关键词的活;「同时满足好几个条件」的问题拆成几步问;重要的事自己再核一遍——检索漏文件时 AI 可能一本正经编答案;选工具时优先选「语义加关键词」混跑的方案。