學習迴圈與記憶
源码版本v2026.7.20
職責
這是 Hermes 有別於一般 agent 的核心:一個「越用越好用」的閉環。它把每輪對話沉澱成:① 技能演化——從經驗建立/改寫技能(agent/learning_mutations.py);② 記憶——FTS5 全文檢索 + LLM 摘要的過往會話檢索(memory_manager),配合 Honcho 辯證式使用者建模;③ 學習圖——把技能與記憶組織成節點/邊(agent/learning_graph.py);④ 背景審視——background_review 在執行緒裡消化歷史、產出可執行的改寫動作。技能改寫最終回灌到技能系統,供後續輪次複用。
關鍵檔案
技能節點與學習圖
@dataclass SkillNode:28-41— 技能節點技能載入:77-125—_iter_skill_files/build_skill_nodes(掃描skills/建 nodes)邊與統計:156-193—build_edges/density_stats(技能間關聯)記憶-技能邊:193-227—_memory_cards/_memory_skill_edges(記憶與技能的關聯)build_learning_graph:248-328— 彙總產出完整學習圖_load_usage:84-97— 使用統計(指導哪些技能常用)
技能/記憶改寫
node_detail:86-124— 查看某節點詳情delete_node:124-157— 刪除技能或記憶edit_node:157-200— 編輯技能或記憶內容_clear_skill_cache:200— 改寫後清快取(讓下輪生效)記憶定位:30-65—_memories_dir/_parse_memory_id/_locate_memory
記憶管理
class MemoryManager:354— 記憶管理器本體memory provider 工具注入:83-164—memory_provider_tools_enabled/inject_memory_provider_toolsbuild_memory_context_block:337-354— 把記憶拼成上下文塊注入提示sanitize_context:164-172— 上下文脫敏(FTS5 索引前)StreamingContextScrubber:172-337— 串流輸出脫敏
背景審視
spawn_background_review_thread:956— 起背景審視執行緒_run_review_in_thread:617— 執行緒內主迴圈_digest_history:122-373— 摘要最近 24 條歷史summarize_background_review_actions:373-590— 彙總審視動作build_memory_write_metadata:590-617— 寫記憶的元資料
資料流
- 每輪對話結束,主迴圈把訊息快照交給背景審視執行緒(
agent/background_review.py:956)。 _digest_history(agent/background_review.py:122)摘要近期歷史,產出候選動作(新建/改寫技能、寫記憶)。- 技能改寫經
edit_node:157/ 刪除經delete_node:124落盤,並_clear_skill_cache:200清快取。 - 記憶寫入經
MemoryManager:354,脫敏(agent/memory_manager.py:164)後建 FTS5 索引,LLM 摘要壓縮。 - 下輪對話開始時,
build_memory_context_block(agent/memory_manager.py:337)把相關記憶拼進build_turn_context:268;技能經agent/skill_bundles.py注入。 - 完整學習圖由
build_learning_graph:254彙總,供 UI/除錯展示技能與記憶的關聯。
小結
學習閉環把「對話」變成「資產」:背景審視在背景把經驗沉澱為技能與記憶,下輪自動注入。關鍵四件套——learning_graph(圖譜)、learning_mutations(改寫)、memory_manager(檢索+脫敏+摘要)、background_review(非同步消化)。這是 Hermes「與使用者共同成長」的機制底座,也是它和「無狀態 LLM 呼叫」的根本區別。