你用過的大多數 AI 聊天介面,其實沒有真正的記憶這種東西。它們只有一個上下文視窗,那完全是另一回事。你在同一段對話裡早些時候說過的話,模型還看得見;你昨天那段對話裡說過的話,沒了。第二天從零開始,助手又像個陌生人一樣跟你重新打招呼。
Hermes Agent 不一樣。它有一層真正的記憶——和對話上下文是分開的——它會隨時間慢慢了解你,把這些東西跨會話、跨平台帶著走,讓你每次跟這個 bot 對話時,它都像是同一個「誰」。這篇文章講它到底是怎麼跑的、哪些設計選擇是要緊的,以及 v0.7.0 那套可插拔的記憶介面到底改了什麼。
短期記憶 vs 長期記憶
先把要緊的那個區分講清楚。
Hermes 裡的短期記憶就是這次會話的上下文視窗。它是 agent 當下這段對話的那一片歷史,配著一套主動壓縮策略:上下文逼近模型上限時,Hermes 會跑一次摘要壓縮,把更老的輪次收成一份結構化的摘要,同時把最近的幾輪原封不動地留下來。這個壓縮過程隔幾個版本就調一次——v0.4.0 引入了結構化摘要和迭代更新,後來又加上 token 預算的尾部保護、可設定的摘要端點,還有備援模型支援。長對話裡,它默默幫你省錢省時間,又不會把重要的上下文丟掉。
長期記憶才是有意思的那一半。它是一個裝著事實、偏好、修正和使用者模型的倉庫,住在對話之外。今天你在 Telegram 上告訴這個 bot「我叫 Alice」,這條資訊會被寫進長期記憶。明天你在 Slack 上問它事情,這條資訊會被撈出來、塞進上下文,然後 agent 才看到你的訊息。模型能看到的仍然只是視窗塞得下的那部分,但這個視窗已經被它該知道的、關於你的那些事情墊好了底。
短期記憶是一塊緩衝區。長期記憶是一個人。
Honcho:它是什麼,為什麼重要
Hermes 預設的長期記憶提供者是 Honcho,一個專門為 AI 原生記憶打造的函式庫。它的工作就是跑在 agent 後面,做三件具體的事:
- 1.觀察。 每條使用者訊息、每條 agent 回應都會作為事件流灌進 Honcho。Honcho 從這串流裡建出一套內部的使用者模型——不是原始聊天紀錄,而是從對話裡推理出來的結構化事實和偏好。
- 2.對使用者做推理。 Honcho 跑著一層小小的「辯證」邏輯,試圖拼出一張關於你是誰、你想要什麼、你修正過什麼的完整畫像。這不是關鍵字擷取——它是一個即時跑著的使用者心智模型。
- 3.注入。 每一個新回合,Honcho 都會產出一段簡短的上下文片段,總結它認為關於你的哪些事情是要緊的,Hermes 把這段拼在系統提示詞的前面。Honcho 學到越多,這段片段就越在變。
有兩個細節值得單獨指出來,因為太容易被忽略。
第一,Honcho 的寫入操作是非同步的。agent 不會卡在一次記憶寫入上。它先把話說出去,記憶層在背景慢慢處理剛才那次互動。這意味著長對話不用為記憶更新交一份延遲稅,記憶後端掛掉也不會拖住 bot——掛掉期間丟的是那段時間的更新,但助手照樣在說話。
第二,Honcho 召回出來的那段內容是放在快取的系統前綴之外的。Anthropic 的 prompt caching 特性(在 Claude Sonnet 4.6 這類模型上被重度使用)希望系統提示詞在各輪之間保持穩定,這樣快取才能命中。Honcho 注入的那段每一輪都在變,所以 Hermes 故意把它拼在快取的系統段後面。靜態的部分照樣吃快取,動態的記憶層照樣跟得上變化。這類機械層面的取捨是不會出現在 release notes 裡的,但它決定了你每個月的帳單是 50 美金還是 500 美金。
閘道模式下的多使用者隔離
Hermes 閘道預設是讓多個使用者跑在同一個 agent 行程裡的。長期記憶必須按人分開,否則 Alice 的過敏史就會跑進 Bob 要的做菜建議裡。v0.3.0 這一版在閘道裡給 Honcho 加上了像樣的多使用者隔離,具體來說就是:
- •每個閘道使用者 ID 對應到一個獨立的 Honcho peer,記憶寫入按 peer 隔開作用域。
- •群組會話預設繼承「按人分會話」的行為,所以就算大家共享一個頻道,記憶流仍然是每個參與者各寫各的。
- •按 profile 隔離記憶(v0.5.0 / v0.6.0)意味著:你在同一台機器上跑多個 Hermes profile 時,每個 profile 的記憶都是一個獨立宇宙。切換 profile 的時候,不會讓一個身分的東西漏進另一個身分裡。
這些東西使用者是一個都看不見的。但它們加起來,才是這個 bot 不會把人記串的原因。
可插拔的記憶介面(v0.7.0)
Hermes 頭五個版本裡,Honcho 是被寫死的。到 v0.7.0,記憶層被重構成了一套像樣的 provider 介面——一個不大的 Python ABC,任何記憶後端都可以去實作它。這個改動在架構上並不激進,但在實際效果上大得嚇人。
這個介面讓你換記憶後端時完全不用動 Hermes 的核心:
- •Honcho 是那個參考實作(目前也仍然是預設)。它功能完整,跑著一套真正的使用者模型,多使用者隔離也做對了。
- •Supermemory 是 v0.8.0 加進來的第二個一等公民 provider,帶多 container 支援、可設定的搜尋模式,以及身分模板化。
- •mem0、OpenViking、RetainDB、Hindsight、ByteRover 都有社群寫的記憶外掛掛在 Hermes 的外掛系統上,整合深度各不相同。
- •你也可以自己寫一個。那個 ABC 很小:實作
write()、recall(),幾個生命週期掛鉤,然後作為外掛註冊一下就行。
那個內建的記憶 provider——如果你什麼都沒設,就走的那個零相依預設檔——是一個 SQLite 作底的事實儲存,做最基本的幾件事:寫事實、按相關度召回、按使用者分作用域。它不像 Honcho 那麼聰明,但它不相依於任何外部服務。對一個跑在 5 美金 VPS 上的個人助手來說,這通常就夠了。
這件事悄悄解鎖的可能性
可插拔記憶是那種在 release notes 裡看起來像掃地工活兒的架構改動。「把記憶重構成一層 provider 介面」這句話當不了頭條。但它真正做的事情,是把「一個 AI 助手到底該記住你哪些東西」這個問題,和「Hermes 是怎麼跑的」這個問題徹底拆開了。
你現在可以把 Honcho 換成任何一個更適合你場景的記憶後端——想對個人知識庫做語意搜尋的人可以換向量資料庫;想要顯式實體關係的人可以換圖形資料庫;不想讓任何記憶資料離開自己機器的人可以換成純本地 SQLite;團隊場景可以接一個公司內部的記憶服務。agent 本身一點都不用動,變的只是 memory 這個介面背後那個東西。
對一個想活很多年的專案來說,這是正確的抽象層次。記憶這件事是很私人的,適合你的那個記憶後端不一定適合別人。Hermes 的本分,是對你插上來的任何一層記憶都保持良好公民的姿態,然後讓開,不擋著它。