公司动态

HoRain云--Hermes Agent 记忆系统

📅 2026/7/15 13:14:23
HoRain云--Hermes Agent 记忆系统
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍三层记忆架构持久记忆文件两个核心文件记忆如何注入系统提示词Agent 如何操作记忆实例什么该记什么不该记应该主动保存到 memory环境与工作应该主动保存到 user关于你不应该保存的内容好记忆 vs 坏记忆记忆容量管理接近上限时会发生什么容量参考控制记忆写入权限开启写入审批实例审批管理命令实例关于后台自我改进回顾实例实例情节日志与跨会话搜索所有对话都自动保存session_search 工具session_search vs 持久记忆会话管理命名与恢复实例实例常用会话管理命令实例会话自动清理可选实例Honcho 用户建模Honcho 与内置记忆的对比两层上下文注入三个独立调节旋钮实例多 pass 辩证推理快速上手 Honcho实例实例实例Honcho 提供的工具Honcho CLI 命令实例记忆系统配置参考实例常用记忆操作速查在对话中直接操控记忆实例斜杠命令实例直接编辑记忆文件实例记忆安全与隐私安全扫描日志中的敏感信息脱敏实例数据本地存储Hermes 最核心的差异化能力不是工具调用而是它真的记得你。大多数 AI 工具每次对话都从零开始——你今天花一个小时教会它你的项目结构、命名规范、部署流程明天开新会话全部重来。本章将深入解析 Hermes 如何通过三层记忆结构解决这个问题以及 Agent 如何自主管理记忆、实现跨会话搜索与召回。三层记忆架构Hermes 用三层相互独立、功能互补的记忆结构来存储和召回信息。三层设计的核心思路高频重要信息常驻上下文低频历史信息按需召回深层模式由 AI 自动推理——在记忆能力与 Token 成本之间取得平衡。┌─────────────────────────────────────────────────┐ │ 第一层持久记忆Persistent Memory │ │ MEMORY.md环境事实 USER.md用户画像 │ │ → 每次会话启动时自动注入系统提示词始终可见 │ ├─────────────────────────────────────────────────┤ │ 第二层情节日志Session History │ │ SQLite FTS5 全文检索存储所有历史对话 │ │ → Agent 主动搜索时按需加载不占用固定 Token │ ├─────────────────────────────────────────────────┤ │ 第三层用户建模Honcho可选 │ │ 辩证推理引擎提取跨会话模式、偏好与目标 │ │ → 比你亲口说出来的更深层地理解你 │ └─────────────────────────────────────────────────┘记忆层级存储位置容量加载方式用途持久记忆~/.hermes/memories/ 下的 Markdown 文件~1,300 tokens 总量会话启动时自动注入系统提示词关键事实始终可见情节日志SQLite 数据库 JSONL 转录文件无限所有历史对话Agent 按需搜索FTS5 全文检索查找特定历史讨论Honcho 用户建模Honcho 服务端 API按 Agent 隔离每轮/每 N 轮后台推理注入自动推导深层偏好与目标三层之间不是替代关系而是互补关系。持久记忆回答「我总是需要知道这些」情节日志回答「我们上周聊过这个问题吗」Honcho 回答「你真正想要的是什么」。持久记忆文件持久记忆是 Hermes 记忆系统的第一层也是最基础的一层。它由两个存放在~/.hermes/memories/下的 Markdown 文件组成每次会话启动时自动注入系统提示词。两个核心文件两个文件各司其职互不重叠。文件用途字符上限约等于MEMORY.mdAgent 的个人笔记——环境事实、项目规范、工作中学到的东西2,200 字符~800 tokensUSER.md用户画像——你的偏好、沟通风格、工作习惯、技能水平1,375 字符~500 tokens字符上限是有意设计的——它保证记忆内容保持精炼、聚焦。如果一条新条目超出上限memory 工具会返回错误让 Agent 先整理空间再写入而不是悄悄丢弃旧条目。记忆如何注入系统提示词每次会话启动时两个文件的内容以固定格式注入系统提示词格式如下══════════════════════════════════════════════ MEMORYAgent 个人笔记[67% — 1,474/2,200 字符] ══════════════════════════════════════════════ 用户的项目是位于 ~/code/myapi 的 Rust Web 服务使用 Axum SQLx § 本机运行 Ubuntu 22.04已安装 Docker 和 Podman § 用户偏好简洁回复不喜欢冗长解释这里有几个关键设计细节冻结快照模式系统提示词中的记忆内容在会话开始时捕获一次中途不会更新。这是刻意设计——为了让 LLM 的前缀缓存Prompt Cache保持有效降低 Token 成本。Agent 在会话中修改记忆变化立即写入磁盘但要等下次会话启动才会出现在上下文中。用量百分比可见[67% — 1,474/2,200]让 Agent 随时知道剩余容量在接近上限时主动整理。§ 作为条目分隔符每条记忆之间用 § 分隔条目本身可以是多行文字。Agent 如何操作记忆Agent 通过内置的memory工具管理记忆支持三种操作。操作说明参数add新增一条记忆条目targetmemory/user、contentreplace替换已有条目子串匹配定位target、old_text、contentremove删除已有条目子串匹配定位target、old_text注意没有 read 操作——记忆内容在会话启动时已经注入系统提示词Agent 直接在上下文中看到它不需要额外读取。replace和remove使用子串匹配定位条目不需要提供完整条目文本实例# 场景当前记忆中有 用户所有编辑器都偏好深色主题# 现在需要更新为更精确的版本# 使用子串匹配定位——只需提供能唯一标识的片段即可memory(actionreplace,targetmemory,old_text深色主题, # 唯一子串即可定位原条目content用户 VS Code 用浅色主题终端用深色主题 # 替换后的新内容)如果子串匹配到多个条目工具会返回错误要求提供更精确的匹配串。什么该记什么不该记Agent 会自动判断并保存有价值的信息——你通常不需要显式要求。但了解判断标准有助于你理解 Agent 的行为以及在需要时手动引导。应该主动保存到 memory环境与工作以下类型的信息触发 Agent 写入 MEMORY.md类型示例环境事实本机运行 Debian 12PostgreSQL 16Docker 用 Podman 替代项目规范~/code/api 使用 Go 1.22sqlc 查询chi 路由测试用 make test工具经验staging 服务器 SSH 端口是 2222不是 22密钥在 ~/.ssh/staging_ed25519纠正记录不要用 sudo 运行 Docker 命令用户已在 docker 用户组完成工作2026-01-15 完成数据库从 MySQL 迁移到 PostgreSQL应该主动保存到 user关于你以下类型的信息触发 Agent 写入 USER.md类型示例身份信息姓名、职位、时区沟通偏好偏好简洁回复不需要解释显而易见的步骤厌恶项不要在代码里加过多注释工作习惯每天下午 3 点前不看消息技能水平熟悉 Rust 和 PythonGo 是新学的不应该保存的内容以下内容不值得占用宝贵的记忆空间类型示例原因过于笼统用户有个项目无信息量无法复用可随时重查Python 3.12 支持 f-string 嵌套搜索即可不值得占空间原始数据大段日志、代码块、数据表超出字符限制结构化记忆更有用临时性内容本次调试的临时文件路径下次用不上已在上下文中的内容项目 SOUL.md、AGENTS.md 里已有的信息重复注入浪费 Token好记忆 vs 坏记忆同样的信息写得好可以一条顶十条写得差则毫无价值。评级示例点评好用户的 macOS 14 SonomaHomebrewDocker DesktopShell 是带 oh-my-zsh 的 zsh编辑器是 VS Code Vim 键位信息密度高相关事实打包在一起好项目 ~/code/api 使用 Go 1.22sqlc 做 DB 查询chi 路由。测试make test。CIGitHub Actions具体可执行的规范好staging 服务器10.0.1.50SSH 端口 2222 不是 22密钥 ~/.ssh/staging_ed25519有上下文的经验教训避免踩坑差用户有项目太模糊无法指导任何行动差2026 年 1 月 5 日用户让我查看他的项目位于 ~/code/api我发现它使用 Go 1.22 版本……太啰嗦核心信息被淹没在叙述中记忆容量管理记忆文件有严格的字符上限Agent 需要在接近上限时主动整理。接近上限时会发生什么当新条目会导致超出字符上限时工具返回错误而非静默截断{ success: false, error: Memory 已用 2,100/2,200 字符。新条目250 字符会超出上限。 请先整理用 replace 合并重叠条目或 remove 过时条目 再重试——在同一轮对话中完成。, current_entries: [ 用户的 macOS 14 SonomaHomebrewDocker Desktop, 项目 ~/code/api 使用 Go 1.22sqlc 做 DB 查询 ], usage: 2,100/2,200 }收到这个错误后Agent 的正确做法是读取当前所有条目错误响应中已经包含找出可以删除或合并的条目用replace将几条相关条目合并为一条更精炼的版本然后重试添加新条目最佳实践当系统提示词显示记忆使用率超过 80% 时主动整理不要等到报错。预防永远比补救更省 Token。容量参考存储上限典型条目数MEMORY.md2,200 字符8–15 条USER.md1,375 字符5–10 条控制记忆写入权限默认情况下Agent 可以自由写入记忆——包括后台自动触发的自我改进回顾一轮对话结束后在后台运行提炼记忆和技能。如果你希望在任何内容写入记忆前先审核可以开启写入审批。开启写入审批在配置文件中设置即可实例# 文件路径~/.hermes/config.yaml# 开启记忆写入审批——所有写入操作需要手动批准memory:write_approval: true # 默认 false自由写入开启后的行为变化场景行为CLI 交互中 Agent 要写记忆在终端内联提示你审批消息平台 / 后台自动回顾写入被暂存等待你手动审批审批管理命令使用以下斜杠命令管理待审批的记忆写入实例# 查看待审批的记忆写入自动触发的标记 [auto]/memory pending# 批准指定 ID 的写入或批准全部/memory approve id/memory approve all# 拒绝指定 ID 的写入或拒绝全部/memory reject id/memory reject all# 运行时开启或关闭审批设置会持久保存/memory approval on/memory approval off适用场景如果 Agent 保存了一个关于你的错误假设或者你想完全掌控记忆内容开启 write_approval 是最直接的方式。关于后台自我改进回顾每轮对话结束后Hermes 会在后台运行一次自我改进回顾background review分析这轮对话并提炼值得保留的记忆或技能。默认会在聊天中显示一行提示Memory updated。你可以调整通知的详细程度实例# 文件路径~/.hermes/config.yaml# 控制后台回顾的通知详细程度display:memory_notifications: on # off | on默认| verbose值效果off不显示通知但回顾仍在运行、仍会写入on默认简短提示如 Memory updatedverbose包含变更预览如 Memory 用户偏好简洁回复如果你的主模型费用较高可以让后台回顾跑在更便宜的模型上实例# 文件路径~/.hermes/config.yaml# 后台回顾使用独立模型降低费用auxiliary:background_review:provider: openroutermodel: google/gemini-3-flash-preview # 默认 auto 主模型情节日志与跨会话搜索第二层记忆——情节日志Session History——存储所有历史对话的完整记录支持全文检索和按需召回。所有对话都自动保存每一次会话——无论来自 CLI、Telegram、Discord 还是其他任何平台——都自动存入两个位置存储位置格式内容~/.hermes/state.dbSQLite 数据库 FTS5 全文索引结构化元数据、完整消息历史含工具调用和结果、Token 用量、时间戳~/.hermes/sessions/JSONL 转录文件原始对话转录包含工具调用记录session_search 工具Agent 内置session_search工具可以在所有历史对话中执行全文检索。整个过程无需 LLM 参与搜索阶段直接由 SQLite FTS5 引擎完成工作流程FTS5 按相关性排序检索匹配消息按会话分组取最相关的若干会话默认 3 个加载各会话对话截取匹配点附近约 10 万字符用轻量摘要模型生成聚焦摘要返回各会话的摘要与上下文给 Agent支持的搜索语法FTS5 标准语法示例说明关键词检索docker deployment匹配包含任一关键词的消息短语匹配exact phrase精确匹配整个短语布尔 ORdocker OR kubernetes匹配任一关键词布尔 NOTpython NOT java排除特定关键词前缀通配符deploy*匹配以 deploy 开头的词触发时机Agent 会在你提到「上次我们讨论过的……」或「之前那个方案……」时自动调用 session_search而不是让你重复解释。session_search vs 持久记忆两者功能互补不是替代关系对比维度持久记忆MEMORY.md / USER.md情节日志Session Search容量~1,300 tokens 总量无限所有历史对话速度即时已在系统提示词中~20msFTS5 查询Token 成本每次会话固定消耗按需不查不花用途关键事实始终可见查找特定历史讨论管理方式Agent 主动整理全自动无需干预记忆用于「我总是需要知道这些的」——环境事实、用户偏好、项目规范。情节日志用于「我们上周聊过这个问题吗」——查找具体历史讨论。会话管理情节日志中的每条会话都可以被命名、恢复、导出和清理。命名与恢复Hermes 会在第一轮对话后自动生成一个简短的会话标题3–7 个词在后台异步运行不影响响应速度。你也可以手动命名实例# 在会话中手动设置标题/title 重构认证模块命名后恢复会话时可以直接用标题实例# 按标题恢复会话hermes -c 重构认证模块# 恢复最近一次会话hermes --continue# 按会话 ID 恢复hermes -r session_id自动世系Auto-Lineage当会话经过上下文压缩时Hermes 自动创建延续会话并编号我的项目 → 我的项目 #2 → 我的项目 #3按标题恢复时自动选取最新的延续会话。常用会话管理命令实例# 列出最近 20 条会话hermes sessions list# 按来源平台筛选hermes sessions list --source telegram# 显示更多条hermes sessions list --limit 50# 重命名指定会话hermes sessions rename id 新标题# 导出所有会话到文件hermes sessions export backup.jsonl# 删除指定会话hermes sessions delete id# 清理 30 天前的旧会话hermes sessions prune --older-than 30# 查看统计信息hermes sessions statshermes sessions list的输出示例标题 预览 最近活跃 ID ──────────────────────────────────────────────────────────────────── 重构认证模块 帮我重构认证模块的代码 2 小时前 20260305_09... 我的项目 #3 检查一下测试失败的原因 昨天 20260304_14... — Python 装饰器怎么用 3 天前 20260303_10...会话自动清理可选默认情况下会话历史永久保留因为它为 session_search 提供数据。如果需要自动清理在配置中开启实例# 文件路径~/.hermes/config.yaml# 开启会话自动清理默认关闭sessions:auto_prune: true # 默认 falseretention_days: 90 # 保留最近 90 天vacuum_after_prune: truemin_interval_hours: 24Honcho 用户建模Honcho 是由 Plastic Labs 开发的 AI 原生记忆后端以插件形式集成到 Hermes 中。它不替换 MEMORY.md 和 USER.md而是在它们之上增加辩证推理层——通过分析你的对话模式自动推导你未曾明确表达的偏好、目标和习惯。与 MEMORY.md 的手动策划方式不同Honcho 是全自动的它在每轮对话后频率可配置在后台推理积累对你越来越深的理解。Honcho 与内置记忆的对比能力内置记忆Honcho跨会话持久化本地文件服务端 API用户画像手动策划USER.md自动辩证推理会话摘要—会话级上下文注入多 Agent 隔离—按 Agent 分开建模语义搜索FTS5 全文基于推理结论两层上下文注入每一轮对话Honcho 组装两层上下文注入系统提示词基础层Base Context会话摘要 用户表征 用户 Peer Card AI 自我表征。按 contextCadence每 N 轮刷新一次。这是「这个用户是谁」层。辩证层Dialectic Supplement由 Honcho 的 LLM 引擎实时推理生成关注「当前最相关的是什么」。按 dialecticCadence 刷新。辩证推理的两种启动模式模式条件查询方式冷启动无历史数据通用查询——「这个用户是谁他们的偏好、目标和工作方式是什么」热启动已有历史数据会话聚焦查询——「基于本次会话已讨论的内容关于这个用户最相关的上下文是什么」三个独立调节旋钮参数控制的内容默认值contextCadence基础层刷新间隔每 N 轮调用一次 API1dialecticCadence辩证层刷新间隔每 N 轮调用一次 LLM2推荐 1–5dialecticDepth每次辩证的推理深度1–3 次 pass1三个旋钮完全独立——你可以高频刷新基础层、低频运行辩证推理也可以反过来实例{contextCadence: 1,dialecticCadence: 5,dialecticDepth: 2}以上配置表示每轮刷新基础层每 5 轮做一次 2 pass 深度辩证推理。多 pass 辩证推理当 dialecticDepth 设为大于 1 时每次辩证推理运行多轮 LLM 调用Pass任务说明Pass 0冷/热启动推理建立初始评估Pass 1自我审计识别初始评估的盲点综合近期会话证据Pass 2调和检查前两轮的矛盾产出最终综合结论深度 3 不一定等于 3 次 LLM 调用——如果上一轮已产出高质量输出下一轮会提前退出节省 Token。快速上手 Honcho实例# 交互式设置选择 honcho 提供者hermes memory setup或手动配置实例# 文件路径~/.hermes/config.yaml# 启用 Honcho 作为记忆提供者memory:provider: honcho实例# 将 API Key 写入环境变量文件echo HONCHO_API_KEYyour_key ~/.hermes/.env在 honcho.dev 获取 API Key。Honcho 提供的工具开启 Honcho 后Agent 可以使用五个专属工具工具用途honcho_profile读取或更新用户 Peer Cardhoncho_search基于推理结论的语义搜索原始片段无 LLM 综合honcho_context获取完整会话上下文摘要、用户表征、近期消息honcho_reasoning调用 Honcho LLM 推理可指定 reasoning_levelhoncho_conclude创建或删除推理结论Honcho CLI 命令实例# 查看 Honcho 连接状态、配置和关键设置hermes honcho status# 查看或设置会话策略hermes honcho strategy# 查看或设置召回模式hybrid/context/toolshermes honcho mode# 查看或设置 Token 预算hermes honcho tokens# 列出已知的 Honcho 会话映射hermes honcho sessions记忆系统配置参考以下是所有记忆相关配置的完整参考可直接复制到你的配置文件中使用。实例# # 文件路径~/.hermes/config.yaml# Hermes 记忆系统完整配置参考# # --- 持久记忆配置 ---memory:memory_enabled: true # 是否启用持久记忆MEMORY.mduser_profile_enabled: true # 是否启用用户画像USER.mdmemory_char_limit: 2200 # MEMORY.md 字符上限约 800 tokensuser_char_limit: 1375 # USER.md 字符上限约 500 tokenswrite_approval: false # true 所有记忆写入需要手动审批provider: honcho # 可选启用 Honcho 记忆提供者# --- 会话自动清理可选默认关闭---sessions:auto_prune: false # 是否自动清理旧会话retention_days: 90 # 保留最近 N 天的会话vacuum_after_prune: true # 清理后是否回收磁盘空间min_interval_hours: 24 # 两次清理之间的最小间隔# --- 后台回顾通知 ---display:memory_notifications: on # off | on | verbose# --- 后台回顾使用更便宜的模型可选---auxiliary:background_review:provider: openrouter # 模型提供者model: google/gemini-3-flash-preview # 模型名称常用记忆操作速查在对话中直接操控记忆你可以用自然语言指令 Hermes 操作记忆无需记忆任何命令实例# 新增记忆记住我们这个项目用 Poetry 管理依赖不用 pip# 删除或覆盖记忆忘记之前关于 MySQL 的记录我们已经迁移到 PostgreSQL 了# 更新记忆中的信息把 staging 服务器的 IP 更新为 10.0.2.100# 查询记忆告诉我你现在记住了哪些关于我的信息斜杠命令实例# 查看当前记忆内容/memory# 查看待审批写入/memory pending# 批准所有待审批/memory approve all# 拒绝所有待审批/memory reject all# 开启写入审批/memory approval on# 关闭写入审批/memory approval off直接编辑记忆文件记忆文件是普通的 Markdown可以直接用编辑器打开修改实例# 查看当前记忆内容cat ~/.hermes/memories/MEMORY.mdcat ~/.hermes/memories/USER.md# 用编辑器打开修改nano ~/.hermes/memories/MEMORY.md注意直接编辑文件后变化会在下次会话启动时生效不会立即体现在当前会话的上下文中。记忆安全与隐私安全扫描记忆内容在写入前会经过安全扫描检测注入攻击和数据窃取模式。系统会检测以下威胁模式威胁类型检测内容提示词注入试图覆盖 Agent 系统指令的注入模式凭据窃取诱导 Agent 泄露 API Key 或 Token 的指令后门安装SSH 后门或远程访问的安装指令隐藏字符不可见 Unicode 字符零宽空格、方向覆盖等匹配到威胁模式的内容会被拒绝写入。日志中的敏感信息脱敏API Key、Token 等敏感信息在所有日志文件中自动脱敏——即使出现在工具输出里也不会以明文形式记录实例# 文件路径~/.hermes/config.yaml# 默认开启敏感信息自动脱敏security:redact_secrets: true数据本地存储所有记忆数据MEMORY.md、USER.md、state.db默认存储在本地~/.hermes/目录不上传到云端。选择使用 Honcho 时对话数据会发送到 Honcho 的服务器进行处理——这是一个有意的权衡用数据上传来换取更深的推理能力。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧