# 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 实际犯的错 1. 误以为"memory 满了可以 `remove` 腾空间" — 错。`memory --action remove` 删的是**索引条目**,Qdrant 里虽然有完整内容,但**关键词召回路径断了** — 下次 Qdrant recall 按"dividend_highfreq"关键词检索,搜不到任何 memory 条目有这关键词(已删),就**永远不会主动召回**。 2. 编造"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,更新也是。" ### 工作流 1. **每个信号/操作前** — 调 `qdrant_recall(query=关键词, top_k=3)` 主动召回相关历史教训(已有自动召回,但**信号处理**类操作前要主动 trigger 一次) 2. **新知识/教训/SKILL 笔记/bug fix** — 优先写到 Qdrant(`skill_manage` save as skill,或写 `references/.md`) 3. **memory.md 保留的** — **只**有行为/偏好/严禁类硬规则(几行关键词级别) 4. **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 — 反问禁令