学习循环与记忆
源码版本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 调用」的根本区别。