Skip to content

會話與投遞

源码版本v2026.7.20

職責

兩件事:① 會話(Session)——把「訊息從哪來」(平台、chat、發送者)歸到一個穩定 key,並持久化對話到磁碟,讓 agent 跨重啟續上下文;② 投遞帳本(Delivery Ledger)——為 agent 的最終回覆記一筆「送達義務」,崩潰後能識別未投遞的回覆並補發,保證使用者最終收到。兩者都在網關層,與 agent 解耦。

關鍵檔案

資料流

  1. 轉接器收到平台事件,經 MessageEvent:1759 帶出 SessionSource
  2. SessionSource:149 雜湊出穩定的 chat/sender id(gateway/session.py:40)。
  3. 建構 SessionContext:299,得到 session key(經 路徑安全校驗:109 後用作磁碟路徑)。
  4. session key 決定歷史從哪個檔案載入,餵給 agent 續上下文。
  5. agent 產出最終回覆後,網關在 record_obligation:155 記帳 → 發送 → mark_delivered
  6. 若發送中崩潰,下次啟動 sweep_recoverable(gateway/delivery_ledger.py:203)掃描 attempting 狀態且屬主行程已死的義務,補發或標記失敗。

小結

會話層負責「這條訊息屬於哪段持續對話」,用雜湊 + 路徑校驗把外部身分安全映射到磁碟檔案。投遞帳本負責「agent 想發的最終回覆是否真的到了使用者手裡」,用 sqlite 狀態機做崩潰恢復。兩者都是 best-effort 但不可或缺的可靠性層。

非官方社群學習站,內容以 MIT 授權的 NousResearch/hermes-agent 原始碼為依據。