乐于分享
好东西不私藏

我让AI助手连续记了30天开发日志,它开始主动提醒我踩过的坑

我让AI助手连续记了30天开发日志,它开始主动提醒我踩过的坑

你的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,归档过时内容

原因:过时记忆比没有记忆更危险——它会给出看似正确但实际过时的建议。

你的AI助手现在能记住多少东西?评论区说说你最希望它能“不忘”的场景 ��