Brain:作為知識 Wiki 的代理程式記憶
一個結構化、可追蹤、自我改善的 Markdown 檔案系統,經過離線編譯並可按需進行導覽。
電腦使用者的工作跨越數月和數百個工作階段。到第十個工作階段時,系統應該遠比第一個工作階段更具生產力。它應該累積關於使用者、他們的偏好以及已經完成的工作的內容。
例如,當被要求繪製使用者先前解釋過的工作流程圖表時,電腦應該回憶起這些細節並使用它們來以使用者偏好的風格建立和輸出圖形。使用者不應需要重新解釋工作流程的細節或重申他們對 PDF 而非 PNG 成品的偏好;系統應該能夠從過去的工作階段中準確恢復該內容並自動套用它。
記憶體是代理程式持續改進的基礎。一個有效的記憶體系統應該是結構化、可追溯且具適應性的,使代理程式能夠為每個任務搜尋正確的廣度和深度,同時將每一個決定建立在最新資訊的基礎上。
簡介
為代理程式注入相關內容是一個多面向的問題。首先,代理程式需要知道存在什麼以及如何存取它。其次,當它們找到有幫助的資訊片段時,它們需要確信它是完整、準確且為最新版本的。孤立的事實價值有限,除非代理程式能夠找到相關資訊、驗證它來自可信來源,並且確保不需要用最新的觀察結果來更新它。
將靜態記憶體檔案直接塞入模型內容中最大化了對代理程式的可存取性,但也呈現了經典的精確度-召回率權衡。過多的資訊將充斥代理程式的內容視窗,其中包含越來越小的關聯性項目,而過少則會由於缺乏相關內容而降低答案品質。相比之下,按需存取外部資料庫更具彈性,但將導覽的負擔轉嫁到了代理程式身上。向量資料庫通常儲存不連貫的碎片,而圖表資料庫則要求代理程式知道如何有效查詢。
最近,我們推出了 Brain,它是電腦記憶體系統的核心組件,兼具兩全其美的優點。Brain 是一個結構化知識維基,位於靜態記憶體檔案和證據之上。引用將斷言連結到其來源,而相關的資訊片段則橫向連接。有組織的維基使內容能夠按需導覽,同時詳細的成品保留在其下的層中。

Brain 連接到一個包含三個關鍵組件的全面記憶體系統:持久記憶體儲存、使用記憶體來回答查詢的前景代理程式,以及更新和改善記憶體的背景代理程式。下圖描繪了這些位於 Brain 整體系統架構內的組件。

在本文中,我們深入描述了每一層,解釋了 Brain 如何組織記憶體、代理程式如何使用它,以及背景程序如何保持其最新狀態。我們還展示了來自內部評估的結果,這些評估驗證了 Brain 的設計,證明它能以更低的成本提高代理程式效能。
記憶體組織與儲存
記憶體需要一種能夠擴展到使用者完整歷史記錄而又不會將每個內容片段強行塞入提示中的表示方式。電腦的記憶體系統將持久內容表示為檔案系統。Brain 綜合了跨原始來源的知識,連接了相關主題,並將主張連接回支援它們的工作階段和檔案。這種結構在下面詳細說明,使我們能夠以特別適合代理程式的形式組織記憶體。
基於檔案系統的記憶體
電腦工作階段已經存在於具有檔案系統、殼層和 I/O 公用程式的沙箱中。在設計 Brain 時,我們希望在模型與代理程式記憶體之間的介面中引入盡可能少的全新機制。這就是我們在檔案系統原生內容層之上建構 Brain 的原因。記憶體在沙箱中的 memory/ 目錄下實體化為檔案,而代理程式只需對記憶體檔案使用它已經用於所有其他內容的相同工具。
在記憶體樹的根部坐落著三個頂層目錄,它們在不同的抽象層級維護內容。knowledge/ 是 Brain 本身,這是一個連結實體、概念、活躍專案和過去學習成果的綜合知識維基;notes/ 包含組織為主題資料夾的精簡程式碼片段;以及 sessions/ 保存索引、摘要和完整文字記錄作為原始歷史記錄。下圖顯示了佈局的簡化檢視。

這些表面刻意是冗餘的。對於簡單的單跳問題,在 /notes 中搜尋關鍵字的程式碼片段通常就足夠了,而 /knowledge 層對於需要跨越電腦工作階段數週或數月來拼湊證據的問題最有用。
Brain:知識維基
Brain 的格式為 LLM 維基,這是一個連結的 Markdown 檔案系統。這種形式的輕量結構化 Markdown 提供了一個現有內容的全盤檢視,以便代理程式可以輕鬆理解有哪些記錄可用、它們如何關聯以及在哪裡可以找到它們。每個頁面都是一個主題的維護檢視;它在單獨閱讀時應保持有用,同時透過連結使進一步探索變得容易。
[[wikilinks]] 有兩種型態。它是內容邊。它們橫向連接頁面;專案可以連結到其擁有者、其客戶或它依賴的概念。跟隨它們可以回答「我還需要知道什麼?」[cite:N] 參考是證據邊。它們將主張向下連接到支援它們的原始工作階段或連接器來源。跟隨它們可以回答「我怎麼知道這是真的?」
下圖描繪了 Brain 的一部分對於合成人物誌(一位名為 Nadia 的無障礙研究人員)會是什麼樣子。她的 Brain 包括一個關於範例專案的頁面、日本的通用設計衝刺,並綜合了來自工作階段和連接器的知識。圖表檢視展示了頁面中存在的內容和證據邊如何連結相關實體和來源。


Brain 受到 Git 支援以保留版本歷史記錄,從而支援其不斷演進的性質。頁面隨著時間推移可以被編輯,而變更日誌記錄了關鍵更新,並允許代理程式輕鬆檢查過去的版本和差異。這也支援了代理程式協調,這至關重要,因為多個代理程式可能會同時使用和更新 Brain。
使用 Brain
當回答使用者查詢時,代理程式需要能夠在正確的細節層級找到正確的內容。Brain 的結構使代理程式能夠輕鬆探索記憶體。代理程式可以在諸如追蹤內容連結以尋找相關資訊、追蹤證據連結以驗證主張,或呼叫子代理程式以取得並綜合額外內容等可操作步驟之間進行選擇。我們透過許多旨在最大化代理程式存取相關資訊之便利性的方式來引導代理程式探索過程。
探索策略
我們在初始使用者訊息中包含了 Brain 的精簡索引,因此代理程式以對現有內容的工作知識開始。然後,代理程式使用熟悉的的操作與 Brain 互動:閱讀索引引用的特定項目、使用 grep 跨頁面搜尋、跟隨連結和檢查引用、比較 Git 修訂版本,以及降入工作階段或原始軌跡中。下面的程式碼區塊描繪了合成人物誌的範例命令。
# 1. Orient: the index is a map of everything known
cat memory/knowledge/index.md
# 2. Target: find pages that touch the question
grep -Ril "kyoto\|sendai" memory/knowledge/
# 3. Read the page; follow context edges as needed
cat memory/knowledge/projects/japan-universal-design-sprint.md
cat memory/knowledge/entities/sora-city-laboratory.md # via [[wikilink]]
cat memory/knowledge/entities/sapphir-mobility-coop.md # via [[wikilink]]
# 4. Only if the claim must be verified: resolve evidence
# city bases → [cite:1], [cite:10] → pplx://sessions/<id>
#
# Example (pseudo, replace with your real tool):
# pplx-session-fetch 1eaf53d4-09e0-5823-bb96-c8662f582708 --slice <slice-id>
# 5. Some evidence lives outside the sessions
# meeting slots → [cite:15] → connector://google-calendar
#
# pplx-connector-fetch google-calendar --query "japan-sprint"代理程式透過自我導向的迴圈而不是固定的管線來探索此內容。因此,代理程式可以繼續搜尋,直到它對找到的內容感到滿意為止。代理程式也可以選擇何時檢查引用和證據以尋找或驗證細節。偏好的小事可以直接從單個 Brain page 採用,而重大決策或來源之間的衝突則可能證明追蹤引用和閱讀原始記錄是正當的。基於圖表的結構讓代理程式在具體的下一步之間進行選擇,而不是漫無目的地搜尋相關資訊。

檔案實體化
為了讓代理程式探索能夠運作,代理程式需要透過沙箱檔案系統存取整個 memory/ 樹狀結構。每次啟動沙箱都在本機複製整個樹狀結構是昂貴且不必要的,因為代理程式不會觸及絕大多數此類檔案。另一種選擇是使用遠端檔案系統,以便代理程式可以在不將其本機複製的情況下存取任何檔案。然而,代理程式通常在單個命令中執行數千個檔案系統操作;如果每個操作都變成網路請求,來回行程成本就會開始主導探索迴圈。在內部測試中,透過遠端 FUSE 支援的路徑執行的簡單 grep 工作負載大約比透過本機檔案執行的對應操作慢 400 到 500 倍。
相反地,我們建構了本機實體化檔案工作集,而較大的語料庫則留在記憶體檢索系統後面。電腦在開機時將初始對應圖(取自最近的記憶體、工作階段、摘要和可用知識)預先載入到沙箱上。電腦代理程式可以存取記憶體代理程式,這是一個可以執行語義搜尋並載入新檔案集的子代理程式。當缺少所需的內容時,電腦可以用所需資訊的描述來呼叫記憶體代理程式。記憶體代理程式跨檔案搜尋,傳回即時文字綜合,並將支援記錄作為檔案實體化到記憶體樹下。透過這種方式,工作集隨著時間的推移自然且逐漸地擴展,為已經存在的證據保留了穩定的路徑和來源關係。

這個設計乾淨俐落地解決了延遲瓶頸。在本地儲存相關檔案確保了探索所需的檔案系統操作保持快速,並且批次檢索允許實體化檔案池增長,而無需為每個檔案單獨呼叫或載入大量不相關的檔案。巢狀代理程式設計也賦予電腦代理程式化檢索的好處,而不需要主代理程式每次都直接搜尋完整的後端語料庫,從而為最高價值的資訊保留其自身的內容視窗。
維護 Brain
使用者不斷從他們所做的工作和進行的對話中學習,因此代理程式化記憶體也需要如此。為了讓 Brain 保持有用,它應該是最重要知識的簡潔表示。應該為重要的全新實體建立新頁面,應該將新資訊新增到相關的 Brain 頁面中,並且應該適時移除過時的內容。例如,如果使用者的工作發生了變化,Brain 應該反映該變化;它應該包含使用者的全新工作,並優先考慮與他們的新職責和專案相關的資訊。
Brain 由我們稱為 Dream 的背景代理程式維護。Dream 代理程式在基於檔案的記憶體上離線執行,將新資訊綜合到 Brain 更新中。我們仔細定義了 Dream 代理程式的範圍和行為以有效地執行此任務,以及確保 Brain 更新一致且準確的 Dream 特定護欄。
Dream:用於記憶體精煉的背景代理程式
Dream 代理程式在沙箱中執行,並可存取互動式電腦工作階段將擁有的相同檔案系統和唯讀工具,但它們唯一的目標是改善未來工作階段的內容。每次執行都從早期執行產生的 Brain 開始,而不是從頭重建使用者的內容。然後它使用該當前的 Brain 來為自己定位,並為未來執行的使用產生一個更新的 Brain。

Dream 代理程式接收一個環境並決定如何探索它,而不是接收扁平化為單個提示的固定輸入。它可以導覽基於檔案的記憶體、使用核准的唯讀連接器工具來驗證一塊知識,並將工作的有界部分委派給子代理程式,包括記憶體代理程式。Dream 代理程式的範圍和職責被指定為一個技能。
大體而言,一次 Dream 執行包含 4 個階段:
- 定向:代理程式完成一個有序的定向程序。它識別權威範圍、常設指示、刪除日誌、額外輸入和停止條件。
- 摘要工作階段:對於自上次更新以來是新的(或有新輪次的)每個工作階段,代理程式會寫入(或更新)該工作階段的簡短摘要。
- 將事實附加到主題:代理程式將它認為重要的每一個觀察結果新增到其適當的歸宿中,通常是維基頁面。它在可用時探查並查詢經過身份驗證的連接器。
- 更新知識維基:代理程式根據其發現更新維基。它可以為持久主題產生新頁面、當當前綜合發生變化時修訂頁面,或者新增支援事實主張的新連結或引用。當當前圖表已經正確時,它也可以選擇不進行任何變更。
為了確保對 Brain 的任何更新都是完整且一致的,代理程式將建議的狀態寫入暫存輸出樹中。在代理程式做出它認為必要的所有更新之前,不會進行任何永久性變更。在一個代理程式過程中協調這些決策使得將圖表作為一個整體進行更新成為可能,而不是作為不相關的頁面進行更新。

任何變更都必須透過兩種類型的驗證檢查。確定性驗證檢查確保頁面格式良好並符合客觀標準,例如必需的前言 (frontmatter) 和引用格式。語義驗證檢查確保提出的綜合受到收集到的證據的支援,並與圖表的其餘部分保持一致。在代理程式成功完成後,受控同步步驟將暫存輸出與先前狀態進行比較,並將變更套用到儲存庫中。當同步步驟完成時,最終的編輯集合可以透過 Git 版本歷史記錄進行檢查。
驗證 Brain
一個有用的記憶體系統必須保留相關證據、在需要時將其浮現,並幫助代理程式將該證據轉換為正確的答案。因此,我們從多個層級評估 Brain:受控離線消融、連續配對重播以及隨機化生產實驗。
離線評估
我們的主要離線評估使用包含 44 個合成人物誌的 640 個問題的內部資料集。這些人物誌重現了生產衍生的工作階段節奏、輪次計數、主題組合和事實密度模式,同時不包含任何生產查詢文字以保護使用者隱私。每個帳戶都是透過生產記憶體管線填入的,包括記憶體提取、對話摘要以及 Dream 對知識維基的編譯。對於每個問題,正確答案機械性地與帳戶歷史記錄中存在的特定證據綁定。
例如,對於前面介紹的無障礙研究人員合成人物誌 Nadia,資料集包含問題:「我在京都和仙台要見哪些組織?」答案(京都的 Sora City Lab 和仙台的 Sapphir Mobility Coop)直接出現在對應的維基頁面上。
我們將啟用與停用編譯知識維基時的相同問題和帳戶進行比較。其他記憶體表面在兩種情況下均保持可用。這隔離了 Brain 的增量貢獻,而不是將記憶體與無記憶體進行比較。總體而言,Brain 將答案正確率從 0.600 提高到 0.661(提升 6.1 個百分點),並將證據召回率從 0.573 提高到 0.625(提升 5.2 個百分點)。對於關於偏好(+10.2 個百分點)、時間推理(+8.6 個百分點)以及從先前活動中提取詳細資訊(+6.9 個百分點)的問題,其效果最為顯著。在 84% 的問題中,代理程式可驗證地觸及了繫結至黃金證據的來源。

我們還在兩個公共基準的子集上執行了匹配的 Brain 消融。在 LoCoMo 上,移除維基平均將答案正確率降低了 4.6 個百分點(跨越使用不同模型的三次執行)。在 LongMemEval-S 上,它沒有產生統計上顯著的變化。此結果與 Brain 的預期角色一致。LongMemEval-S 主要測試從個別工作階段中恢復事實,其中底層文字記錄提供了通往答案的冗餘路徑。LoCoMo 更強調分散在對話、演講者和日期中的證據,為維基的跨工作階段綜合創造了更多貢獻機會。
總體而言,在啟用 Brain 的情況下,生產代理程式在 LongMemEval-S 上取得了 0.91 的答案正確性,在 LoCoMo 上取得了 0.83。因為這些實驗使用的是基準子集,所以它們不是決定性的基準結果。然而,消融仍然提供了強烈的訊號,表明維基提高了效能,特別是當必須跨對話整合證據時。由於 Brain 是電腦的一部分,而不是優化的、基準特定的檢索系統,我們相信競爭力只會隨著更類似於生產工作流程的任務而增加。
線上評估
離線資料集無法捕捉真實使用者歷史記錄的每個特徵,因此我們還對新鮮的生產衍生同類群組執行每日配對評估。針對啟用了和停用了 Brain 的匹配使用者狀態回答相同的固定問題,然後評判其正確性、即時性和召回率。
6 月 18 日報告的初步結果表明,Brain 將答案正確率提高了 25%,召回率提高了 16%。這些效能提升一直在持續保持;在過去 30 天裡,啟用 Brain 的工作階段在每次執行和每個評判的維度上都優於對照組。以絕對值計算,電腦使用者在正確性上享受了 9.3 點的提升、在即時性上享受了 8.0 點的提升,以及在召回率上享受了 8.9 點的提升。啟用 Brain 的軌跡也大約少使用了 15% 的權杖、成本降低了 10%,並且生成速度加快了 10%。

持續改進
我們繼續精煉 Brain,為使用者帶來最佳的記憶體體驗。最近的一項變更將 Brain 的精簡索引直接置於代理程式的初始內容中,而不是要求代理程式稍後發現並閱讀它。在一項隨機實驗中,這種預填處理將 Brain 的使用率提高了,並將與記憶體相關的不滿減少了 6.9%。
離線評估工具組也兼作自主改進管線的一部分。對 Brain 的記憶體子代理程式、檢索技能和提示的建議變更透過我們內部資料集和公共基準上的匹配消融進行執行。電腦代理程式可以自主迭代結果,將每次迭代的變更、增量和成本保留為持久記錄,並且只保留移動數字的變更。其結果是一個系統,其中 Brain 的評估者也是它的優化者,推動著未來的改進。
結論
持續學習是建構能夠跨越數周和數月運作的代理程式系統的決定性挑戰之一。我們認為記憶體架構最好作為代理程式可以使用其普通工具集直接探索的環境來公開。將記憶體公開為檔案系統,並將 Brain 作為頂部的結構化知識維基,透過簡單且熟悉的工具使內容能夠高效導覽。
Brain 旨在實現自我改進,以便隨著使用的增長,記憶體系統可以持續變得更好。Dream 背景代理程式將新資訊萃取到 Brain 更新中,確保前景代理程式始終以對最新內容的有組織檢視來開始新的工作階段。評估工具組兼作核心記憶體架構和代理程式導向介面上自動研究迴圈的測試場。
Brain 已經帶來了更準確且效能更好的代理程式工作階段,同時減少了花費的權杖。我們對 Brain 與電腦生產堆疊的精心共同設計確保了這些收益直接轉化為使用者的真實利益。
我們將繼續建立更多功能以改善電腦記憶體的品質。同時,對於啟用了 Brain 的使用者,記憶體將隨著每個工作階段而改善。