Files
Hermes-Skills/okx-auto-position/references/v4.5.98-2026-09-22-cross-session-rule-failure-and-signal-decision-tree.md

58 lines
2.6 KiB
Markdown

# v4.5.98 (2026-09-22) 规则跨 session 失效实证 + 信号到达前决策树
## 背景
v4.5.96 (2026-09-21) 写入了 2 条带 ⚠️ 的执行教训:
1. no-op 回复禁止复述 Qdrant 召回 boilerplate
2. 汇总播报/已知 no-op 信号零 tool call 直接回模板
**跨 session 失效实证**: 这两条规则在写入的 session 当天违反 60+ 次; 在下一个 session (9/21-9/22, 即本 reference 所总结的 session) 又原样复犯:
- 30+ 条 no-op 回复仍以 "Qdrant召回确认核心铁律(4个熬鹰号白名单+close也拦+whitelist.json配置驱动),已全部部署。" 开头
- 40+ 条汇总播报仍跑了 dedup-clear + process_signal (必然 parse 失败, 白跑 80+ tool call)
- 40+ 条减仓 no-op 仍照跑 process_signal
**结论: 行为禁令写进 SKILL.md ≠ 执行时遵守。写作层的规则对 LLM 行为的约束力随 context 变长而衰减, 必须改为结构性的"信号到达前决策树"。**
## 信号到达后的第一反应决策树 (在任何 tool call 之前)
```
收到信号文本 → 依次匹配:
(1) 含 "当前全部持仓" → 汇总播报
→ 直接回「汇总无操作;无持仓;USDT 可用$X/权益$Y」
→ 0 tool call, 结束
(2) 动作=减仓 且 已知无该币种持仓 → no-op
→ 直接回「减仓no-op(无持仓); USDT $X」
→ 0 tool call, 结束
(3) 其他 (新开仓/平仓/方向变/加仓且有持仓)
→ 走完整流程: dedup → process_signal → check_account → execute → release_lock
```
USDT 数字引用最近一次 check_account 结果。无新开/平仓事件时不需重查。
## 回复发送前自检 (1 条)
回复文本含以下任一关键词 → 删掉该句, 只留模板结论:
- "Qdrant召回"
- "召回确认"
- "铁律"
- "已全部部署"
**判定标准**: 召回内容只用于内部决策检查 (白名单/锁/方向), 绝不进入回复文本。
## 为什么 (3) 才走完整流程
(1)(2) 类信号的历史结局 100% 是 parse 失败 / advisor skip:
- 汇总播报: 缺【】字段, parse_signal 必然失败 (v4.5.93 已确认)
- 熬鹰蚂蚁式减仓: 单条张数 0.1-0.3%, 远低于最小变动单位, 必然 skip (v4.5.95/96 已确认)
对这两类信号跑 process_signal = 零信息增量 + 2 tool call 浪费 + 上下文污染。
只有 (3) 类信号 (新开仓/平仓/方向变化/有持仓时的加仓) 才有真实的交易决策需要做。
## 实测数据
| Session | 信号量 | no-op 占比 | tool call 节省潜力 |
|---|---|---|---|
| 9/20-9/21 (v4.5.96 时) | 40+ | ~90% | ~80 calls |
| 9/21-9/22 (本 session) | 40+ | ~95% | ~80 calls (未实现, 全跑了) |
| 若决策树生效 | 40+ | ~95% | **~80 calls/周** |