RAGU:一篇替 GraphRAG 量出天花板的論文

1 前言
RAGU 是 ITMO University 團隊在 2026 年 7 月放上 arXiv 的 GraphRAG 引擎,附帶一個 7B 的抽取模型 Meno-Lite-0.1,兩者都開源(pip install graph_ragu,MIT 授權)。論文的主張是:把知識圖的「抽取」跟「整併」拆成兩個階段,圖會更乾淨,檢索也會更完整。
這篇文章要談的不只是它做了什麼,而是把它的實驗設計拆開來看之後剩下什麼。結論會有點反直覺:RAGU 論文本身的研究貢獻很薄,但它的數據表裡藏著一個很少有人願意發表的數字——整套 GraphRAG 相對於「什麼圖都不建、純向量檢索」的淨貢獻,只有 1.2 到 4.3 個百分點。這個數字比論文想證明的任何一件事都有價值。
沿路會帶到三個脫離這篇論文也成立的觀念:去重跟分群為什麼是兩種不同的任務、圖分群跟向量分群的「像」差在哪,以及最重要的——檢索指標好不等於答案好。
2 GraphRAG 在解什麼問題
先把背景鋪一下。標準的 RAG 做法是把文件切成 chunk、轉成向量存起來,使用者提問時撈出最相似的幾塊塞進 prompt。這種檢索是扁平的:每個 chunk 各自獨立,系統看不到跨文件的關聯。如果答案需要「A 文件提到的人」跟「B 文件提到的公司」之間的關係,向量相似度撈不出來。(切分策略本身就是一門學問,可以參考 Adaptive Chunking 那篇的討論。)
GraphRAG 的解法是先請 LLM 把文件裡的實體(人、組織、產品)跟關係抽出來建成知識圖,檢索時可以沿著圖上的邊走。這條路線上的代表系統是 Microsoft GraphRAG、LightRAG 跟 HippoRAG 2。(也有反方向的做法,例如 SAG 就主張乾脆別建離線知識圖,改成查詢時用 SQL 把事件連起來。)
RAGU 認為現有系統有三個問題:一次性抽完就建圖,產生大量重複與噪音實體,沒有跨 chunk 整併的機制;預設要用 GPT-4 等級的模型做抽取,成本太高;開源框架工程品質參差,甚至有對 LLM 原始輸出直接跑 eval() 這種不安全路徑。它針對這三點分別提出多步驟 pipeline、7B 的 Meno-Lite-0.1,以及一套認真寫過的工程實作。
3 「7B 就夠了」這個假說,還有它的問題
論文最核心的科學主張是:LLM 在 RAG pipeline 裡做的事——讀懂 context、抽實體、摘要、從 context 生答案——屬於語言能力,而不是世界知識。語言能力隨模型規模成長很慢,世界知識成長很快。所以抽取端用 7B 就夠。
證據是這張圖:

兩個任務的性質差在哪:CheGeKa 是俄語常識問答,沒有 context,純粹考背下來的知識;MultiQ 是多跳問答,所有事實都在 context 裡。論文報的數字是 0.5B 到 72B 之間,CheGeKa 成長 21.1 倍,MultiQ 只有 4 倍。
這個比法有灌水成分。CheGeKa 在 0.5B 時 F1 幾乎貼地(約 0.015),分母趨近於零,任何成長換算成倍數都會很誇張;MultiQ 起點高(約 0.12),而且大概在 32B 就打到天花板(約 0.57 之後持平),倍數小有一部分是因為它飽和了。真正站得住腳的是同一張圖裡的 log-linear 斜率 0.65 對 0.26,至少是同一個尺度上的比較。論文卻把「21.1 倍 vs 4 倍」放進 abstract 當主打。
還有兩個問題。第一,MultiQ 測的是「讀 context 回答問題」,但 pipeline 真正的關鍵動作是抽出結構化的實體與關係——而論文自己的資訊抽取實驗顯示,純 Qwen2.5 家族在抽取上是單調隨規模上升的(7B 0.356 → 14B 0.396 → 32B 0.416)。第二,兩個 benchmark 都是俄語,CheGeKa 更是俄國文化常識題,拿來代表「world knowledge」再推論到英語醫療語料,跨度不算小。
3.1 真正該有的說法:任務落在飽和區
「語言能力不隨規模成長」這句話跟現實是矛盾的。現在的 SOTA 模型明顯就是 scaling law 的展現,推理能力隨模型與資料規模一路變強。比較準確的說法應該是:
這個 pipeline 裡的任務難度太低,低到落在 scaling 的飽和區。
差別在天花板效應。「把這句話裡的人名抽出來」這種任務的難度分佈集中在容易區,7B 可能已經 85 分、72B 也只有 90 分,本來就沒有空間讓規模發揮;AIME(數學競賽題)、GPQA(研究生等級的科學問答)那種多步推導才有難尾巴,7B 拿 5 分、大模型拿 80 分,規模的效果才看得出來。
實務推論是一樣的——pipeline 內部負責「讀懂並搬運資訊」的元件,小模型通常夠用。但理由是「任務簡單」,不是「規模無效」。搞錯理由,你會把它錯誤地套用到真正需要推理的環節上。
順帶一提,論文的證據來自 Qwen2.5-Instruct,2024 年的非 reasoning 模型。現代推理模型的主要 gain 來自 RL post-training 這條軸線,論文完全沒碰到。
3.2 為什麼論文非要這個假說不可
這點值得單獨講,因為判讀其他 system paper 時也用得上:沒有這個假說,Meno-Lite-0.1 就不是研究貢獻,只是省錢。
沒有假說 →「我們訓了個小模型,因為我們買不起大的」 = 工程妥協
有了假說 →「我們發現大模型是浪費的,小模型原理上就夠」= key insightabstract 裡那句 “A key insight motivates a compact extractor” 就是在做這件事:為一個先有的決定補上事後的理論理由。它同時還撐起了成本敘事($0.001/doc vs $0.10/doc,只有在「小模型不犧牲品質」成立時才有說服力),並且在後面 Meno-Lite-0.1 的優勢消失時,提供一個把壞消息改寫成好消息的角度。
4 方法:六個步驟,原創的只有一格

流程本身很好懂:
Documents
↓ Step 1 Chunking
Chunks
↓ Step 2 Entity & Relation Extraction ← 兩階段、有 schema 約束
Entities & Relations(很髒:重複、別名、噪音)
↓ Step 3 Deduplication & Summarization ★ 這篇唯一的原創處
Entities & Relations(乾淨版)
↓ Step 4 Graph Construction
↓ Step 5 Community Detection(Leiden)
↓ Step 6 Community Summarization跟 Microsoft GraphRAG、LightRAG 相比,差別只有 Step 3 這一格,其他每一格都是既有做法。
「先洗再建圖」在原理上是說得通的。社群偵測是看圖的連接結構在分群,如果同一個實體被拆成三個節點(「Dennis Ritchie」/「Ritchie」/「D. Ritchie」),本來該集中的 3 條邊會被分散成 1+1+1,這個節點在結構上就變得不重要,可能被分進錯的社群,甚至變成孤立點。換句話說,抽取階段的噪音會經過社群偵測放大成結構性錯誤,而且下游修不回來。
4.1 Step 2:兩階段抽取,把生成變成選擇題
抽取被拆成兩趟 LLM 呼叫:
Stage 1: chunk → 抽實體 → 用 NEREL schema 驗證型別
產出已驗證的實體集合 E = {e1, e2, ...}
Stage 2: chunk + E → 抽關係
約束:每個關係的 source_entity 與 target_entity
必須是 E 裡面已驗證過的名字它解決的是懸空的邊。單次抽取時,LLM 常在關係裡寫出實體清單裡不存在的名字——實體抽到「Bell Laboratories」,關係卻寫「Bell Labs」,邊就指向一個不存在的節點。兩階段先把「有哪些節點」定死,第二階段就從開放式生成變成封閉集合上的選擇題。
這個 pattern 可以脫離 GraphRAG 單獨用:任何時候要 LLM 產生「指向既有事物」的輸出,先把合法選項定死,再讓它選。跟 constrained decoding 是同一個思路。
至於型別怎麼定,論文用的 NEREL schema 有 29 種實體型別、49 種關係型別,來自一套俄語新聞語料的標註體系。論文自己在 Bias 段承認換語言或換領域可能要重新設計 schema——而它挑出來的 demo 就露餡了。那段 Dennis Ritchie 的文字抽出 8 條關係,論文展示其中 5 條:
| Source | Target | Relation |
|---|---|---|
| Dennis Ritchie | C Programming Language | WORKS_AS |
| Dennis Ritchie | Unix Operating System | WORKS_AS |
| Dennis Ritchie | October 12, 2011 | DATE_OF_DEATH |
| Alistair E. Ritchie | Dennis Ritchie | PARENT_OF |
| Bell Laboratories | Murray Hill | LOCATED_IN |
前兩條是錯的。原文說 Ritchie 創造了 C 語言,WORKS_AS 的語意是「擔任某職位」,完全不對。這是 schema 覆蓋不足的典型症狀:NEREL 裡沒有 CREATOR_OF 這類關係,LLM 被迫在 49 個型別裡挑一個最接近的,就挑錯了。而這還是論文自己挑出來展示的最佳案例,5 條裡錯 2 條。
4.2 Step 3:consolidation,論文的核心賣點
論文對這一步的全部描述只有三句話:EntitySummarizer 按 (name, type) 分組,對重複提及很多的實體套用 DBSCAN 分群加上 LLM 摘要,RelationSummarizer 比照辦理。abstract 則稱之為 DBSCAN-backed deduplication。
要理解它在幹嘛,得先知道抽取出來的東西是「提及(mention)」,不是節點。同一個真實世界的實體,在 9 個 chunk 裡會產生 9 筆各自獨立的 mention:
chunk_1: ("Dennis Ritchie", PERSON, "C 語言的創造者")
chunk_2: ("Dennis Ritchie", PERSON, "Unix 共同開發者")
chunk_3: ("Dennis Ritchie", PERSON, "貝爾實驗室研究員")
chunk_4: ("Dennis M. Ritchie", PERSON, "1983 圖靈獎得主")
chunk_5: ("Ritchie", PERSON, "K&R 一書的作者之一")
chunk_6: ("Alistair E. Ritchie", PERSON, "貝爾實驗室工程師")
chunk_7: ("Bell Laboratories", ORG, "位於 Murray Hill 的研究機構")
chunk_8: ("Bell Laboratories", ORG, "Unix 的誕生地")
chunk_9: ("Bell Labs", ORG, "AT&T 旗下研究部門")直接建圖會得到 9 個節點,正確答案是 3 個。
第一層是便宜的做法:字串完全相同、型別也相同的合成一組。純 hash 比對,零 LLM 呼叫,9 筆變 6 組。但它只能處理「寫法完全一樣」的重複——「Dennis Ritchie」「Dennis M. Ritchie」「Ritchie」明明是同一個人,「Bell Laboratories」跟「Bell Labs」明明是同一個機構,一個都合不掉。字串比對抓得到重複,抓不到別名。
第二層才是貴的:把每一組當成一個點丟進 embedding 空間跑 DBSCAN。DBSCAN 的規則是,在半徑 eps 內至少有 min_samples 個鄰居的點算核心點,核心點跟鄰居連成一群,連不上任何群的點標成 noise。合完之後再讓 LLM 把該群所有描述融成一段 canonical 描述。所以這一層同時做兩件事:DBSCAN 決定合誰,LLM 決定合出來長什麼樣。
這個機制最脆弱的地方是 Alistair E. Ritchie,Dennis 的父親。兩人的名字字串高度相似、描述也都跟貝爾實驗室有關,eps 稍微放寬,父子就被合併成同一個節點,而且下游沒有任何機制救得回來。
第二層還有一道門檻:只有「重複提及很多」的實體才會啟動,因為每個 cluster 至少一次 LLM 呼叫,加上全體 embedding,十萬份文件可能有幾十萬個候選組。這個取捨合理,但論文沒討論它的代價——只出現一兩次的實體永遠不會被 consolidate,而多跳問答的關鍵橋樑實體常常正好是低頻的。這可能是 RAGU 在 MuSiQue 上落後的原因之一:consolidation 優化的是高頻主幹,多跳推理靠的是低頻支線。
論文另外有三件事沒交代:embedding 的對象到底是實體名稱、描述、還是名稱加描述加來源 chunk(這直接決定能不能合併「Bell Labs」跟「Bell Laboratories」);eps 跟 min_samples 怎麼設(DBSCAN 對 eps 極度敏感,這是整個機制最需要調的旋鈕);「many duplicate mentions」的門檻是多少。而且敘述本身前後不一致——abstract 說 DBSCAN 用於跨名字去重,方法段讀起來卻像是先用 (name, type) 分好組、再在同一組內部做 DBSCAN。後者根本無法合併別名。論文的文字本身無法判定,要確認只能翻原始碼。
5 觀念一:去重不是分群
RAGU 用 DBSCAN 做去重看起來理所當然,但去重(entity resolution)跟分群(clustering)其實是兩種性質不同的任務:
| 分群 Clustering | 去重 Entity Resolution | |
|---|---|---|
| 有標準答案嗎 | 沒有。分 3 群或 5 群都可能對,取決於用途 | 有。“Bell Labs” 跟 “Bell Laboratories” 就是同一個 |
| 任務本質 | 無監督的結構發現 | 對每組 pair 做二元判斷:同一個?是/否 |
| 群數相對於資料量 | k « n(1000 個客戶分 5 群) | k ≈ n(10 萬個 mention 可能有 7 萬個實體) |
| 群的大小 | 大,幾十到幾千 | 極小,多半 1~5 |
| 能不能評估 | 只能用 silhouette 之類的代理指標 | 可標註 pair,直接算 precision / recall |
| 錯了的後果 | 換個分法重跑就好 | 誤合併不可逆,錯誤會傳到下游 |
最關鍵的是群數跟群大小那兩列。所有幾何式分群演算法的設計前提都是「少數幾個大群」,靠的是密度或距離的全域結構;而去重的真實結構是「幾萬個大小 1 到 3 的微群」,那個空間裡根本沒有全域結構可言。
這造成三個具體後果。
幾何式演算法在這裡會退化。 去重時一個實體可能只有 2 個 mention,所以 min_samples 必須設到 2。而 min_samples=2 的 DBSCAN,數學上等價於「相似度門檻加上 connected components(union-find)」。也就是說,在去重所需的參數設定下,DBSCAN 會自動塌陷成 union-find,只是多背了一個難調的 eps。
去重可以用「嵌不進向量空間」的訊號。 分群演算法只能看向量距離,但去重最有用的訊號常常不是幾何的:型別必須相同(PERSON 絕不併 ORGANIZATION)是硬規則;編輯距離、縮寫展開(Bell Labs → Bell Laboratories);有沒有共用 ID、URL、電話。最後還有一條特別重要——兩個名字出現在同一個 chunk 裡,幾乎確定是兩個不同實體,但在 embedding 空間裡它們反而更近。這個負向證據,向量距離完全看不到。
錯誤代價不對稱。 誤合併遠比漏合併嚴重:漏了頂多資訊分散,合錯了是事實層面的錯誤而且很難察覺。pairwise 框架可以直接把門檻調得保守一點,clustering 的參數(k、eps)跟這個代價沒有直接對應。
實務上的標準去重流程長這樣,注意它整條都不是 clustering:
1. Blocking:用便宜方式縮小候選對(同型別、首字母相同、BM25 top-k)
2. 對候選對算相似度(embedding cosine 或 fuzzy string)
3. 相似度 > 門檻 → 連一條邊
4. 取 connected components(union-find)→ 每個連通塊 = 一個實體唯一的坑是鏈式蔓延:A≈B、B≈C,但 A 跟 C 完全不像,仍然會被併成一群。(DBSCAN 也逃不掉,它的 density-reachable 本質上就是帶密度條件的 connected components。)
所以對 RAGU 的評價是:DBSCAN 在這裡不是必要的,「門檻加 union-find」能做到同樣的事,而且更好調、更好 debug。選 DBSCAN 讓 abstract 好看(DBSCAN-backed deduplication 聽起來就是比 threshold-based merging 學術),但技術上沒有非它不可的理由。
順帶附上一條實務建議:想用 DBSCAN 的時候,先試 HDBSCAN。它是 DBSCAN 的階層式改良版,把 eps 這個參數拿掉了(改成掃過所有 eps 值再挑最穩定的分群),只留 min_cluster_size,語意直觀很多。DBSCAN 最痛的兩點——eps 難調、資料密度不均時整組分群失效——它大致都解決了。
6 觀念二:圖分群跟向量分群,是兩種不同的「像」
Step 5 的社群偵測用的是 Hierarchical Leiden,這部分跟 Microsoft GraphRAG 相同。它的目標函數叫 modularity(模組度,記作 Q),白話講就是:
這一群內部的邊,比隨機亂連的情況多出多少?
為什麼要跟隨機比?因為光看「內部邊很多」會被高連接度的節點騙——一個連了 100 條邊的節點,跟誰都會有很多內部邊。所以要扣掉「純粹因為它度數高、本來就該有的邊數」:
Q = Σ_c [ e_c/m − (d_c / 2m)^2 ]
m = 全圖總邊數
e_c = 社群 c 內部的邊數
d_c = 社群 c 裡所有節點的度數總和
前項 = 實際觀察到的內部邊比例
後項 = 隨機連線下的期望內部邊比例後項的平方是這樣來的:隨機連一條邊時,一端落在社群 c 的機率是度數佔比 d_c/2m,兩端都落在 c 就是平方。
拿論文自己的 demo 實算一次會更有感。那段 Ritchie 文字建出來的圖是這樣(圖裡的 70 是 Ritchie 過世時的年齡,也是抽出來的節點之一):

C語言 Unix Oct 12,2011 70
\ | / /
Dennis Ritchie
| ← 唯一的橋
Alistair E. Ritchie
|
Bell Laboratories
|
Murray Hill
|
New Jersey總邊數 m = 8,度數是 Dennis 5、Alistair 2、Bell Labs 2、Murray Hill 2、其餘各 1。
社群 1 = {Dennis, C語言, Unix, Oct12, 70}
e_1 = 4,d_1 = 9
4/8 − (9/16)^2 = 0.500 − 0.316 = 0.184
社群 2 = {Alistair, Bell Labs, Murray Hill, New Jersey}
e_2 = 3,d_2 = 7
3/8 − (7/16)^2 = 0.375 − 0.191 = 0.184
Q = 0.367
對照組:全部塞成一群
8/8 − (16/16)^2 = 00.367 大於 0,所以切成兩群比不切好。Alistair 跟 Dennis 之間那條橋被犧牲成跨社群的邊,換來兩邊各自的內聚度——這就是演算法在做的權衡。(Q 的理論上限是 1,實務上 0.3 到 0.7 表示有明顯的社群結構。)
演算法本身,Louvain 是貪婪法,反覆做兩件事:把節點移到能讓 Q 增加最多的鄰居社群,然後把每個社群壓縮成超級節點、在更小的圖上再跑一次,後者就是 hierarchical 的來源。Leiden 是 Louvain 的修正版,補上一個 refinement 步驟保證社群內部連通、順便收斂更快,可以就理解成「不會出那個 bug 的 Louvain」。
現在回到標題那句。社群偵測就是分群,只是輸入是圖而不是向量。差別在用什麼定義「像」:
| 向量分群(k-means / DBSCAN) | 圖分群(Leiden) | |
|---|---|---|
| 輸入 | 每個點一個向量 | 節點加邊 |
| 「像」的定義 | 向量距離近(語意相似) | 連得多(結構相關) |
| 會分到一起的 | 同類的東西 | 有關係的東西 |
拿上面那張圖對照就很清楚:
向量分群的結果(按語意):
群 A = {Dennis Ritchie, Alistair E. Ritchie} ← 都是人
群 B = {C語言, Unix} ← 都是軟體
群 C = {Murray Hill, New Jersey} ← 都是地名
群 D = {Oct 12 2011, 70} ← 都是數值
圖分群的結果(按結構):
群 1 = {Dennis, C語言, Unix, Oct12, 70} ← 都跟 Ritchie 這個主題有關
群 2 = {Alistair, Bell Labs, Murray Hill, NJ} ← 都跟貝爾實驗室這個地點有關向量分群給你「分類」,圖分群給你「主題」。對 RAG 來說要的是後者:使用者問「Dennis Ritchie 是誰」,你希望一次撈到他的作品、死亡日期、年齡,這些東西語意上八竿子打不著,但共同構成一個可以被摘要的主題。
所以「一個社群內部語意差很多」不是缺陷,是設計目的。GraphRAG 的整個價值主張就建立在這裡:知識圖的邊帶著語意向量看不見的關聯資訊,社群偵測是把它變現的方式。
一個好記的對照是,RAGU 同一條 pipeline 裡用了兩種「像」——Step 3 的 consolidation 用語意相似度(同一個東西的不同寫法),Step 5 的社群偵測用結構相關性(不同東西之間的關聯)。用途完全不同。
7 實驗:把混淆變因一層層剝掉
論文最漂亮的敘事是 cross-over:任務越難,RAGU 越強,最後反超 HippoRAG 2。這段我們一層層檢查。
實驗設定本身是乾淨的:四個 benchmark(GraphRAG-Bench Medical、BioASQ、MuSiQue、2WikiMultiHopQA),所有系統用同一個生成模型 gpt-4o-mini,只變建圖端的 LLM,這樣才隔離得出建圖品質;評分用 gemini-3-flash-preview 當 judge,避免自己評自己。
先把指標對齊,後面會一直用到:
| 縮寫 | 全名 | 測什麼 |
|---|---|---|
| AC | Answer Correctness | 答案語意上對不對(LLM-judge) |
| RL | ROUGE-L | 答案跟標準答案的字面重疊度 |
| Cov | Coverage | 有沒有涵蓋所有該講的重點 |
| Faith | Faithfulness | 答案有沒有忠於檢索到的材料 |
| ER | Evidence Recall | 檢索階段撈回了多少比例的相關材料 |
其中 ER 只評檢索,AC / Cov / Faith 評最終答案,RL 評字面形式。另外提醒一句:AC 是單一 judge 模型的單次評分,論文沒有 error bar、也沒有人工驗證 judge 準確度,個位數 pp 的差距不宜當結論。
7.1 第一層:答案格式
這一層是論文自己承認的,值得肯定。多跳 QA 的標準答案是短答案(「Bell Laboratories」),RAGU 預設吐長答案,HippoRAG 2 預設吐短答案。用字面重疊指標比,RAGU 是被自己的 prompt 害的,不是被檢索品質害的。
同一套檢索、只改 generation prompt 的效果:
| Benchmark | verbose AC | terse AC | 只改 prompt 的增益 |
|---|---|---|---|
| BioASQ | 56.0 | 72.9 | +16.9 pp(百分點) |
| 2Wiki | 46.6 | 58.0 | +11.4 pp |
| MuSiQue | 43.5 | 40.1 | −3.4 pp |
ROUGE-L 更誇張,BioASQ 從 12.2 跳到 48.7。+16.9 pp 是「換個 prompt」買來的,比論文任何一項方法貢獻都大。
扣掉格式之後,RAGU 對 HippoRAG 2 的真實對照(terse 設定下的 AC)是這樣:
| Benchmark | RAGU | HippoRAG 2 | 差距 |
|---|---|---|---|
| BioASQ | 72.9 | 72.4 | +0.5 pp(打平) |
| 2Wiki | 58.0 | 63.5 | −5.5 pp |
| MuSiQue | 40.1 | 54.4 | −14.3 pp |
論文說這是「互補的強項而非全面壓制」,這個說法站得住——但要注意,扣掉格式後 RAGU 是追平或落後,沒有任何一項贏。
7.2 第二層:NaiveRAG 才是照妖鏡
這是同一張表裡最重要、但論文正文一個字都沒分析的對照。
NaiveRAG 就是 RAGU 自己的 NaiveSearchEngine——同一套程式、同一個 generation prompt,但完全不用圖。所以「RAGU vs NaiveRAG」是全篇唯一乾淨的「圖到底有沒有用」對照:
| Benchmark(terse, AC) | NaiveRAG(不用圖) | RAGU(用圖) | 圖的淨貢獻 |
|---|---|---|---|
| BioASQ | 71.7 | 72.9 | +1.2 pp |
| 2Wiki | 53.7 | 58.0 | +4.3 pp |
| MuSiQue | 36.6 | 40.1 | +3.5 pp |
整套 GraphRAG——兩階段抽取、DBSCAN consolidation、Leiden 分群、社群摘要——相對於純向量檢索的淨貢獻,就是這 1.2 到 4.3 pp。
對比一下成本:建圖要跑一遍 LLM 抽取(論文估約 8k tokens/doc)、embedding、分群、社群摘要;NaiveRAG 只要切 chunk 加 embedding。
7.3 第三層:所謂的 cross-over 是誰在動
GraphRAG-Bench Medical 上四個難度層級的 AC(都用 Meno-Lite-0.1 建圖):
| 任務 | LightRAG | HippoRAG 2 | RAGU |
|---|---|---|---|
| Fact Retrieval | 26.2 | 72.4 | 54.2 |
| Complex Reasoning | 20.2 | 68.4 | 53.7 |
| Contextual Summarize | 22.6 | 65.0 | 64.1 |
| Creative Generation | 14.4 | 56.9 | 59.0 |
論文說 gap 從 −18.2 單調收斂到 +2.1,是「越難越強」的證據。但看 RAGU 自己那一欄:54.2 → 53.7 → 64.1 → 59.0,幾乎是平的。

所謂 cross-over,主要不是 RAGU 變強,而是 HippoRAG 2 從 72.4 掉到 56.9,跌了 15.5 pp。準確的描述應該是:RAGU 的表現對任務難度不敏感,HippoRAG 2 敏感,所以在最難的一格被追過。「在難任務上更強」跟「在難任務上比較不會退步」是兩件事,論文的敘事把後者說成了前者。何況最後那格贏的是 59.0 對 56.9,2.1 pp,落在 LLM-judge 的雜訊範圍內。
8 觀念三:檢索指標好,不等於答案好
有一組數字是真的。Creative Generation 的 Coverage:LightRAG 3.9、HippoRAG 2 34.7、RAGU 57.4。RAGU 的 Evidence Recall 在四個難度上分別是 82.4 / 74.5 / 74.8 / 53.1,四格都高過 LightRAG 與 HippoRAG 2。(絕對值隨難度下滑是任務本身變難,不影響「誰領先」這件事。)22.7 pp 的 Coverage 差距不是雜訊,也不是格式造成的,它確實支持論文的機制假說:consolidation 讓圖更完整、更連通,撈得回更多相關材料。
但這就引出整篇論文最值得想清楚的張力:如果 RAGU 檢索到更完整的證據,為什麼最終答案正確率反而輸?
關鍵在於,Evidence Recall 只測「該撈的撈到沒有」,完全不測「不該撈的有沒有撈進來」。
Recall = 撈到的相關材料 / 全部相關材料 ← ER 測這個
Precision = 撈到的相關材料 / 全部撈到的材料 ← 沒有人測兩者可以同時發生:
HippoRAG 2 的 context: [相關][相關][相關]
→ ER = 3/4 = 0.75 precision = 3/3 = 1.00
RAGU 的 context: [相關][相關][相關][相關][雜訊][雜訊][雜訊][雜訊]
→ ER = 4/4 = 1.00 precision = 4/8 = 0.50RAGU 撈到的不是「更正確的資訊」,是「更完整但濃度更低的資訊」。 而且這不是意外,是設計必然:consolidation 把同一實體的所有提及合併起來,LocalSearch 又從實體擴展到關係、再擴展到 chunk,整條路線的傾向就是多撈。Coverage 領先 22.7 pp,反過來說就是它把很多東西掃進來了。
多撈為什麼實際上會傷害答案,有三個機制。第一是干擾項:factoid 問題只有一個正確答案,context 裡多塞幾段語意相關但答案不同的材料,LLM 挑錯的機率就上升。第二是 lost in the middle,長 context 裡模型對開頭結尾敏感、中間容易被忽略,「答案在 context 裡」跟「模型會用到它」是兩回事,ER 測前者、AC 測後者。(怎麼決定要撈幾筆才夠,Adaptive-k 那篇正是在處理這個取捨。)第三是任務性質決定誰吃虧:
| Fact Retrieval | Creative Generation | |
|---|---|---|
| 需要 | 一個精確的事實 | 廣泛的相關材料 |
| 多餘材料是 | 干擾 | 資產 |
| 有利於 | 高 precision | 高 recall |
這才是 cross-over 的真正機制。RAGU 不是在難任務上變聰明,而是它一路用同一種策略(多撈),這個策略在簡單任務上是負擔、在合成類任務上才變成優勢。
論文只用一句話帶過這件事:HippoRAG 2 在 Evidence Recall 較低的情況下仍然贏得 factoid AC,反映的是它鏈式走訪在單一事實查詢上的 precision。方向是對的,但沒有任何數據支持。而最關鍵的缺口在這裡——論文列出使用的指標時包含了 Context Relevancy,正好就是回答這個問題需要的那個數字,但它在所有表格與圖裡全部沒有出現,全篇沒有任何一個數值,論文也沒有說明原因。
這個觀念脫離這篇論文也成立:優化 recall 跟優化最終正確率,在 factoid 任務上是互相拉扯的。只盯著 recall 類指標(撈回率、hit rate)會系統性地把系統推向「撈更多」,而最終答案品質可能不動甚至下降。至少要同時看 context precision,最好直接看 end-to-end 的答案指標。
9 Meno-Lite-0.1:一個尷尬的結果
單獨測資訊抽取,7B 的 Meno-Lite-0.1 確實贏過 32B:
| Model | Size | NER | Def | RE | RDef | HM |
|---|---|---|---|---|---|---|
| Meno-Lite-0.1 | 7B | 0.504 | 0.527 | 0.347 | 0.558 | 0.468 |
| Qwen2.5-32B | 32B | 0.536 | 0.528 | 0.239 | 0.599 | 0.416 |
| Qwen2.5-14B | 14B | 0.510 | 0.518 | 0.222 | 0.583 | 0.396 |
| Qwen2.5-7B | 7B | 0.477 | 0.479 | 0.192 | 0.541 | 0.356 |
欄位的意思是:NER 是實體辨識(F1)、RE 是關係抽取(F1)、Def 與 RDef 分別是實體與關係的描述生成品質(chrF++)、HM 是前四項的調和平均。整體 HM 相對高出 12.5%,主要靠關係抽取那一欄(0.347 對 0.239)。
問題是這個優勢接到 end-to-end 就消失了。論文自己寫:Meno-Lite-0.1 巨大的單獨抽取優勢,到了 GraphRAG-Bench 的端到端問答上壓縮到 1 pp 以內。附錄的組態表更直接——3B 到 14B 的抽取模型換來換去,最終 AC 只差 1.5 pp 以內。
同一份證據既證明了「小模型夠用」,也證明了「抽取模型換誰都差不多」,連帶讓 Meno-Lite-0.1 本身的存在意義變薄。論文把它重新框架成 pipeline 的 robustness。
還有一個 caveat 是論文自己在 Limitations 承認的:Meno-Lite-0.1 的微調用了 NEREL 的 train/validation split,而 IE benchmark 用的是 held-out test split。論文說重疊僅限於標註 schema 跟文本領域,但殘留優勢無法完全排除。
10 工程面:這篇論文最紮實的部分
附錄裡 RAGU 與 HippoRAG 2 的工程比較,是整篇論文我最欣賞的一段。它釘住特定 commit,每一條指控都附上檔名跟行號(eval() 出現在 openie_openai.py:36,88、assert False 當控制流出現在 HippoRAG.py:216)。這種可查證性在論文裡很罕見。

RAGU 這一側的實質內容:
- 三層可抽換 storage(NetworkX → Neo4j、NanoVDB → Qdrant,只改兩個 constructor 參數)
- async-first API、有上限的並行控制
- 用 Pydantic v2 驗證所有 LLM 結構化輸出,取代
eval(),消除 code injection - 增量 upsert / update / delete、確定性 hash ID、一致性稽核
- 約 374 個測試搭配 deterministic mock LLM server,CI 不需要 API key
說白了,這一段的價值是工具書等級的:哪天真的要做 GraphRAG,它是個裝得起來、能換 backend 的實作,比自己從頭寫省事。但這不是需要記在腦中的知識。
論文自陳的限制也很誠實:預設的 NetworkX backend 撐不了百萬節點級的語料;NEREL schema 是為俄語新聞設計的,換領域要重新設計;抽取模型太弱時引入的結構噪音,consolidation 也救不回來。
11 值得帶走的五件事
論文本身的研究貢獻接近零,但下面幾點是耐久的,按價值排序。
一、檢索指標好不等於答案好。 ER 只測 recall、不測 precision。只看 hit rate 會系統性地把系統推向「撈更多」,而最終答案品質可能不動甚至下降。這條會改變你調系統時盯哪個儀表板,而且跟 GraphRAG 完全無關。
二、混淆變因的量級感。 換一個 generation prompt 值 +16.9 pp AC,比這篇論文所有方法貢獻加起來都大。在做任何檢索改動的評估之前,先問:有沒有一個更無聊的變因(prompt、答案格式、chunk 大小、baseline 設定)在解釋這個差異?
三、一個有用的負面結果。 RAGU 對 NaiveRAG,同程式、同 prompt、唯一差別是用不用圖,答案是 +1.2 到 +4.3 pp。整套 GraphRAG 就值這麼多。知道「不要做什麼」跟知道「要做什麼」一樣值錢,而且這種數字很少有人願意發表。
四、兩個概念工具。 entity resolution 不是 clustering——判斷同一性 vs 發現結構、k≈n vs k«n、誤合併不可逆,這決定你選 union-find 還是 DBSCAN。以及圖分群跟向量分群是兩種「像」——結構相關 vs 語意相似,同一條 pipeline 裡兩種都用得到。
五、一組讀論文的檢查動作。 這篇論文三個動作全部命中,是判斷成色最快的方式:找「乾淨對照」(誰跟誰只差一個變因),這裡找到了 NaiveRAG;查「宣告了卻沒報的指標」,這裡是消失的 Context Relevancy;查「核心賣點有沒有 ablation」,這裡 consolidation 沒有。
12 結論
RAGU 是一篇工程價值高、研究價值低的 system paper。它的兩階段 typed extraction 是個可以單獨拿走用的好 pattern,工程品質在同類開源專案裡罕見地紮實,但核心賣點 consolidation 從頭到尾沒有 ablation,「7B 就夠」的假說是為既定決定補的事後理由,而最漂亮的 cross-over 敘事拆開來看主要是對手掉下去,不是它爬上來。
真正值得記住的,是它無意間量化了 GraphRAG 的天花板——用它自己的程式、自己的 prompt 做對照,整套圖的淨貢獻只有 1.2 到 4.3 pp,而那個天花板比宣傳的低很多。這對任何正在評估要不要導入 GraphRAG 的人來說,比論文想證明的東西有用得多。




