你的AI助手是不是这样:今天教它处理了某个报错,明天换个类似的问题,它又不会了?
不是模型不够聪明,是大多数AI工具的设计就是——每次对话从零开始。
你上一轮解决的复杂问题、踩过的坑、总结的经验,下一轮全部清零。相当于每天早上醒来都失忆一次,再厉害的大脑也白搭。
Hermes Agent(爱马士)的核心差异化就在这里:它不是一次性聊天工具,而是一个会积累经验的持久化智能体。
这篇文章拆解它的记忆系统是怎么工作的,以及怎么用它搭建一个真正“越用越强”的AI开发助手。
━━━━━━━━━━━━━━━━━━
01 为什么普通AI助手记不住东西
主流AI工具的架构决定了它的局限性:
用户提问→ 模型生成 → 返回结果 → 结束
↑ 上下文到此为止,下次再来又是新的
这意味着:
•同一问题重复解释——你告诉过它三次项目结构,第四次它还是不知道
•错误反复重演——上周踩过的依赖冲突坑,这周又掉进去
•经验无法沉淀——你摸索出的最佳实践,只能存在自己的笔记里
这不是bug,是设计如此。但对日常开发者来说,这个限制非常痛。
━━━━━━━━━━━━━━━━━━
02 核心解法:四层记忆架构
Hermes Agent用了四层记忆系统来解决这个问题:
第一层:常驻提示记忆(Working Memory)
每次会话自动加载的基础上下文。包含两个核心文件:
【MEMORY.md — 长期记忆】 # 项目信息 - 当前项目:xxx-api-server - 技术栈:Python 3.11 + FastAPI + PostgreSQL - 部署环境:腾讯云Lighthouse Ubuntu 22.04 # 重要决策记录 - 2026-05-10: 决定用asyncpg而非SQLAlchemy(性能考虑) - 2026-05-12: 数据库连接池设为20(压测后确定)
【USER.md — 用户画像】 # 偏好 - 代码风格:遵循PEP8,类型注解必须写 - 沟通方式:先给结论再给论据,不要废话 - 禁止行为:不写TODO不提交PR
⚠️ 关键点:这一层有字符上限(约3575字符),迫使Agent只保留真正重要的信息,而不是塞满垃圾。
第二层:全文检索记忆(Episodic Memory)
这是Hermes Agent最硬核的能力。每一次对话的内容都会被索引存储,后续可以通过语义搜索召回:
# 搜索历史对话中关于“数据库连接”的所有讨论 hermes session_search "数据库连接池超时" # 搜索上次处理某个具体报错的方案 hermes session_search "AsyncPG ConnectionDoesNotExistError"
底层用的是SQLite FTS5引擎,支持三个特性:
•中文分词——不是简单的字符串匹配,而是语义级别的检索
•跨会话搜索——不限时间范围,所有历史对话都能搜到
•摘要压缩——长对话自动压缩为摘要存储,节省空间但不丢失关键信息
第三层:自动技能生成(Procedural Memory)
这是“越用越强”的关键机制。当Hermes Agent完成一个复杂任务后,它会自动将执行流程抽象为可复用的Skill:
name: fix-fastapi-deadlock description: 解决FastAPI异步数据库死锁问题 trigger: - "数据库死锁" - "connection timeout" - "asyncpg锁等待" steps: 1. 检查当前连接池大小和最大连接数配置 2. 查询pg_stat_activity确认是否有长时间持有锁的事务 3. 将statement_timeout设置为合理值(建议30s) 4. 如果使用asyncpg,检查是否混用了同步和异步调用 5. 重启服务并验证 learned_from: "2026-05-15 用户反馈的生产事故处理"
下次遇到类似问题时,Agent会直接调用这个Skill,而不是重新摸索。
第四层:知识持久化(Semantic Memory)
Agent在运行过程中积累的结构化知识:
project_patterns: api_error_handling: "统一使用自定义APIException,不要裸抛" db_migration: "永远先备份再迁移,用alembic --autogenerate -m '描述'" deployment_checklist: ["迁移文件","环境变量","依赖版本","数据库备份"] user_preferences: code_review_focus: ["安全性","性能","可维护性"] log_format: "JSON格式,包含request_id"
━━━━━━━━━━━━━━━━━━
03 实操:搭建一个有记忆的开发助手
步骤1:初始化记忆文件
安装Hermes Agent后,编辑两个核心文件:
nano ~/.hermes/MEMORY.md nano ~/.hermes/USER.md
写入你的项目基本信息和使用偏好(参考上面的模板)。
步骤2:让Agent开始积累经验
正常使用即可。每次解决一个问题后,Agent会自动完成三件事:
•① 将关键信息写入记忆文件
•② 将解决方案抽象为Skill(如果这是一个可复用的模式)
•③ 索引对话内容供后续检索
你也可以手动触发记忆整理:
# 手动触发技能整理 hermes skills sync # 查看已生成的技能列表 hermes skills list # 搜索历史记忆 hermes session_search "关键词"
步骤3:验证记忆效果
过一周左右,测试一下:
hermes chat "上次那个FastAPI数据库连接超时怎么解决的?"
如果Agent能直接给出方案而不是重新分析,说明记忆系统在工作。
━━━━━━━━━━━━━━━━━━
04 踩坑总结
❌ 坑1:MEMORY.md写得太多
把所有项目细节、每个函数说明都塞进去
✅ 正确做法:只放决策、偏好、关键结论,控制在3000字符以内
原因:常驻记忆每次都会注入提示词,太长会浪费Token且稀释注意力。
❌ 坑2:指望Agent自动记住一切
什么都不配,指望它自己学会
✅ 正确做法:先写好USER.md和MEMORY.md作为种子,再让它自主生长
原因:自学习需要初始引导,空白状态下Agent不知道什么该记。
❌ 坑3:不同项目共用同一个记忆实例
前端项目和后端项目用同一个Hermes实例
✅ 正确做法:不同项目部署独立实例,或用命名空间隔离
原因:跨项目的经验和偏好会互相干扰,导致错误的Skill被调用。
❌ 坑4:从不清理过期记忆
记忆只增不减,半年后全是过时信息
✅ 正确做法:定期review MEMORY.md,归档过时内容
原因:过时记忆比没有记忆更危险——它会给出看似正确但实际过时的建议。
夜雨聆风