Command Palette

Search for a command to run...

0

我给 AI Agent 装了一套「记忆系统」:从 ACE 论文到生产级闭环

如果你的 AI 编码助手每次新 session 都像得了失忆症——不知道上次做到哪、不记得踩过的坑、不更新自己的技能库。我用一个周末,基于两篇顶会论文,给 Hermes Agent 搭了一套完整的上下文工程系统。成果:skills 描述缩减 84%,16 个 cron job 全自动运行,5 个 draft skill 自动生成。

我给 AI Agent 装了一套「记忆系统」:从 ACE 论文到生产级闭环

AI Agent 的最大瓶颈不是推理能力。是记忆。 每次新 session 等于新生儿。78 个技能 76% 从未被使用。 修复这个问题,不需要等下一个大模型。只需要一个好架构。


问题的量化

先看数据。在搭建这个系统之前,我扫描了自己的 Hermes Agent:

指标数字意味
总 skills78
从未被使用59 (76%)Agent 根本不知道它们存在
描述超 100 字符39 (57%)撑爆 prompt token
MEMORY.md 字符数6,765含 600+ 行重复日期(bug)
Curator 运行次数50 stale, 0 archived(从未清理过)
解决方案文件43全堆在一个目录,无法检索

一句话总结:Agent 在积累知识,但知识从来没有被有效组织、检索、回写。

这个问题的本质不是模型能力。是架构设计。


理论基础:两篇论文

我花了半天读了两篇 2026 年的关键论文:

ACE (Agentic Context Engineering) — ICLR 2026, arXiv 2510.04618

核心发现:上下文的本质不是静态摘要,而是持续演化的 playbook。三个角色形成闭环:

角色职责论文结果
Generator执行任务
Reflector反思产出
Curator整理、去重、衰减、回写+10.6% benchmark, -86.9% 延迟, -75.1% 成本

关键洞察:Bulletized context + 增量更新。 永远不重写整个上下文,只追加新的结构化条目。论文记录过一个 case:散文式上下文从 18,282 tokens 压缩到 122 tokens 后几乎完全丢失信息——这就是为什么「写得更短」不是解决方案,「写得更结构化」才是。

Memory for Autonomous LLM Agents — arXiv 2603.07670

58 页综述,覆盖了 2022 到 2026 年的 agent memory 研究。结论:行业正在收敛到三层架构——episodic(事件记忆)、semantic(语义记忆)、procedural(过程记忆)。这与 ACE 的三角色模型高度对齐。


系统设计

基于这两篇论文,我搭建了一个完整的上下文工程系统。核心架构:

Session End(Hook 触发,不等定时任务)
    ↓
reflect.sh --classify      → 自动分桶到 patterns/bugs/knowledge
index.py                    → .index.yaml 结构化索引
memory-hook.sh              → 阈值检测 → 自动更新 MEMORY.md
pattern-detector.sh         → 3+ 同模式 → draft skill
skill-usage-hook.sh         → 快照差分追踪技能使用
    ↓
Cron 兜底(hook 挂了也不怕)
    5 个 cron job:衰减 / 去重 / LLM 合并 / 投毒扫描 / 灾难恢复

设计决策一:Hook 优先于 Cron + Agent

业界常见的做法是「定时任务 + Agent 自己决定」。问题:Agent 可能「忘了」执行,延迟 24 小时才生效。

我的方案:Hook 即时触发为主,Cron 兜底为辅。

场景Hook(即时)Cron(兜底)
新解决方案分类✅ session-end
MEMORY.md 更新✅ session-end✅ 每日 4:00
模式检测✅ session-end✅ 每周日 3:30
衰减/去重❌(太重)✅ 每周日凌晨

设计决策二:不破坏 Hermes 原生接口

所有改动通过 ~/.hermes/skills/~/.hermes/scripts/ 实现。不改一行 Hermes 核心代码。删脚本 + 删 cron 即可恢复原状。

设计决策三:反思→分类→回写全自动

之前: Agent 踩坑→写 solution 文件→下一个 session 不知道这个文件存在。

现在:

任务完成 → reflect.sh 反思
    → 自动分桶 patterns/bugs/knowledge
    → index.py 注册到 .index.yaml(结构化索引)
    → pattern-detector 检测 3+ 同模式 → 自动生成 draft skill
    → 5+ high-importance → 自动回写 MEMORY.md

成果

Skill 系统

指标改造前改造后
Description 总字符~15,0002,322 (-84%)
超长描述39 (57%)0
幽灵条目(无实际 skill)700
平均描述长度190 chars34 chars

Memory 系统

指标状态
MEMORY.md 字符2,166 / 2,200 ✅
Solutions 索引.index.yaml 362 行
Cron jobs(新增)5 个(衰减/去重/合并/扫描/恢复)
Pattern 候选5 个 draft skill

自进化

.reflect.sh --classify → 33 条索引
    ↓
pattern-detector.sh → 3 个高重要性模式 (17/16/6 occurrences)
    ↓
.candidates/ → 5 个 draft SKILL.md
    ↓
等待 curator 审核 → 自动发布

踩坑实录

这套系统不是一遍搭好的。以下是真实踩过的坑:

坑 1:str.replace 全文替换

memory-sync.pycontent.replace("最后更新:", f"最后更新:{today}") 更新时间戳。但这个操作是全文替换——每次运行在原日期前面再粘一个新日期。几周下来,MEMORY.md 的 6,765 字节几乎全是重复日期。

修复: 改用 re.sub(r"^> 最后更新:[\d-]+\n", ...) 精确匹配。

坑 2:access_count 不递增

整个 decay 系统依赖 access_count 判断文件是否被使用。但没有任何代码递增这个计数器。结果:所有文件都会被标为「从未使用」,30 天全部归档,90 天全部删除。

修复: 改用文件 mtime(修改时间),不依赖计数器。

坑 3:yq 未安装

计划用 yq 做 YAML 操作,但服务器没装。PyYAML 是现成的。

教训: 设计前先检查已安装的工具。

坑 4:source 路径没有项目信息

跨项目模式检测需要知道「这个 pattern 在哪些项目出现过」。但 source 字段写的是 session://date,没有项目路径。

修复: 每次分类时注入 project=$PWD

坑 5:Agent 决策不可靠

原始设计是「cron 触发的 Agent 读 JSON → 决定是否更新 MEMORY.md」。但 Agent 可能不读、可能读了不执行。

修复: 改 Hook 自动执行,零 Agent 决策。


与行业实践的对比

能力Claude Code Auto-MemoryCodex Chronicle我们
Agent 自写上下文✅ CLAUDE.md✅ chronicle✅ AGENTS.md + MEMORY.md 回写
渐进式加载✅ description only✅ 上限 2% context⚠️ Hermes 架构限制
文件衰减✅ mtime + trust decay
模式检测→Skill 生成✅ 3+ same-tag → draft
记忆投毒防御✅ MINJA pattern 扫描
零破坏设计❌ (couples to core)✅ 不改核心代码

我们独有的: ACE 三角色全闭环(行业中唯一完整实现)、Hook 优先架构、自进化 Skill 生成。


这个系统适合谁

如果你:

  • 维护 3+ 个 AI Agent 项目
  • 有 50+ 个 skills 但不知道哪些真的被用过
  • Agent 的记忆文件在默默膨胀
  • 想让 Agent 自己从踩坑记录里学会新技能

那么这套系统可以直接适配。所有的脚本在 ~/.hermes/skills/~/.hermes/scripts/ 下,不改 Agent 核心代码。


下一步

当前系统已经跑了完整的 Reflector→Curator→Evolver 闭环。接下来:

  1. Embedding 语义去重 — 当前用的是 content hash,对近义内容无法去重
  2. 跨项目 AGENTS.md 自动更新 — pattern 跨 2+ 项目出现时自动写回
  3. LoCoMo benchmark 评估 — 用标准 benchmark 量化记忆能力提升

本系统基于 ACE (arXiv 2510.04618) 和 Memory for Autonomous LLM Agents (arXiv 2603.07670) 两篇论文。全部代码在 ~/context-engineering-system/,不改 Hermes 核心。