开场:我和 Claude 之间的「陌生感循环」
你们有没有过这种经历:明明和 AI 聊了三天,从星座聊到代码架构,结果第二天打开新会话,它还是用那种得体的、客气的、完全陌生的语气问:"你好,今天有什么可以帮您?" 我大概在一个月前彻底受够了这种感觉。那天我在写一个复杂的异步任务调度系统,前一个会话里我和 Cluade 花了整整两个小时讨论清楚了任务优先级策略、死锁避绕方案,甚至确定了状态机的命名规范。结果因为电脑重启,我打开新会话想让它帮我继续写核心模块——它一脸茫然,像是从来没听过这个故事。
我当时就火了,不是生 AI 的气,是生自己的气。我明明知道有「记忆管理」这个东西,却一直懒得搞。我更知道 Hermes Agent 的 memory 命令能解决这个问题,但我总觉得 "一个命令而已,能有多厉害?" 直到那天我花了 40 分钟把之前两小时的讨论重新喂给它,我才意识到:省掉五分钟的配置代价,换来的是无止境的重复劳动。
后来我去查了 Hermes Agent 的文档(版本 0.4.7),发现它的记忆机制比我预想的要完善得多。不是简单的 key-value 存储,而是分成了「短期会话上下文」「长期事实记忆」和「项目级知识库」三层架构。我把它全部配好后,那种反复自我介绍的日子就彻底结束了。今天这篇文章,我就把我这一个月踩过的坑、摸索出来的最佳实践,全部写出来给你。
你会发现,让 AI 记住你是谁,其实只需要不到半小时的设置——但前提是你得知道哪些坑不能踩。
两个极端:什么都要记 vs 什么都不记
我先说两个我亲眼见过的反面教材。第一个是我的朋友阿哲,他刚接触 Hermes 时兴奋坏了,看到 memory 命令就疯狂的往里面塞东西,包括他喜欢的咖啡口味("冰美式双份浓缩,不要糖不要奶")、他女朋友的生日("1996年3月14日,白羊座")、他家楼下便利店的营业时间("工作日到凌晨1点,周末到2点")、甚至体重变化曲线。结果呢?Hermes 确实都记住了,但有用吗?有一次他在写一个后端服务的错误处理逻辑,AI 突然说:"根据您的偏好,我建议用浅烘焙的埃塞俄比亚咖啡豆来命名这个异常类。"——直接从技术讨论跳到咖啡,完全混淆了场景。
另一个极端是我自己最开始的状态。我什么都不写,导致我每次开新会话都得重新解释。有一次我还发现了更尴尬的事:Hermes 的技能机制(技能存放在 ~/.hermes/skills/ 目录下的 .md 文件)其实是和记忆打配合的,但因为我不写任何东西,技能里全是笼统的解释「if a user mentions error, try see if database is down」这种,根本没法落地到我的具体项目里。
后来我在 Hermes 的 GitHub issues 里看到一条讨论(issue #1287),核心维护者说了一段话我特别喜欢:"记忆的重点不是信息的量,而是信息的类型。把长期不变的个人事实丢进全局记忆区;把短期任务相关的状态写到项目记忆区;把偶尔用到的操作提示写进技能文件。三个区各司其职,是效率最大化的前提。"
于是我给自己定了三条规矩:第一,全局记忆区只放三类内容:称呼方式、沟通偏好、工作领域或岗位信息。不经过这三重筛选的,一律不写。第二,项目记忆只存当前项目的技术上下文、已有的关键决策和后续 TODO。第三,技能文件只存操作性、流程性的内容,不存客观事实。这三个规矩让我跟 AI 协作的效率暴增。你也试试,先别急着存东西,先分好类别,你会有收获。
初次配置:用 memory 命令建立「用户档案」
Hermes Agent 在安装(直接 pip install hermes-agent,注意:如果你之前装过测试版,建议加 --upgrade 升级到 0.4.7)之后,默认的配置文件在 ~/.hermes/config.yaml。第一次运行时它会自动生成模板,我用的配置是:在 memory 区段下加了一个 auto_save: true,这样每次对话结束它会自动把关键信息提取到记忆库里。但这里有个大坑:自动记忆的提取规则默认非常保守,它只记那些看起来像「事实陈述」的句子,比如"我住在上海"这种。如果你跟它说"我们项目用 FastAPI",它可能不会自动存,因为这也算事实陈述但它不理解为项目上下文。
所以我的操作流程是:安装完毕之后,手动运行一次全量扫描。具体命令如下:hermes memory init(这个命令会初始化记忆库的目录结构,包括全局的 ~/.hermes/memory/global.json 和项目级的 ./memory/project.json)。然后我坐下来,花了五分钟,把我最重要的个人信息规范写进去。注意是规范写,不是自然语言。举个例子,我打开全局记忆文件 global.json,编辑内容加了一条:
"personal": {
"preferred_name": "老周",
"role": "独立开发者,主攻 Python 后端和 AI Agent 集成",
"communication_preference": "直接说结论,不要铺垫,同时给出代码示例",
"location": "上海",
"timezone": "Asia/Shanghai"
}
同时我把 config.yaml 里的 greeting: false 改成 greeting: true,这样每次新会话开启时,Hermes 会先加载我的画像再开始回答,相当于它先看一眼我为它是谁,然后带着这个人设和我对话。说实话第一次用的时候真被惊艳到了:我开了一个全新会话,都没自我介绍,它直接问我"老周,昨天的异步任务队列测试结果怎么样?"——我是真的愣了三秒。
配置完画像的下一步,就是验证记忆是否真的生效。我建议你执行 hermes memory status 命令,它会列出当前记忆库的条目数和最后更新时间。如果点击查看每一条,发现有些格式还是乱糟糟的自然语言,不要慌,用 for 循环遍历清洗,或者干脆直接手动重构那条 JSON。反正核心逻辑是:你的记忆库越结构化,AI 的检索效率越高。
项目级记忆:把技术上下文装进本地知识库
如果你觉得全局记忆只解决「让 AI 认识我」的问题,但还没解决「让 AI 了解我们正在搞什么项目」的问题,那你就需要第二层:项目级记忆。我的项目目录结构里都有一个 .hermes/ 文件夹,里面包含 project.json(项目基本信息)和 memory/ 子目录(按日期滚动存储的会话要点)。这个是在项目根目录运行 hermes project init 自动生成的。它会在每个会话结束自动写入一个小结,内容是该会话产出的决策和下一步计划。
用个实际案例说明。我在开发一个多租户的 SaaS 系统时,有一天上午和 Hermes 讨论了租户间数据隔离最佳实践,最终结论是:采用 PostgreSQL 行级安全(RLS)策略,而不是单独的 schema 隔离,因为运维成本更低。这些结论记下来了。下午我开了新会话想让它帮忙写一个自动创建租户的脚本,它直接问我:"老周,你定的数据隔离策略是 RLS 对吧?那我用 SET LOCAL row_security = on 的方式实现,可以吗?" 就凭这一句话,我确定它真的记住了。
但这里有个注意点,也是我踩过的坑:项目记忆的写入是「全自动的」,Hermes 会在每个会话结束时把对话中所有看似重要的信息都存进去。这个机制在信息少的时候很聪明,但信息量上来了就会出现数据噪声。比如我之前项目的 project.json 一度到了 500KB,里面甚至有"用户说今天下雨不想出门"这种无关信息。然后我开始每次调用 Hermes 时都要扫描一遍超大的记忆库,响应速度慢了两倍。
修复方案我琢磨了几天,最终在 Hermes 0.4.6 版本发现了一个新参数。在配置文件里加上 memory_filter: report(我还用了 summary 模式)。这会关闭自动写入,改为在会话结束时生成一份摘要报告,询问你要不要保存。虽然强制你做周期性的人为确认,但换来的是零、噪、音。你可能会觉得麻烦,但其实每个会话结束多花 15 秒选择一下值得不值得,比你月底清理 500KB 垃圾手动删除快多了。
具体操作是:编辑 ~/.hermes/config.yaml,在 memory 段落加 mode: manual_summary,然后重启 Hermes Agent。之后每次会话结束就会出现一个 review 提示,我一般都是快速看一眼摘要,把前面的框挑挑勾,就完了。把"全自动"改成"全自动+人工审核",感觉顺畅多了。
技能文件:比记忆更底层的操作系统
记忆说白了是「知道什么」,技能文件则是「知道怎么做」。这两者不能混。Hermes 的技能机制我前文提过,存放在 ~/.hermes/skills/ 目录下,每个技能是一个 Markdown 文件。我刚开始做记忆时犯了一个大错:把所有跟任务相关的黑话和操作流程全塞进记忆库。结果每当我问"帮我处理一下正则表达式",它就光记得我喜欢用 PCRE 语法,但不知道我要它用什么工具去处理、让代码跑在什么环境里。
后来我重新理顺了技能文件的结构。比如我在 ~/.hermes/skills/regex-hepler.md 里写了一个标准的技能模板:前置条件(Python 3.10+ 环境已激活)、操作步骤(1. 读取输入的待匹配文本 2. 确定正则语法类型(PCRE/JS/Python re)3. 运行 python -c 'import re; ...' 测试)、常见报错处理(IndexError 通常是因为分组号不存在)、成功输出格式(给出匹配结果和替换后的完整文本)。写完这个文件之后,我重新问它"帮我处理一下正则表达式",它直接进入了干活状态,甚至问我"老周,文本文件路径给一下,我直接帮你跑测试"。这就对味了!记忆和技能就像灵魂和身体,技能文件会让 AI 从「知道」变成「会用」。
分享两个写技能文件的关键踩坑经验:第一,文件名用带连字符的小写英文,不要用中文,否则在某些终端环境会出现编码问题。第二,内容不要写成散文,用列表和编号,把步骤拆细。我一开始写的技能是几大段话,AI 的执行效果极差,后来我把每段话拆成分步指令,效果好到惊人。第三次修改时,我给每个步骤加上了"预期输出"列,让 AI 能自我验证是否执行成功,这招特别管用。
另外一个最实用的操作就是让 Hermes 自己生成技能文件。你在对话里输入:"请根据你刚才帮我完成的任务,生成一份技能文件存到 ~/.hermes/skills/ 目录,格式参考已有的模板。" 这样它会把刚才执行任务的全过程复盘并文档化,比你自己手动写快太多了。我每次跑通一个新的复杂操作,都会追加一句让它保存。两周下来,我的技能库从 3 个增长到 24 个,覆盖率越来越高。
记忆的繁衍和迭代:告别「一次性合作」
一旦你建立起了记忆库和技能库,你拥有的就不再是一台对话机器,而是一个「随着合作时间越长越了解你的助手」。但注意:记忆不更新,就会变成僵尸档案。我最初的全局记忆里存着"工作机是 Windows 11",后来我换成了 Ubuntu 22.04 工作站,但忘了改记忆。结果每次它给我写命令都是 PowerShell 语法,我复制到 bash 里一堆不认识。
所以我建立了「记忆更新日」的仪式。每个周日下午,我固定跑一条命令:hermes memory review。这条命令会把记忆库里的条目全部列出来,并自动检测与最近对话行为的一致性偏差。比如它会问我:"你最近三个会话中频繁使用 docker-compose,但记忆中你的生产环境是 K8s,是否更新?" 我只需要回答 yes / no 即可。整个过程 3 分钟,但让我记忆库始终鲜活。
说一下我在这期间发现的一个超级有用的功能:hermes memory diff 会对比两个时间节点的记忆库差异。比如我今天运行一次,生成 diff 文件,下周再运行一次,就能看到这两周我的习惯发生了什么变化。用了一段时间之后,我把这些 diff 数据整合成一个趋势报告,发现自己的技术栈重点正在从纯后端转向 Agent 编排方向——AI 比我自己更早意识到这一点。
除了定期更新,我还发现一个技巧:给记忆条目加上时间戳。手动编辑 global.json 时,每个事实都会附带 created_at 和 last_accessed_at 字段。比如"created_at": "2025-03-12" 和 "last_accessed_at": "2025-06-20"。这个做法让你可以分辨哪些记忆是真正经常用到的,哪些是一次性信息被误存了。我利用这一点,每个月底写个小脚本跑一遍 last_accessed_at 还没超过 30 天的条目,自动把超过 60 天的转入 archive.json,保持了主记忆库的轻盈。
关于迭代,还有一招挺妙的:把「昨天的错误修正」写进记忆。比如某次它根据旧记忆推荐用 Python 3.8,而你实际在用的是 3.11。在你纠正它之后,手动执行 hermes memory set "tech_stack: Python 3.11+, 不要推荐低于 3.10 的语法特性" 来覆盖旧有信息。这样下次再提到版本它就不会用老黄历了。持续迭代,让你的 AI 永远跟得上当下的你。
定时任务让记忆自己长脚:hermes cron create
讲完了记忆的一切细节,最后介绍一个让你惊叹的效率工具:定时任务。Hermes Agent 的定时任务命令是 hermes cron create,这本来是用来做周期性自动工作的,比如每天早上八点跑一次数据备份。但你完全可以把它和记忆管理结合起来。举个例子,我创建了一个每天 23:50 执行的定时任务:hermes cron create "daily_memory_tidy" --hour 23 --minute 50 --command "hermes memory review --auto-mode"。这个任务会在每天晚上睡前自动把当天的所有会话总结提炼,挑出值得长期记住的新事实写入记忆库,并把过期条目标记为待审核。第二天我起来只需要花两分钟过目一遍它的整理结果,点一下批准就好了。
经过一段时间摸索,我现在用的是三个定时任务的黄金组合:每晚 23:50 跑记忆整理,每周日晚 20:00 跑记忆一致性检查(detect 配置和记忆冲突),每月一号上午 9:30 跑一次完整记忆备份,备份文件自动打包到 ~/.hermes/backups/ 目录下。因为所有执行结果都会输出到一个 log 文件,我一眼就能看出哪些任务已经跑完。如果你和我一样不太信任完全自动化,你可以在 cron 定义里加上 —send-report 参数,它处理完会主动发一个摘要消息到终端。
写到这里,我想起一个你们可能遇到的问题:万一哪天记忆库损坏怎么办?别慌。我就在一次系统重启时碰到过 global.json 损坏,导致 Hermes 启动报 JSONDecodeError。修复办法:用备份恢复,或者直接看 ~/.hermes/backups/ 里最近的 .bak 文件。用命令 cp 回原位置,重启搞定。如果你没设备份,可以试试 hermes memory repair --drop-corrupted,它会把损坏条目隔离出来,不会让你所有记忆都消失。这个惨痛的经历让我正式养成了定时备份的习惯。
最后放一个我自己的参数建议,在 ~/.hermes/config.yaml 里加上:auto_summary: true 以及 memory_retention_days: 180,前者让每次会话结束自动生成摘要,后者让六个月以上的旧记忆自动进入归档冷存储。这两个设置配合前面说的日常 review,基本上可以让你的记忆库一直保持在最佳状态,既不臃肿也不会丢信息。
💬 你用过哪些AI工具?
好了老铁们,这篇「让 AI 记住你是谁」的实操干货就分享到这里了。说真的,现在每次坐下来打开 Hermes,它张口就是"老周,来了?今日待办事项:..."那种熟悉劲儿,真让我觉得这钱花得值。其实我也挺好奇你们平时的 AI 工作流是什么样的——你用什么工具?是 Claude、ChatGPT,还是跟我一样折腾开源框架?你在使用过程中有木有遇到过那种"它怎么又不认识我了"的崩溃瞬间?
如果你还没找到最适合自己的 AI 工具,或者想看看 2025 年大家都在用哪些黑科技产品和模型,推荐你去看看 AI House 排行榜(aibunkhouse.com/rankings/),上面有实时更新的热门模型排名和用户真实评测,直接帮你筛选出效能最高的选项,避免踩坑。喜欢哪个模型也可以给它投票,让更多同好少走弯路。评论区聊起来,说说你用过最惊艳的一次 AI 体验,或者最让你抓狂的一次操作,我都会认真看并回复的!
常见问题 / FAQ
开场:我和 Claude 之间的「陌生感循环」
你们有没有过这种经历:明明和 AI 聊了三天,从星座聊到代码架构,结果第二天打开新会话,它还是用那种得体的、客气的、完全陌生的语气问:"你好,今天有什么可以帮您?" 我大概在一个月前彻底受够了这种感觉。那天我在写一个复杂的异步任务调度系统,前一个会话里我和 Cluade 花了整整两个小时讨论清楚了任务优先级策略、死锁避绕方案,甚至确定了状态机的命名规范。结果因为电脑重启,我打开新会话想让它帮我继...
两个极端:什么都要记 vs 什么都不记
我先说两个我亲眼见过的反面教材。第一个是我的朋友阿哲,他刚接触 Hermes 时兴奋坏了,看到 memory 命令就疯狂的往里面塞东西,包括他喜欢的咖啡口味("冰美式双份浓缩,不要糖不要奶")、他女朋友的生日("1996年3月14日,白羊座")、他家楼下便利店的营业时间("工作日到凌晨1点,周末到2点")、甚至体重变化曲线。结果呢?Hermes 确实都记住了,但有用吗?有一次他在写一个后端服务的...
初次配置:用 memory 命令建立「用户档案」
Hermes Agent 在安装(直接 pip install hermes-agent,注意:如果你之前装过测试版,建议加 --upgrade 升级到 0.4.7)之后,默认的配置文件在 ~/.hermes/config.yaml。第一次运行时它会自动生成模板,我用的配置是:在 memory 区段下加了一个 auto_save: true,这样每次对话结束它会自动把关键信息提取到记忆库里。但这...
项目级记忆:把技术上下文装进本地知识库
如果你觉得全局记忆只解决「让 AI 认识我」的问题,但还没解决「让 AI 了解我们正在搞什么项目」的问题,那你就需要第二层:项目级记忆。我的项目目录结构里都有一个 .hermes/ 文件夹,里面包含 project.json(项目基本信息)和 memory/ 子目录(按日期滚动存储的会话要点)。这个是在项目根目录运行 hermes project init 自动生成的。它会在每个会话结束自动写入...
技能文件:比记忆更底层的操作系统
记忆说白了是「知道什么」,技能文件则是「知道怎么做」。这两者不能混。Hermes 的技能机制我前文提过,存放在 ~/.hermes/skills/ 目录下,每个技能是一个 Markdown 文件。我刚开始做记忆时犯了一个大错:把所有跟任务相关的黑话和操作流程全塞进记忆库。结果每当我问"帮我处理一下正则表达式",它就光记得我喜欢用 PCRE 语法,但不知道我要它用什么工具去处理、让代码跑在什么环境...