Agent工坊

【Agent工坊】Hermes v0.17 记忆系统革命:一次调用完成"删旧→存新",工具调用量暴降52%

Hermes Agent v0.17.0 对 memory 工具进行了自诞生以来最大幅度的升级——原子批量操作。旧版"删一条→等一轮→再存一条"的多轮拉锯战被彻底消灭,一次 API 调用即可完成全部记忆编辑,实测工具调用量减少 52%,最坏情况从 4-6 次降至 1 次。

旧版5次调用 vs 新版1次调用:最坏情况从5.5次降至1次,降低82%▲ 旧版5次调用 vs 新版1次调用:最坏情况从5.5次降至1次,降低82%

为什么你需要关心记忆系统的这次升级

如果你在用 Hermes 跑自动化流水线(cron 定时任务、多步骤内容生产、长时间研究会话),你一定遇到过这个场景:

Agent 跑了几十轮,记忆快满了,想存一条新发现——add 被拒绝(超出 2200 字符上限)。然后它开始"腾空间":remove 一条旧记忆 → 等下一轮 → 再 add 新内容 → 又超了 → 再 remove → 再 add。一来一回 4-6 次工具调用,每次都重新发送整个对话上下文给模型,Token 在燃烧,时间在流逝。

v0.17.0 的 原子批量操作(atomic batch operations)把这场拉锯战变成了一次调用。本文不仅讲原理,还会给你可以直接复制粘贴的实战代码。

旧世界的痛苦:多轮"腾挪"拉锯战

先看一个真实场景。假设你的 Hermes 记忆已经用了 2000/2200 字符(91%),你想添加一条 300 字符的新发现:

旧版流程(每次都是独立的 tool call):

┌─────────────────────────────────────────────────┐

│ Turn 1: memory(action="add", content="新发现…") │

│ → ❌ 拒绝:"超出 2200 字符限制" │

│ Turn 2: memory(action="remove", old_text="过时") │

│ → ✅ 删除成功,释放 150 字符 │

│ Turn 3: memory(action="add", content="新发现…") │

│ → ❌ 拒绝:"仍超出限制"(只释放了 150,需要 300)│

│ Turn 4: memory(action="remove", old_text="旧笔记")│

│ → ✅ 删除成功,释放 200 字符 │

│ Turn 5: memory(action="add", content="新发现…") │

│ → ✅ 终于成功 │

└─────────────────────────────────────────────────┘

5 次工具调用,每次都要重新发送整个对话上下文(可能几万到十几万 token)。而且旧版的 schema 还在 instruct 模型"在一个 turn 里完成 consolidate + retry"——这在单操作 API 下根本不可能。

这个问题在长时间运行的自动化场景中尤为致命。做内容生产流水线时,Agent 会积累大量环境信息、工具路径、API 密钥位置等记忆——一旦满了,整个流水线就开始"原地打转"。

v0.17.0 的解法:operations 数组 + 原子性保证

新版的 memory 工具增加了一个 operations 参数——一个操作数组,里面可以同时包含多个 addreplaceremove 操作:

memory(

    target="memory",

    operations=[

        {"action": "remove", "old_text": "过时的部署信息"},

        {"action": "remove", "old_text": "已解决的 bug 记录"},

        {"action": "add", "content": "新部署地址: api-v2.example.com,于 2026-06-20 迁移完成"},

        {"action": "replace", "old_text": "Ubuntu 22.04", "content": "Ubuntu 24.04 LTS,于 2026-06-15 升级"}

    ]

)

一次调用,四条操作。而且最关键的是:字符限制检查只在最终状态进行一次。

这意味着中间状态可以"暂时超出"——只要最终写入磁盘的状态不超出 2200 字符即可。先删后加的场景彻底被覆盖。

原子性保证:要么全成功,要么全回滚

批量操作遵循严格的原子性:

  • 任何一个操作格式错误 → 整个 batch 中止,不写入任何内容
  • 任何一个 old_text 匹配不到或匹配到多条 → 整个 batch 中止
  • 最终状态超出字符限制 → 整个 batch 中止

这不是"尽力而为"的批处理,是数据库级别的事务语义。你可以放心地把 removeadd 放在同一个 operations 数组里——如果 add 失败,前面的 remove 也不会生效。

实战:三个你必须掌握的批量操作模式

operations数组结构:一次调用包含remove、add、replace多种操作,原子性执行▲ operations数组结构:一次调用包含remove、add、replace多种操作,原子性执行

模式 1:腾空间 + 存新(最常用)

记忆已满 91%,需要删旧换新:

# 删除两条过时记忆,添加一条新的

memory(

    target="memory",

    operations=[

        {"action": "remove", "old_text": "MySQL"},

        {"action": "remove", "old_text": "旧 API key"},

        {"action": "add", "content": "项目已迁移至 PostgreSQL 16 + Prisma ORM。新 API 密钥存储在 ~/.env.production,每 30 天轮换一次。"}

    ]

)

效果:旧版需要 3-4 次调用,新版 1 次调用

模式 2:批量纠正(适用于信息刷新)

发现多条记忆需要同时更新:

memory(

    target="memory",

    operations=[

        {"action": "replace", "old_text": "Node 20", "content": "Node.js 22 LTS,所有项目已升级"},

        {"action": "replace", "old_text": "每天 10:00", "content": "cron 调度改为每天 08:00 和 14:00 各一次"},

        {"action": "add", "content": "新增工具: ffmpeg 7.0 已安装在 /usr/local/bin,用于视频处理流水线"}

    ]

)

模式 3:用户画像批量更新(user target)

用户偏好变了,一口气全改:

memory(

    target="user",

    operations=[

        {"action": "replace", "old_text": "简洁", "content": "偏好详细分析,每个结论需要数据支撑和至少 2 个来源"},

        {"action": "replace", "old_text": "Markdown", "content": "输出格式统一为微信公众号兼容 HTML(内联 style),不再使用 Markdown"},

        {"action": "remove", "old_text": "macOS"},

        {"action": "add", "content": "主力开发环境: Linux (Ubuntu 24.04),通过 SSH 远程开发"}

    ]

)

注意:user 目标的字符限制更紧(1375 字符),批量操作时尤其要注意最终状态不超出。

数据说话:到底快了多少?

Nous Research 在 Hermes v0.17.0 的 PR 中提供了实测数据(来源:GitHub PR #48507,2026年6月19日发布):

场景旧版(平均调用次数)新版(平均调用次数)降低
常规添加2.251.056%
高负载存储3.752.047%
近满存储(最坏情况)5.51.082%
混合更新3.02.033%
总体(4场景×4重复)3.121.5052%

最坏情况——记忆接近满载需要腾空间——从 5.5 次降到 1 次,降幅 82%。这不仅是速度提升,更是 Token 消耗的大幅削减。

每一次工具调用都需要重新发送整个对话上下文。假设上下文 5 万 token,按 DeepSeek v3 的 API 价格(输入约 ¥0.6/百万 token),一次工具调用的上下文重发成本约 ¥0.03。降到 1 次调用,单次记忆操作就能省 ¥0.12-0.15。对于每天跑几十次的自动化流水线,一个月能省出一顿火锅钱。

踩坑提醒:升级到 v0.17.0 后的三个注意事项

实测数据:4场景×4重复,平均工具调用从3.12次降到1.50次,整体降低52%▲ 实测数据:4场景×4重复,平均工具调用从3.12次降到1.50次,整体降低52%

坑 1:不要混用 `action` 和 `operations`

# ❌ 错误:同时指定 action 和 operations

memory(action="add", operations=[...]) # 行为未定义

# ✅ 正确:二选一

memory(operations=[...]) # 批量模式

memory(action="add", content="...") # 单操作模式(向后兼容)

坑 2:`old_text` 子串匹配在批量模式下更严格

单操作模式下,old_text="Python" 可能匹配到"Python 版本"那条记录。但在批量模式下,由于原子性要求,任何模糊匹配都会导致整个 batch 回滚

# ⚠️ 危险:如果 memory 中有多条记录包含 "Python"

{"action": "replace", "old_text": "Python", "content": "..."}

# → 匹配到多条 → 整个 batch 中止!

# ✅ 安全:用足够唯一的子串

{"action": "replace", "old_text": "Python 3.11 on Ubuntu", "content": "Python 3.12 on Ubuntu 24.04"}

坑 3:先删后加的顺序仍然重要

虽然批量操作是原子的,但操作按数组顺序执行。如果你先 addremove,中间状态可能更早触及限制:

# ✅ 推荐:先 remove 腾空间,再 add

operations=[

    {"action": "remove", "old_text": "过时条目1"},

    {"action": "remove", "old_text": "过时条目2"},

    {"action": "add", "content": "新内容..."}

]

# ⚠️ 可能有问题:先 add 再加 remove

operations=[

    {"action": "add", "content": "新内容..."}, # 可能让中间状态超出

    {"action": "remove", "old_text": "过时条目1"} # 来不及腾空间

]

虽然最终状态检查只看最终结果,但中间操作的执行顺序会影响子串匹配的可用性——先删后加是最安全的模式。

迁移指南:从旧版记忆管理到批量操作

如果你的 Hermes 还在 v0.16 或更早,升级后记忆工具的使用方式不需要任何改动——单操作模式(action/content/old_text)完全向后兼容。但如果你想享受批量操作的好处,以下是迁移建议:

第一步:检查当前版本

hermes --version

# 应显示 0.17.0 或更高

第二步:升级

hermes update

# 或 pip install --upgrade hermes-agent

第三步:识别可以批量化的人工操作

回忆一下你最近几次手动让 Hermes 删旧记忆、存新记忆的场景——那些"先删几条、再存一条"的操作序列,就是最适合改为批量操作的候选。

第四步:在 cron job 的 prompt 中启用批量模式

如果你用 Hermes 的 cron 跑自动化任务,在 prompt 中告诉它使用批量操作:

当需要更新记忆时,使用 operations 数组一次性完成所有添加/替换/删除,

避免多次调用 memory 工具。优先使用 remove→add 顺序。

总结

Hermes v0.17.0 的记忆批量操作不是锦上添花的小优化——它消灭了一个结构性的效率问题。旧版"先腾后存"的多轮拉锯战在长会话和自动化流水线中是实实在在的 Token 黑洞。

三个关键要点:

  1. 一次调用多操作operations 数组支持 add/replace/remove 混合
  2. 原子性保证:要么全成功要么全回滚,不会出现"删了旧的、新的没存上"
  3. 实测 52% 效率提升:从平均 3.12 次调用降到 1.50 次,最坏情况从 5.5 次降到 1 次

对于跑自动化流水线的 AI 创业者来说,这不是"更快了一点",是从"偶尔卡住需要人工解围"到"全程无人值守"的跨越。


*本文基于 Hermes Agent v0.17.0(v2026.6.19)Release Notes 和 GitHub PR #48507 的实测数据撰写。记忆系统升级由 Nous Research 的 teknium1 主导开发。*

本文由AI辅助创作,经人工审核编辑发布

更多一人公司案例与工具 → 微信公众号搜索「AI创业内参」→ 菜单栏「官方网站」即可访问 xopcx.com