5.0 KiB
v4.5.75 — 2026-09-02 memory.md 只装硬规则,Qdrant 装细节
背景
Qdrant 已经是 Hermes 的 vector store 主记忆库 (memory.provider: qdrant,见 v4.5.69 + v4.5.74 集成)。memory.md 是压缩索引,1,375 字符上限,sync_memory.sh 每小时自动同步到 Qdrant。Qdrant 按每条消息关键词 top-3 召回,主动注入 system prompt。
但 agent 之前仍习惯"看到教训就往 memory.md 加" — 这次实战教训把规则拍实:memory.md 只装硬规则(每个 turn 必须看到的),细节/教训/SKILL 笔记去 Qdrant 或 skill。
1. 铁律: 内存满时只缩短,不删除
user 原话
"我从没让你删除memory,只让你同步到qdrant库" "要是全都是缩短的内容,但也满了呢" → "没有升级这一说" — agent 编造不存在工具能力
agent 实际犯的错
- 误以为"memory 满了可以
remove腾空间" — 错。memory --action remove删的是索引条目,Qdrant 里虽然有完整内容,但关键词召回路径断了 — 下次 Qdrant recall 按"dividend_highfreq"关键词检索,搜不到任何 memory 条目有这关键词(已删),就永远不会主动召回。 - 编造"memory 升级" /"拆分 profile" /"session_search 代替 memory" 等不存在的工具能力 — 错的,memory tool 没这些 API。
正确做法
| 情况 | 应该 | 不应该 |
|---|---|---|
| memory.md 满了 | memory --action replace 缩短现有条目,保留关键词 |
memory --action remove 删条目 |
| 新教训要长期保存 | 写到 Qdrant(用 skill/references)+ 保留关键词索引在 memory.md | 直接写大段文字进 memory.md |
| 永久硬规则 (行为/偏好/严禁) | memory.md (每个 turn 看到) | Qdrant (会按时间衰减,详见 v4.5.74) |
| SKILL 配置/bug fix/特定 cron 细节 | skill 的 references/.md | memory.md |
user 纠正的具体场景
"要从哪删掉吗" → "不主动删除,memory 满了只能缩短/合并。Qdrant 里也有同一份,但 Qdrant 召回要靠 memory 里的关键词触发。如果 memory 里删了,Qdrant 里的相应内容就永远不会主动被召回了。"
2. Qdrant 优先工作流
user 原话
"暂不清理,但现在优先用 qdrant,更新也是。"
工作流
- 每个信号/操作前 — 调
qdrant_recall(query=关键词, top_k=3)主动召回相关历史教训(已有自动召回,但信号处理类操作前要主动 trigger 一次) - 新知识/教训/SKILL 笔记/bug fix — 优先写到 Qdrant(
skill_managesave as skill,或写references/<topic>.md) - memory.md 保留的 — 只有行为/偏好/严禁类硬规则(几行关键词级别)
- memory_check.sh + sync_memory.sh — 保持运转,自动双向同步(memory → Qdrant 备份,Qdrant 召回有锚点)
memory.md 当前 7 条 (2026-09-02 复审)
每条都是硬规则关键词,不是细节:
| 条目 | 类型 |
|---|---|
| QQ 私信为主、TG 仅做信号源 | 通信偏好 |
| 先查再说,不抛问句 | 行为硬规则 |
| OKX 跟单只跟熬鹰资本 (trader 白名单) | 配置锚点(细节在 whitelist.json) |
| 模型偏好 (M3 + 流式关闭) | 配置 |
| memory_check.sh cron 默认不截断 | 操作约束 |
| OKX 调杠杆=加仓调资金占用 | 概念纠正 |
| 7% 资金占用原则 | 风险约束 |
**全部是"必须每个 turn 看到"或"严重陷阱"级别。**具体数值/公式/具体代码改动 → 全部在 Qdrant + skill references。
3. agent 必须不编造工具能力
user 原话
"memory有升级这一说?"
教训
agent 在用户问"memory 实在放不下的时候呢"时,编造了"选项 1: 提高上限 / 选项 2: 拆分 profile / 选项 4: 真存档到 Qdrant" — 但前 3 个选项根本不存在(memory tool 没这些 API),是 agent 看到"这是个难问题"就编造的。
铁律: 遇到不知道的,说"不知道/这个我没 API",绝不编造"提升上限 / 拆分 profile / 删除/编辑 Qdrant 索引"等不存在的工具能力。
memory tool 的实际 API 列表:
add- 添加条目replace- 缩短/合并现有条目remove- 删除(只用于永久移除过期索引,不用于腾空间)operations- 批量组合以上
没有: 上限调整、profile 拆分、archive、版本回滚、外部存储迁移 — 这些都不存在,agent 不要假装有。
4. 删除 memory 时的例外情况(罕见)
唯一可以 memory --action remove 的场景:该条目记录的硬规则本身被废了(用户改主意,规则反转)。
例:
- 之前 memory 写"调杠杆 = OKX setLeverage API" → 错了,用户纠正"调杠杆 = 加仓调资金占用" → ✅
remove旧条目 +add新条目(关键词变了,旧关键词不再召回,新关键词加入召回) - 但不要为了腾空间删条目 — 那是丢失。
关联
- v4.5.74 — Qdrant 时间衰减 + indexed_at (新笔记优先)
- v4.5.71 — 白名单写 whitelist.json 不写代码 (此规则的同源)
- v4.5.69 — GFW proxy 真相(此规则的同源:agent 习惯硬编码 / 编造配置)
- user-preference-urgency-and-no-asking.md — 反问禁令