跳到主要内容

CoG 那篇论文我只抄走了「反思」这一步

abanana
abanana

· 阅读约 6 分钟

前两周翻到一篇讲图检索的论文,CoG,全称 Cognition on Graph,arXiv:2609.12791,EMNLP 2026 主会收了。点进去本来是想看它怎么在多跳问答上刷分的,结果刷分那部分我基本跳过去了——七个基准、比当时的 SOTA 好、探索效率更高,这些我信,但对我手上那个小检索流程没什么用。让我停下来的是它对现有方法的诊断:那批方法属于被动、图驱动的探索,盲目跟随图拓扑,既不能根据问题上下文或探索进展调整,也谈不上图跟文本之间的双向协同。

这话说的是那些方法,但也是我。我平时怎么干的:丢一个问题给 agent,它去检索,回来一堆片段,我看一眼觉得不对,换个说法再问一遍。整个过程里没有任何一个环节在问「我现在到底还缺什么」,我只是在反复重新开始。检索次数不少,进展是零。这毛病跟图拓扑一点关系都没有,纯粹是我没给流程留出反思的位置。

先把框架拆开看看。CoG 是个不需要训练的框架,跑的是「计划—探索—反思」的循环:主动制定调查计划,执行图加文本的双源检索,再根据当前进展反过来调整策略。里面我唯一觉得新鲜的是最后那一步。计划和双源检索这两件事,周围搭检索的人基本都在做,做得好不好另说;反思我一直没写进去过,不是忘了,是不知道里面该填什么——「让它自己想想下一步」这种 prompt 我写过,效果就是它每轮都在说还需要更多信息。

所以这篇只讲一件事:反思那一步我具体写成了什么样子,以及踩到的三个坑。

第一步,把反思拆成三个固定问题

最早那版 prompt 是「根据当前进展判断下一步」,太虚,模型给的回答也很虚。后来改成每轮检索结束后先不给结论,只回答三个问题:

每一轮检索结束后,先不要下结论,回答:
1. 已确定的部分是什么,分别出自哪一段检索结果;
2. 还缺的是哪一块,缺的是实体之间的关系,还是缺解释;
3. 下一轮该往图那边走,还是往文本那边走。

看着像废话,但把「还缺什么」逼成必须指明出处的一句话之后,它就没法用「信息不足」糊过去了。第 3 问是分岔口——我复盘之前的日志才发现所有轮次都在往文本里扎,图那边基本没动过,写成显式的一问,这个偏差才看得见。

第二步,让文本里抽出来的实体回喂给图查询

论文里说的双向协同,落在我这儿就是一句话:上一轮从文本片段里抽出来的实体名,直接当下一轮图查询的种子。

seed = extract_names(上一轮判定为相关的片段)
graph_query(seed)

我这儿的「图」不是真图数据库,就是一批文档之间的引用关系表,别被这个词唬住。重点在方向——之前我的流程是图查到东西喂给文本,单向的,文本里冒出新名字就丢了。加上这条之后检索路径会自己延伸,有几轮它顺着一个人名查到了我完全没往那个方向想过的另一组文档。

第三步,给循环设一个硬止损

反思循环最舒服的状态是永远不收敛,因为每一轮它都能想出一个新的「还缺什么」,然后你就一轮一轮补下去。我给的条件是三轮,到第三轮不管收没收,输出当前最好的答案加一张没填上的缺口清单,不许继续。

轮次 >= 3 → 停止探索,输出答案 + 缺口清单

这个数字没什么道理可讲,纯粹是我翻了两晚检索日志之后觉得自己最多忍三轮,换成五轮也行,关键是得有个数。

第四步,缺口清单单独存一份

和最终答案分开存,文件名带日期:

notes/gaps-2026-09-23.md

💡 小技巧:带上日期之后按时间翻比在同一个文件里往前滚轻松得多。

这一条的用处写的时候看不出来,攒到十几份之后就明显了:同一类缺口反复出现,说明问题不在问法上,是我的检索源里根本没有这块内容。我有一份清单里连着出现五次「缺时间线」,回头去翻才发现那批文档本身就没按时间组织过,再怎么调 prompt 也补不上。

踩到的三个坑

第一个上面提过了:反思不能开放。最早那版让它自由判断下一步该做什么,它就会凭空列出一堆当前语料里根本取不到的东西,比如「需要补充该领域的背景知识」。改成只允许它从已检索到的内容里找矛盾、找断点之后,输出才变得能执行:

✗ 需要补充该领域的背景知识
✓ 缺的是 A 与 B 之间的关系,线索在第 2 段和第 5 段

第二个在实体抽取。一开始我把整段文本丢进去抽名字,抽出几十个词,噪音很大,图查询被带得乱七八糟。后来只从「我判定为相关」的那几段里抽,命中率就上来了。这个改动小到不值得单开一段,但效果差别是真的明显。

第三个我到现在也没完全搞清楚。论文里说的动态反思,具体用什么信号判定「这个方向该换了」,摘要里没写细,我也没去翻它的代码——它给了代码和数据集,链接就在摘要里,这次是懒了。我自己现在用的是最土的办法:连续两轮没有新实体进图,就认为该换方向。这个条件什么时候会误判,我还没碰到。这条先记着,等哪天真的被卡住了再回去读它的实现。

常见的一个疑问

有人可能会问,没有知识图谱怎么办,抽实体去查什么。我一开始也卡在这儿,后来想明白要的不是图本身,是「从文本回到索引」这个方向得通着——哪怕只有一堆 Markdown 文件,文件之间的链接、共用的标签、反复共现的关键词,都能当那个被回喂的种子。有没有图数据库是次要的。

划重点:那篇论文里我真正拿走的是反思这一步,计划和双源检索很多人已经在做,不必当成新东西;反思必须约束在已有检索结果的范围内,让它凭空想缺口只会得到没法执行的东西;循环要有止损,三轮是我的上限,这个数字你自己定;缺口清单单独存,重复出现的缺口通常说明问题在源不在问法。

这篇就记到这儿。你要是也在搭类似的小流程,可以先把反思那一步加进去跑几轮,看看它写出来的缺口清单长什么样,多半会比我预想的难看。

abanana
abanana

把自己踩过的坑整理成一篇能复现的笔记,写给三个月前的自己看。

查看主页 →