LightVela

Hermes Agent 的長期記憶治理:少而準的四條鐵律

摘要

Hermes Agent 的長期記憶治理不是靠"存得多",而是靠一套"少而準"的四條鐵律:

  1. 有界USER.md ~1,375 字符、MEMORY.md ~2,200 字符,強制精簡。
  2. 凍結:會話內不改寫,保護 KV 緩存與推理穩定性。
  3. 透明:每次寫入都有通知(💾 Memory updated),可審批、可撤銷、可 /journey 回顧。
  4. 自我整合:容量滿時不靜默丟棄,而是通過 Memory at 2,100/2,200 chars. Consolidate now... 錯誤響應,強迫 Agent 用 add / replace / remove 三原子操作主動取捨。

結果就是:Agent 越用越懂你,但從不臃腫;記憶越攢越豐富,但從不失控。


引子:一個常見誤解

"AI 助手記得越多越聰明。"

事實恰恰相反。記得多而雜,會讓 Agent 變笨——它開始把你臨時的、錯誤的、過時的信息,當成關於你的穩定事實。真正好用的長期記憶系統,一定是"少而準"的。

要落地"少而準",Hermes 回答了四個反問:

  • 什麼值得進入長期記憶?(寫入閘門
  • 已經進來的碎片怎麼變成規範條目?(整理
  • 信息變化了怎麼辦?(更新語義
  • 容量滿了怎麼辦?(consolidate 強制

下面按順序把這四道題一次講透。


一、寫入:Agent 自己是第一道閘門

Hermes 的第一道門是寫入過濾。它不會把每一句話都存下來,而是在四種明確時機由 Agent 自己判斷要不要寫:

  • Compression(壓縮時):上下文接近上限時,Agent 會 review 當前會話,把"值得跨會話保留"的信息抽出來。
  • Checkpoint(關鍵節點):任務閉環、話題切換等時刻,做一次記憶盤點。
  • Nudges(週期性提醒):系統會週期性地問 Agent:"這一段有什麼值得寫進長期記憶的嗎?"避免忘掉重要片段。
  • 用户顯式指令:"請記住 X" 會被優先寫入。

判斷標準通常包括:

判斷維度具體含義反例
可複用性這條信息在未來其他任務裏可能還會用到嗎?"今天想喝拿鐵"
穩定性它是暫時的還是長期的?"今天頭有點疼"
具體性是模糊態度,還是可複用的事實?"我大概比較喜歡簡潔一點"
隱私敏感度未經用户顯式確認的郵箱、密碼、地址默認不寫

一個訓練良好的 Hermes Agent,寧可少記,也不亂記。


二、整理:把碎片重寫成條目

即便通過了寫入過濾,進來的信息也往往是"碎片"。Hermes 的第二道處理,是把碎片重寫成規範條目

舉個例子。原始對話可能是:

"哦對了,我們那個 API 後來改成走 gateway 了,不再直連服務了,是上個禮拜的事。"

Hermes 不會原樣保存這句話,它會寫成:

- [~2026-07-24] Project X 的 API 已從直連改為經由 gateway 路由。

這裏發生了四件事:

  • 抽事實:去掉"哦對了"這類語氣詞。
  • 補主語:把"我們那個"補成"Project X"。
  • 加時間:把"上個禮拜"錨定成大致時間。
  • 可檢索:寫成結構化條目,方便日後 FTS5 命中(~20ms 命中,~1ms 翻頁)。

結構化整理之後,記憶條目才具備"幾個月後被再次召回"的可能。


三、三原子操作:add / replace / remove

Hermes 對 MEMORY.md 的每一次改寫,都必須落到三種原子操作之一:

操作語義觸發場景
add新增一條新事件、新決策
replace用新條目覆蓋舊條目狀態變化("API 現在走 gateway"覆蓋"API 直連")
remove物理刪除用户否認、條目過期、consolidate 後被合併的舊條目

為什麼不允許模糊操作(比如"更新一下相關字段")?

理由 1:原子操作可審計。每一次記憶變化都能對應到"哪條 → 變成哪條",從而支持 /memory diff <id> 這種精確 review。

理由 2:迫使 Agent 顯式決策。"我現在是想替換,還是想新增?"這個二選一,本身就是取捨的開始,能防止"分裂人格"。

理由 3:為審批閘門(第七節)打基礎——每個 pending 項都能被獨立 approve / reject。


四、更新語義:優先修改,不追加相反

這是很多簡單記憶系統會翻車的地方:信息變化了怎麼辦?

樸素做法是"再記一條",結果 Agent 裏同時存在:

  • "用户偏好 Vue"
  • "用户後來換成了 React"
  • "用户又回到了 Vue"

三條並列,模型自己都不知道該信誰。

Hermes 的做法是優先更新,而不是追加相反

  • USER.md 裏的偏好類字段,傾向於"覆蓋舊值"(replace)。
  • MEMORY.md 裏,歷史事件保留,但當前狀態字段被更新replace),並保留一個簡短的"版本遷移"痕跡。
  • 用户明確否認的內容("我從來不是那樣"),會被 remove——物理刪除,而不是記錄成"用户否認了 X"。

這樣做的核心目的,是讓 Agent 的世界模型保持自洽


五、容量滿了:Consolidate now

Hermes 給 MEMORY.md 定的硬上限是 ~2,200 字符。當容量逼近時,任何 add 操作會返回:

{
  "success": false,
  "error": "Memory at 2,100/2,200 chars. Consolidate now...",
  "current_entries": [...],
  "usage": "2,100/2,200"
}

這不是 bug,是設計。

如果容量滿了自動丟棄最舊的條目,Agent 就永遠學不會取捨——重要的信息可能被踢,無關的信息可能留着。Hermes 反其道而行之:滿了不讓寫,直到 Agent 自己整理出空間

整理動作通常包括:

  • 主題聚合:若干相似條目 → LLM 摘要成一條更概括的記憶。
  • 過期歸檔:"本週 sprint 的目標是…" 時間點之後 remove
  • 訪問頻率降權:長期沒被召回的條目排到隊尾,被優先合併或刪除。

這些機制加在一起的效果是:你幾個月前的碎碎念不會一直污染 Agent 對你的判斷,但真正長期重要的信息會被反覆強化。


六、Consent-aware learning loop:Agent 在後台學,但不打擾你

Hermes 還有一個隱藏能力:後台自省循環。它會週期性地:

  1. 拉出最近幾次會話;
  2. 讓一個便宜的模型(比如 Gemini Flash)跑一遍"值得記的內容"提取;
  3. 生成候選記憶條目,標記 [auto]

官方把這個循環稱為 consent-aware learning loop(同意感知學習循環)——學習不該打擾用户,但用户隨時可以介入。

這套設計的好處是:

  • 成本降到 1/3~1/5:便宜模型跑回顧,官方測試對記憶捕獲質量幾乎沒影響。
  • Agent"你不用的時候也在成長":只要它長期在線。
  • 不干擾前台對話:候選條目在下一節的審批閘門裏等你批。

七、審批閘門:如果你不放心 Agent 自作主張

有些用户會擔心:"Agent 自動寫 MEMORY 萬一寫錯了呢?"

Hermes 提供了顯式開關:

memory:
  write_approval: true    # 打開審批閘門

打開後,所有記憶寫入(包括後台自省的自動寫入)都會暫存待審。用户通過以下命令逐條審閲:

/memory pending           # 列出待審條目(後台自省標記 [auto])
/memory diff <id>         # 查看具體變更
/memory approve <id>      # 批准(或 all)
/memory reject <id>       # 拒絕

Skills 有獨立的 skills.write_approval,因為 SKILL.md 可能很長,無法在聊天窗口直接展示,Hermes 提供 /skills diff <id> 讓你看完整 unified diff。

審批閘門本質上是把"Agent 自主學習"和"用户主權"做了個顯式解耦——Agent 可以自由地積累經驗,但每一次改寫用户檔案都要過用户這一關。


八、透明化:你能看見 Agent 每一次記憶更新

Hermes 會通過通知讓你實時看到記憶動作:

配置值顯示效果
off靜默寫入,不顯示
on(默認)💾 Memory updated
verbose💾 Memory ➕ User prefers terse replies(帶內容預覽)

從"記住了什麼"到"記住了具體哪條",粒度都可控。這種可觀測性在 AI Agent 裏其實很少見——大多數 Agent 的記憶是黑盒。


九、Learning Journey:審閲 Agent 的成長過程

如果你想回顧幾個月來 Agent 學過什麼,Hermes 提供了 /journey(別名 /learning/memory-graph):

  • CLI:hermes journey(支持 --play 動畫回放、--json 導出)
  • TUI:/journey 覆蓋層
  • 桌面版:Star Map 交互面板

配套的清理命令:

hermes journey list           # 列出所有節點
hermes journey delete <node>  # 歸檔 Skill(可恢復)或刪除記憶
hermes journey edit <node>    # 用 $EDITOR 打開編輯

這個工具的存在意義遠超"炫技"——它承認了一件事:Agent 的成長過程本身,值得被審閲


十、這套剋制哲學的現實意義

把上面所有機制串起來,Hermes 的記憶哲學其實是四條鐵律

  1. 有界:字符上限強制精簡。
  2. 凍結:會話內不改,保護緩存。
  3. 透明:每次寫入用户看得見,可審批可撤銷。
  4. 自我整合:容量滿了不靜默丟棄,而是逼 Agent 主動取捨。

在宣傳"AI 記憶能力"時,很多產品強調"支持多大記憶庫、記住多少條目"。但站在使用者的角度,你真正關心的是三件事:

  1. 它有沒有記住真正重要的東西?
  2. 它有沒有把已經不成立的信息及時更新掉?
  3. 它會不會因為記了一堆無關的東西,反而變得更囉嗦、更容易搞錯?

能回答"什麼不該記"的記憶系統,才是好的記憶系統。


十一、可這套機制想真的跑通,還差一個東西

再好的記憶機制,也需要一個前提:Agent 得一直活着

如果你把 Hermes 裝在自己筆記本上,筆記本一合蓋就"打盹",後台自省循環停擺,nudge_interval 永遠等不到下一次觸發。換設備、系統重裝還要手動搬 ~/.hermes/ 目錄。

這時候,雲託管方案就變得非常有意義。LightVela雲託管的 Hermes Agent 服務

  • 獨立雲端實例,24×7 在線,MEMORY.md/USER.md/SQLite 會話檔案永久駐留;
  • 後台自省循環持續運行,Agent 真正做到"你不用它的時候也在成長";
  • 數據僅存於你的專屬服務器;
  • 手機、筆記本、Telegram、飛書……多渠道進來都是同一個"認識你的 Agent"。

Hermes 把"記憶不是越多越好"的哲學做到了極致;LightVela 讓這套哲學真的每一天都在你身邊生效。 這才是"越用越懂你"這句 slogan 兑現的方式。


小結

  • 好記憶系統 = 嚴格寫入 + 規範整理 + 三原子操作 + Consolidate 強制 + 後台自省 + 審批閘門 + 全程透明
  • 記得多不等於聰明,能識別"什麼不該記"、能被逼着"取捨"才更重要。
  • Hermes 給出了工程實現的參考,LightVela 想把它做成用户能觸達的產品體驗。