
Hermes Agent 持久化记忆是怎么实现的3 层机制让它跨会话记住你【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 的持久化记忆基于~/.hermes/memories目录下的两个 AI 记忆文件MEMORY.md 记环境事实USER.md 记用户偏好会话结束不丢失。上周你纠正过它别用分号结尾这周新开的对话它依然照做——因为偏好被写进了文件而不是留在会话缓存里。下面拆解这套 AI 跨会话记忆的完整原理记忆如何被组织、如何被读写、如何被保护以及你该怎么用好它。两个记忆文件如何分工记忆被拆成两份文件各管一头文件存放内容例子MEMORY.md代理自己的笔记环境事实、项目约定、工具特性本机 Python 是 3.12用 uv 管理USER.md代理对你的了解偏好、沟通风格、工作流习惯回复用中文先给结论再给理由这种分法的好处是边界清晰关于你的进 USER.md关于环境和学到的东西的进 MEMORY.md。每个文件里的条目用段落符号§分隔支持多行内容因此一条记忆可以是完整的段落而不只是一行短语。容量上限按字符数而不是 tokens计算保证换模型后行为一致MEMORY.md 限 2200 字符USER.md 限 1375 字符。快照加实时状态记忆如何被读写核心实现是MemoryStore类它同时维护两套状态系统提示快照会话开始读盘load_from_disk()时冻结一份之后注入系统提示的内容整场不再变化。类比一下这就像演出开场前拍好的剧照幕间加了什么道具剧照也不会重拍。快照不变前缀缓存才稳定。实时状态会话中每次通过工具写入的记忆立即落盘工具响应永远反映最新内容。所以会出现本会话提示里看不到刚写的记忆但下一会话一定看得到的现象这是设计而非缺陷。写盘这一步用了原子写入避免写到一半断电留下半个文件。这是全文最值得看的一段代码staticmethod def _write_file(path: Path, entries: List[str]): 使用原子临时文件重命名写入条目到内存文件 content ENTRY_DELIMITER.join(entries) if entries else try: fd, tmp_path tempfile.mkstemp( dirstr(path.parent), suffix.tmp, prefix.mem_ ) try: with os.fdopen(fd, w, encodingutf-8) as f: f.write(content) f.flush() os.fsync(f.fileno()) os.replace(tmp_path, str(path)) # 同一文件系统上是原子操作 except BaseException: try: os.unlink(tmp_path) except OSError: pass raise except (OSError, IOError) as e: raise RuntimeError(fFailed to write memory file {path}: {e})思路很朴素先在同目录写临时文件并强制刷盘fsync成功后再os.replace一步换名。同目录保证临时文件与目标在同一文件系统上重命名因此是原子的——要么旧文件要么新文件没有中间态。如何防止记忆被注入记忆内容会被注入系统提示等于拿到了模型耳边的位置所以写入前必须过三道检查内容扫描匹配提示注入、角色劫持、外泄数据等威胁模式命中即拒绝写入不可见字符检测零宽空格之类的不可见 Unicode 字符会被逐字检查专门堵住人眼看不见的隐藏指令操作限制add、replace、remove 三种动作受字符上限与重复检查约束不能无限制塞内容。扫描逻辑的核心如下文def _scan_memory_content(content: str) - Optional[str]: 扫描记忆内容中的注入/窃取模式。被阻止时返回错误字符串。 for char in _INVISIBLE_CHARS: if char in content: return fBlocked: content contains invisible unicode character U{ord(char):04X} (possible injection). for pattern, pid in _MEMORY_THREAT_PATTERNS: if re.search(pattern, content, re.IGNORECASE): return fBlocked: content matches threat pattern {pid}... return None三道关卡叠加的效果一条记忆想进文件必须先证明它是干净的记忆而不是夹带的指令。这是记忆注入防护能落地的关键。日常怎么用管理记忆 几条建议管理接口只有一个入口memory_tool三个动作动作用途定位方式add新增条目自动查重并检查字符上限—replace更新现有条目唯一子字符串匹配remove删除条目唯一子字符串匹配配合使用时建议值得记的用户明说记住的、纠正过的、偏好与习惯、环境细节系统、工具、目录结构。不值得记的随口一句的、下次很容易重新发现的、大段原始输出——提炼成一句结论再写。分流关于你的进 user关于环境的进 memory。定期整理使用率超过 80% 时合并近义条目、删掉过时的给新信息留空间。收个尾Hermes Agent 的持久化记忆没有神秘成分两个文件分账、快照加实时双状态、原子写入加注入扫描四件事拼出了可靠的 AI 跨会话记忆。你只需要把该说的偏好讲清楚剩下的分类、落盘与清理策略交给代理自己维护。用满这套机制后你会发现对话成本在下降——同一句话不用再说第二遍。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考