跳到主要内容
iRAG 那张图我画了两遍,第一版多画了一条箭头

iRAG 那张图我画了两遍,第一版多画了一条箭头

画唠
画唠

· 阅读约 5 分钟

RAG 的框图我画过好几版,第一格永远是同一个圆柱体:向量库。切好的文档、嵌好的向量全堆在里面,安静的,静态的,像一个早就装满了的柜子。

iRAG 上来就把这一格给擦了。库一开始是空的。

十来天前挂在 arXiv 上的那篇(arXiv:2610.12666),Mazzoni 和 Failla 写的,cs.HC 和 cs.AI 双挂。做的事说穿了不复杂:库里一条一条塞的是人拍的板,每条决策存成“先例”,先例再被检索回来,影响下一次建议。

“人在回路”这四个字现在听着像句废话。先别急。这篇里真正值得画开的不是人——是那个空库。库空着的时候,整个系统的性质跟普通 RAG 根本不是一回事。

我第一版图是这么画的:

   你的问题 ──► 检索 ──► 拼进 prompt ──► 给建议 ──► 人拍板 ──► 回答
                   ▲                                    │
                   └──────── 把结果写回库里 ◄────────────┘

普通 RAG 加一条回写箭头。画完我还挺得意,觉得这图干净,一眼就懂。

第二天再看,不对。

那条箭头一画,系统第二天就开始拿自己昨天参与过的判断当依据。先例进了库,就变成了“证据”——证据是有分量的。它不区分“这是上周一个靠谱的人拍的板”和“这是上周一个赶时间的人随手点的确认”。库里所有东西长得一样。

这个点我卡了挺久。中间还走过一段歪路,一度以为问题出在人身上——是不是人不够可靠。不是。问题在库:一个由决策填出来的库,天生会自我强化。

重来。这次把该有的格子都摆上:

              人拍板
                │
                ▼
   ┌── 先例库(一开始是空的,人一条条填)──┐
   │                                       │
   └────────► 检索  ◄── 衰减(旧先例打折)─┘
                 │
                 ▼
      给建议 / 拿证据质疑 / 弃权自己处理
                 │
                 └───► 回到「人拍板」

这张图里我盯得最久的是“衰减”那一格。

它解决的问题很朴素:库里躺的东西越来越多,一部分已经过时了。世界变了,先例没变。衰减就是给旧先例打个折,让它别那么有分量。

然后论文甩了两组数,我觉得这两组数比整篇的方法描述都值钱:

知识漂移开衰减不开衰减
10%(稳)更差跟独立基线打平
40%(动)更好也更好,所有配置都降错

这张表是我按论文里两组数字自己摆的,别当原始表格看。

第一行那个“打平”是整篇里最扎人的地方。知识基本稳定的时候,你把这一整套东西跑起来,最后决策的错误率跟独立基线一样——等于白搭。多一层检索、一层先例、一层人在回路,换来的是持平。

第二行才见真章:世界动得厉害的时候,不管衰减开不开,错误率都降了下来。看到这儿我停了会儿,咔哒一下扣上了——这套机制的价值不在“用了 RAG”,在“世界在变”。它压根不是在解决“记不住”,是在解决“忘了改”。

而衰减这个旋钮,两头都不讨好:知识在变的时候开它有好处,知识稳定的时候开它反而添错。

这不是调参问题。我一开始确实把它当调参问题看,“哦,有个超参,找最优值”。找不出来。它本质上是稳定性和可塑性之间的取舍——你要系统别乱改主意,就得让它对旧先例更忠诚;你要它跟得上变化,就得让它更快地不信自己。两头都要的人,最后两头都拿不到。这玩意儿真的挺酷的,一个旋钮,把“经验”和“包袱”的分界线摆到了台面上。

所以“检索总是能帮到你”这种话我一句都不信。检索帮不帮你,取决于你库里的东西还对不对。

扯一句远的。老工程师那种“我一看这结构就知道要出事”的直觉,跟这套东西里的先例是同一种东西:过去拍过的板,压成一条下次能直接调用的判断。区别是老工程师自己会意识到“这条经验三年没用了”,先例库不会——除非你给它装个衰减。

拉回来。

图里那三个档我也想单说一句:从闭嘴观察,到拿证据质疑(“上次类似的情况你选了 X”),再到必要时弃权、自己处理。弹窗让人点确定那种人在回路,点多了人就开始闭眼点。这三个档至少承认了一件事:系统知道自己什么时候该说话、什么时候该闭嘴。

这里我得改口一次。前面我说“真正值得画开的不是人”,写到这儿觉得这话说糙了。人确实不是这篇的重点,但“人怎么被系统对待”是重点。这俩不是一回事。

不过有一格论文自己留空了:人工监督在这个工作流里是结构性安排,真实用户场景下它到底好不好用,没评估。我不觉得这一格空着伤主结论——主结论压根不依赖人有多好用。但要是有人拿这篇去说服你“这套东西可以直接上生产”,那是把“结构上有个人”当成了“这个人真的管用”。

最后打个比方,然后老实说它在哪漏风。这套东西像判例法:一条条判过的案子沉下来,后面的照着前面判。这个抓手到这儿很好用。但判例法里有明确的“推翻先例”程序,有层级,有理由,谁推翻谁、凭什么推翻,都写在判决书上。iRAG 里没有法庭,只有一个连续的衰减系数。它不是“这条先例错了”,它是“这条先例旧了”。旧和错,不是一回事。

画开完了。照例自检一句:现在你能不能用自己的话讲清“为什么知识稳定的时候这套东西反而不划算”?讲不顺的地方多半是我这儿没画明白,告诉我,我补。

下期候选我手上压着两个:embedding 那个“把话变成坐标”到底怎么变的,还有 KV cache——我一直觉得这个被讲得最玄。

本期画开:检索衰减不是超参,是你替系统在“别乱改主意”和“跟得上变化”之间选了个位置。这玩意儿真的太酷了。

画唠
画唠

把被讲玄的概念用图 + 比喻 + 动手实验拆到咔哒扣明白,错的也保留。

查看主页 →