)
1. 为什么你的 Hermes 总是“失忆”如果你正在用 Hermes Agent 做本地开发助手大概率遇到过这种场景昨天刚跟它约定好“这个项目统一用 pnpm不要用 npm”今天开新会话它又默认跑npm install上周讨论过的数据库表结构这周问它它一本正经地编了一套完全不同的字段名。这不是模型笨而是记忆系统没配好。Hermes 的 Memory 记忆系统就是解决“它老是忘事”这个痛点的。它把三类信息持久化下来稳定事实项目约定、常用命令、环境信息、用户偏好你的技术栈、称呼、沟通风格、以及过去做过的工作会话历史。配好之后下一次会话开箱即用而不是每次从零开始。这篇是 Hermes 教程 08聚焦 Memory 记忆系统的落地配置与验证。我会带你在settings.json以及 Hermes 的config.yaml里写入记忆存储路径与检索参数并通过 TaoToken 统一 Key/API 通道接入模型调用最后交付一套可复制的配置骨架和三步验证动作写入记忆、跨会话召回、命中日志确认。适合已经装好 Hermes、想让助手真正“记住事”的开发者基础难度15 分钟能跑通。需要先说明一点Hermes 的记忆读写本身是本地行为但“判断什么值得记”“召回后怎么用”这些环节仍然要调用模型。所以模型通道的稳定性直接决定记忆系统好不好用。我这边统一用 TaoToken 的 Key 来接入一个 Key 走通对话、编码、Agent 场景省得在多个平台之间来回切。2. TaoToken 前置统一 Key 与接入地址在动记忆配置之前先把模型通道理顺。Hermes 支持自定义 OpenAI 兼容的 base_url 和 api_keyTaoToken 正好提供这套接口所以接入很直接。你需要先拿到一个 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。API 的基础地址是 https://taotoken.net/api 注意这个地址后面不加任何 UTM 参数直接填进配置即可。拿到 Key 之后建议不要硬编码进配置文件而是写进环境变量。Hermes 读取TAOTOKEN_API_KEY或者你在配置里指定的变量名都行。我习惯这样export TAOTOKEN_API_KEYsk-你的key如果你用的是 zsh把上面这行加到~/.zshrcbash 就加到~/.bashrc。这样每次开终端自动加载Hermes 启动时能直接读到。TaoToken 的模型列表和文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 接入前可以先去确认当前可用的模型名。记忆系统里“判断是否值得记住”这一步通常用轻量模型就够召回后的推理再用主力模型这样成本更可控。有一点要提醒TaoToken 是合规的 API 聚合通道不是那种来路不明的转发。你把它当成一个统一的模型入口就行Key 只存在本地环境变量里不要写进会提交到 Git 的文件。3. 可复制配置settings.json 与 config.yaml 骨架Hermes 的配置分两层~/.hermes/config.yaml管记忆系统的行为settings.json管模型通道和运行时参数。两者配合才能跑通完整闭环。先看记忆系统这一层。在~/.hermes/config.yaml里找到或新增memory段memory: memory_enabled: true # 启用持久记忆 user_profile_enabled: true # 启用用户画像 provider: builtin # builtin / honcho / mem0 memory_char_limit: 3000 # 单条记忆上限 user_char_limit: 2000 # 用户画像上限 storage_path: ~/.hermes/memory # 记忆存储路径 retrieval: top_k: 5 # 召回条数 min_score: 0.35 # 召回最低相关度 recency_weight: 0.2 # 时间新鲜度权重provider有三种选择按你的场景挑Provider存储特点适用场景builtin本地 SQLite零依赖个人 / 单机honchoHoncho 服务用户建模更细多用户场景mem0Mem0 平台语义检索强团队 / 云端个人开发直接用builtin开箱即用数据全在本地。切换 Provider 后 Hermes 会提示迁移或重建索引动手前先hermes backup -q备份一次这个坑我踩过切完发现旧记忆“没了”其实只是存储隔离。再看模型通道这一层。settings.json里配置 TaoToken 的接入{ model: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, default_model: claude-sonnet-4-5, memory_model: gpt-4o-mini }, memory: { enabled: true, inject_on_start: true, auto_write: true, redaction: true } }这里几个参数值得说清楚。base_url填 TaoToken 的 API 地址api_key_env指向你刚才设的环境变量名这样 Key 不进配置文件。memory_model单独指定记忆判断用的轻量模型和主推理模型分开省钱。inject_on_start让新会话自动加载记忆auto_write开启自动沉淀redaction保持开启敏感信息写入前自动脱敏。配置改完跑一次校验hermes config migrate hermes doctorconfig migrate会把旧版本配置升级到当前格式doctor检查各项依赖是否就绪。如果doctor报 Provider 未就绪先确认memory.provider和对应服务是否可用。4. 三步验证写入、召回、命中日志配置写完不代表记忆系统真的在工作。下面三步是我实测下来最靠谱的验证路径每一步都有明确的成功标志。4.1 第一步写入记忆开一个会话显式让 Hermes 记住一条稳定事实hermes chat # 会话内输入 # 记住这个项目统一用 pnpmNode 版本锁定 20.x或者用命令行直接写hermes memory add 项目统一用 pnpmNode 版本锁定 20.x写入后立刻查状态hermes memory status hermes memory showstatus会显示记忆系统是否工作、占用多少条show列出当前记忆和画像内容。成功标志是你刚写的那条出现在列表里。如果没出现检查memory_enabled是否为 true以及auto_write有没有被关掉。4.2 第二步跨会话召回这一步是关键。完全退出当前会话重新开一个hermes chat # 新会话里问 # 这个项目用什么包管理器如果记忆系统正常Hermes 应该直接回答 pnpm而不是反问你。这就是跨会话召回——记忆在会话之间持久化新会话启动时自动注入上下文。想更直观地看召回过程用/journey打开记忆时间线hermes journeyv0.18.0 新增的/journey把记忆以时间线形式可视化能看到每条记忆的写入来源、编辑内容、删除错误记忆。桌面端还把它升级成了可交互的径向记忆图谱所有记忆和技能节点连成一张网点击、拖动、直接删除都行。4.3 第三步命中日志确认召回到底命中了哪几条记忆、相关度多少日志里能看到。Hermes 的日志默认在~/.hermes/logs/下tail -f ~/.hermes/logs/memory.log然后在另一个会话里触发一次召回观察日志输出。你会看到类似这样的记录[memory] query包管理器 top_k5 [memory] hit idmem_8f3a score0.82 text项目统一用 pnpm... [memory] inject 1 entries into contextscore是相关度inject表示这条记忆被注入到了本次推理的上下文里。如果日志里hit为空说明召回没命中回去调retrieval.min_score或检查关键词。如果inject有记录但模型还是答错那问题在模型通道检查 TaoToken 的 Key 和 base_url 是否生效。三步走完记忆读写闭环就算跑通了。写入有记录、召回有结果、日志有命中三个环节缺一不可。5. 本篇常见错排查配置记忆系统时报错大多集中在几个固定位置。下面这张表覆盖了我遇到过的绝大多数情况。现象原因解决Agent 总“忘了之前说的事”会话太短 / 被判定不重要显式说“存为长期记忆”或/journey确认已写入记忆召回了过时信息事实已变化/journey定位并编辑 / 删除该条hermes memory status报错Provider 未就绪检查memory.provider与对应服务是否可用会话检索结果不准FTS5 未命中v0.15 已确定性返回确认关键词必要时 browse 展开切换 Provider 后记忆“没了”存储隔离旧 Provider 数据仍在先hermes backup -q再迁移模型调用 401Key 未加载确认TAOTOKEN_API_KEY已 exportapi_key_env拼写正确模型调用 404base_url 写错确认填的是https://taotoken.net/api不带多余路径重点说两个容易忽略的。一个是session_search在 v0.15.0 重写后变成了确定性工具不再依赖 LLM 总结零推理成本、零幻觉。旧版用 LLM 总结 3 个会话约需 30 秒、$0.30还可能在 FTS5 未命中时编造内容新版拆成 discovery / scroll / browse 三步稳定且免费。如果你还在用旧版行为先hermes update。另一个是记忆污染。不要让 Hermes 把临时上下文比如一次性的文件路径、临时变量写进长期记忆会污染召回。稳定、可复用的信息才值得记。流程性的“怎么做”用/learn沉淀成技能事实性的“是什么”才写记忆两者别混。6. 记忆健康与后续接入记忆系统跑通之后日常维护比一次性配置更重要。我自己的习惯是每周跑一次/journey审计尤其是切换模型或 Provider 之后确认记忆健康——有没有记错的、过期的、该删的。升级前先hermes backup -q再hermes config migrate→hermes doctor这套顺序能避开大部分升级翻车。如果你还没配好模型通道先去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 拿一个 Key接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型是否通用模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 发一条消息试试。如果你打算长期用 Hermes 做编码和 Agent 任务Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 有更划算的套餐适合高频调用。记忆系统解决“我忘了”Skills 解决“这事怎么做来着”子代理解决“一个人干不完”。三件套配齐Hermes 才算真正好用。下一篇教程 09 会讲桌面端编码项目把/journey的径向记忆图谱用起来。