MAGMA:AI Agents 多圖記憶架構-從便利貼到偵探白板, 閱讀筆記與批判性反思
一般分享By 賴彥霖
Content
論文:MAGMA: A Multi-Graph based Agentic Memory Architecture for AI Agents
作者:Dongming Jiang、Yi Li、Guanpeng Li、Bingzhe Li
發表:ACL 2026 Long Papers (pp. 36848-36865)
一、問題出發:Vector Store 的尷尬
想像你問 AI 助理:「我為什麼取消登山?」
助理翻了半天,找到你買登山杖、研究登山路線,每一段都跟「登山」有關,可是都沒有回答為什麼;但真正的線索藏在更早的對話裡,你說「腳踝受傷,醫師叫我不能負重」。
這就是記憶系統尷尬的地方:東西存了,卻不一定找得到該用的那一段;向量搜尋擅長找語意相近的段落,但「相近」不等於「足以回答問題」;一條因果線,光靠相似度不一定浮得出來。
MAGMA 的核心想法:把散落的便利貼,變成一張偵探白板。
記憶不只是一堆存好的句子,還要知道誰跟誰有關、哪件事導致哪件事。
二、四張圖譜:四種顏色的毛線
MAGMA 把事件之間的關係分成四種,就像在偵探白板上用四種顏色的毛線把便利貼串起來:
圖譜 | 代表什麼 | 適合補充的資訊 |
|---|---|---|
Semantic(語意) | 概念相近的事件,如登山杖與登山鞋 | 同主題、同活動、同義表達 |
Temporal(時間) | 事件先後,如受傷在前、取消行程在後 | Before/After、何時、順序 |
Causal(因果) | 原因導致結果,如腳踝受傷導致取消登山 | Why、原因鏈、行動依賴 |
Entity(實體) | 同一實體的不同記憶,如 Alex 的音樂經歷 | 跨 session 追蹤同一人或物件 |
註:時間和因果要分開,先發生不代表造成後者,例如「早上打噴嚏、下午下雨了」,不表示打噴嚏導致下雨;四張圖也不是四個資料庫,它們共用事件,只是用不同顏色的毛線表示不同關係。
三、系統架構:三層設計
圖片來源:Jiang, D., Li, Y., Li, G., and Li, B. (2026).MAGMA: A Multi-Graph based Agentic Memory Architecture for AI Agents.Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (ACL 2026), p. 36850
架構分成三層,由下往上看:
寫入層:使用者說了一句話,先記事件、時間、向量,再排進佇列,慢慢補複雜關係。先貼便利貼,再整理毛線。
記憶庫:圖結構和向量索引一起保留。
查詢層:問題進來,找起點,沿線走,把證據整理成精簡上下文,交給 LLM 回答。
這套設計針對過度檢索(Over-fetching):找到一個相關事件後,如果不斷往外擴張,很容易把大量無關內容也塞給模型。論文透過自適應走訪修剪分支,再整理上下文,讓 LLM 少讀一些用不到的證據。
Table 3 報告每次查詢的 token 從 Full Context 的 8.53k 降到 MAGMA 的 3.37k,平均延遲從 1.74 秒降到 1.47 秒。這可理解為提高提示中的有效訊息比例,但論文沒有直接量測「Prompt 訊號雜訊比」,也不能把全部效益單獨歸因於修剪。
四、兩個核心公式
4.1 RRF:搜尋起點
第一個公式負責找起點,倒數排名融合(Reciprocal Rank Fusion),想成三個人各給一份排行榜「向量語意相似度」、「關鍵字比對」、「時間訊號匹配度」;不同排行榜的原始分數不好直接比,所以改比名次:
Sanchor = TopK( ∑m 1 / (k + rm(n)) )
其中 m ∈ {vec, key, time}
小寫 k=60 是平滑常數(不是要找 60 個節點),大寫 K 才是要留下幾個起點,這個設計的優點:不同檢索器不用共享同一種分數尺度。
4.2 走訪策略:路線選擇
第二個公式決定路線,沿著哪條毛線走。拆成兩部分:
關係適合度:這種邊適不適合現在的問題?問「為什麼」,因果線加分;問「哪天」,時間線加分。
語意相關性:沿線找到的內容,跟問題有沒有關?
公式:
S(nj | ni, q) = exp( λ1 * φ(type(eij), Tq) + λ2 * sim(nj, q) )
4.2.1 怎麼讀這個分數?
在問題 q 下,從目前節點 nᵢ 走到鄰居 nⱼ,值不值得?公式主要看兩件事:
φ「關係」,依查詢意圖 Tq,判斷這種關係適不適合。問 WHY,因果邊的權重就可以提高。
sim「內容」,用節點與問題的向量餘弦相似度,衡量下一段記憶是否相關。
λ₁、λ₂「權衡」,控制關係適合度與內容相似度各占多少。
所以,登山裝備雖然很像問題的主題,「腳踝受傷」仍可能因為因果關係而優先被追蹤。外面的 exp 把加權結果轉成正分數;這不是已正規化的機率。論文 Algorithm 1 再用 Heuristic Beam Search(啟發式集束搜尋)保留高分候選,公式本身不等於完整搜尋演算法。
五、實驗成績一覽
LoCoMo 基準測試:Table 1 完整 Judge 欄位|論文報告值,未獨立重現
方法 | Multi-Hop | Temporal | Open-Domain | Single-Hop | Adversarial | Overall |
|---|---|---|---|---|---|---|
Full Context | .468 | .562 | .486 | .630 | .205 | .481 |
A-MEM | .495 | .474 | .385 | .653 | .616 | .580 |
MemoryOS | .552 | .422 | .504 | .674 | .428 | .553 |
Nemori | .569 | .649 | .485 | .764 | .325 | .590 |
MAGMA | .528 | .650 | .517 | .776 | .742 | .700 |
註:Judge 是 [0,1] 的語意評分,允許部分給分;0.700 不等於「70% 題目完全答對」。A-MEM、MemoryOS、Nemori 是其他研究者提出的 AI 長期記憶架構。MAGMA 的 Overall、Single-Hop、Adversarial 表現突出,但 Multi-Hop 低於 Nemori 與 MemoryOS。只看 Overall,會錯過它在不同題型上的差異。
消融實驗:Table 4|論文報告值,未獨立重現;下降幅度為相對完整 MAGMA 的分數差。
變體 | Judge 分數 | 下降幅度 |
|---|---|---|
完整 MAGMA | .700 | — |
移除 Adaptive Policy | .637 | -.063 |
移除 Causal Links | .644 | -.056 |
移除 Temporal Backbone | .647 | -.053 |
移除 Entity Links | .666 | -.034 |
註:表中降幅最大的是移除「自適應走訪策略」:.700 → .637。這讓我更想測試策略本身的作用:同樣一組關係,依問題換路線,究竟能多找回多少有用證據?
六、心得
6.1 這篇最漂亮的設計是什麼?
讀完這篇論文,我覺得 MAGMA 最值得學習的,不只是「建了四張圖」,而是把「記憶裡存什麼關係」和「問題該沿什麼關係找證據」分開設計。
換句話說:
四張圖是表示層(representation),記住世界的不同面向。
Adaptive Traversal Policy 是控制層(control),根據問題決定怎麼搜索。
這個解耦(decoupling)的好處非常實際:同一張白板可以換路線,問題變了,不用重新建一份記憶;問「為什麼」的時候走因果線,問「什麼時候」的時候走時間線,底層資料完全不用動。
我最有興趣的不是增加圖的數量,而是把關係變成可以控制、量測與否證的設計,例如:開啟 Entity Graph 後是否真的補齊跨 session 事實?錯誤因果邊增加時,系統表現何時開始變差?
6.2 公開程式碼:沿著資料流查下去
本文是論文與公開程式的對照閱讀,沒有重跑完整 benchmark。檢視固定在 commit 467cb70b67ac337b22fdb42194d37c04ad701b62,沿著記憶建置、查詢走訪與評估流程追蹤。以下結論限定這個版本;這些程式不足以證明作者產生論文數字時的歷史執行環境。我最想借鑑的是「表示與策略分離」。但公開實作讓我先停在幾個更基本的問題:同名的人怎麼分開?一條因果邊憑什麼成立?評估時,答案資訊到底有沒有流進作答過程?如果這些地方沒有處理好,後面的高分就很難解讀。
6.2.1 關係品質與搜尋路徑
同名不等於同人。 create_entity_links 把抽取出的實體字串做 lower().strip(),再按相同字串分組。假設健身教練和軟體工程師都叫 Alex,就有誤連風險。這是建邊規則的限制;不能因此說前面的實體抽取也完全沒有用 LLM。查證:create_entity_links · L722
先後不等於因果。 _infer_latent_edges 雖然準備了提示文字,該函式卻沒有呼叫 LLM,而是檢查前三個鄰居,把時間較早者接成 LEADS_TO,信心值固定為 0.5。「早上打噴嚏、下午下雨」正好說明這種判準缺少什麼:先發生,沒有回答為什麼造成後者。這是規則風險的示意,不是實測錯答。查證:_infer_latent_edges · L610。同檔另有呼叫 LLM 的 _infer_causality;這裡指出的是上述簡化路徑,並非所有因果方法。
輪次不等於時間。 建圖程式以 session timestamp + timedelta(hours=turn_number) 產生事件時間戳。多說一輪話,就被當成多過一小時;這改變了時間關係的語意,不能直接當成情境中事件真正發生的時間。查證:事件時間戳 · L285
Beam Search 函式存在,但主要查詢路徑沒有走它。 論文 Algorithm 1 描述 Heuristic Beam Search。公開程式保留了 _probabilistic_beam_search,但我追蹤的主要 query 路徑呼叫的是 _adaptive_graph_traversal,註解稱為 Adaptive BFS(調適性廣度優先搜尋)。集束搜尋每層保留高分候選;這個 BFS 路徑則逐層擴展並套用過濾條件。探索順序、證據集合和成本都可能不同,不能視為同一方法的等價重現。查證:query · L682、_probabilistic_beam_search · L1002、_adaptive_graph_traversal · L1099
6.2.2 評估洩漏:三種資訊進了三個不同環節
三種情況分別是拿正解選答案、提供真實題型,以及標出答案所在資料;介入的位置與資訊量都不同。
正解選答(Gold-answer leakage)就像先寫三份答案,再翻標準解答,挑最接近的那份交卷。LoCoMo 入口預設 --best-of-n=3、--best-of-n-method=llm_judge;選答函式把 expected 正解交給 evaluator,保留分數最高的候選。問題出在正解參與了最終答案的選擇;即使生成候選時沒有把正解直接塞進 prompt,這也已經不是獨立作答。Best-of-N 本身不是洩漏,拿 gold answer 挑答案才是。查證:預設參數 · L364、_answer_question_best_of_n · L94
題型提示(Benchmark-label leakage)就像考試時有人先告訴你「這題是多跳推理」。程式讀取真實 qa.category,把 multi-hop 的 top_k 設成 30,其他設成 15,並將 category 傳入 QA prompt,切換作答提示。題型不是正解,但它是 benchmark 提供的額外標籤(privileged label)。若要測試系統從問題自行判斷策略的能力,就不應把這份標籤提前交給它。查證:題型與檢索設定 · L277;同檔 _answer_question_single 的 category 提示分支。
答案位置(Gold-evidence leakage)就像翻出幾頁資料後,有人指出哪一頁藏著答案。LongMemEval 以 answer_session_ids 辨識已召回的正解會話,優先選入上下文,並依是否為正解會話採取不同的內容抽取路徑,最後還加上 CONTAINS ANSWER 標記。它不是無條件補入所有未召回的正解資料,但仍把測試答案的位置用來篩選與標註證據。這會干預原本應由檢索器自己完成的工作。查證:正解會話優先選擇 · L1400、分流抽取 · L1450、CONTAINS ANSWER · L1596
這些資料流足以否定「直接跑這套預設流程,就是乾淨盲測」的說法。 要用分數支持架構有效,必須先切斷這些標籤與作答流程的連接,再重新比較基線與消融。
6.3 三個值得借鑑的設計
如果要重新實作,我會保留以下設計:
記憶有關聯
能從「取消登山」沿關係追到「腳踝受傷」,補充只靠相似度排名可能漏掉的證據。同板可換路線
問題變了,不用重建記憶,只需要換走訪策略;同一份記憶因此能比較不同檢索策略。先記再整理
Fast Path 先留下可查詢的骨架,Slow Path 再補複雜關係;兼顧即時性與完整性。
6.4 如果要自己做,如何調整?
如果要把 MAGMA 的思想落地,我認為路線應該是:
先建乾淨的基線:Semantic + Temporal + Entity,用明確規則和小型資料驗證;先觀察實體誤連與時間解析錯誤,確認每條邊都能回到來源。
再加因果作為獨立變因:有來源的 Causal Edge,搭配品質量測(例如「因果邊錯誤率 vs. 表現下降」的曲線),不要一開始就假設因果邊一定有用。
最後比較策略:Fixed Policy(固定走所有邊)vs. Intent-aware Policy(依意圖調整權重),在完全相同的圖和 token 預算下比較。
這樣的模組化實驗設計,可以幫助分辨「方法有效」和「某段 benchmark 特化規則有效」,後者不等於前者。
七、我的取捨
我會借鑑 MAGMA 把關係表示與檢索策略分開的設計,同一份記憶可以換不同路線,讓「哪種關係有幫助」變成能逐項測試的問題。論文的消融結果提供了值得驗證的假設,卻不能代替乾淨的評估流程。如果由我重新實作,我會先重做關係品質控制,把建圖、檢索、作答與評分拆開,讓正解只在答案固定後進入評分器。接著用相同資料與 token 預算,比較固定走訪、自適應走訪和各種關係消融,要確認的是:拿掉這些額外提示後,多圖記憶究竟還能帶來多少改善。
八、來源與資料說明
本文表格均為論文報告值,未獨立重現;登山、Alex 與打噴嚏情境是教學示意,非模型實測輸出。
程式證據固定於 467cb70b67ac337b22fdb42194d37c04ad701b62,各處查證連結指向該版本。
Jiang, D., Li, Y., Li, G., and Li, B. (2026). MAGMA: A Multi-Graph based Agentic Memory Architecture for AI Agents. Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 36848–36865. 架構:Figure 2;公式:Eq. (4)–(6)、Algorithm 1;LoCoMo:Table 1;查詢成本:Table 3;消融:Table 4;RRF 常數:Table 6。