Files
Hermes-Skills/okx-auto-position/references/v4.5.75-2026-09-02-memory-only-hard-rules-qdrant-takes-rest.md
T

97 lines
5.0 KiB
Markdown

# 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/<topic>.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/<topic>.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 — 反问禁令