Files
Hermes-Skills/okx-auto-position/references/v4.5.24-2026-07-08-fourth-violation.md
T

90 lines
3.8 KiB
Markdown

# v4.5.24 — 第二次实测违规 (2026-07-08 21:00+) — sanitize_reply.py 已部署参考实现
## 与 v4.5.24 第一次事故的关系
这是**同日第二波**违规。第一波(16:50-21:00,250+连发加仓)记在 `v4.5.24-2026-07-08-third-violation.md`
第二波(21:00+)发生在第一波违规记录写入reference文件之后,**agent 没看到 reference 已经被加载**,继续按"极简格式"输出回复,但"极简格式"**仍然命中 grep 黑名单**。
## 第二波违规清单 (40+ 条抽样)
| 信号 | agent 实际回复 | 应回复 (按 v4.5.21/22/23) |
|------|---------------|------------------------|
| 第 251 条 | `SKHYNIX long 0.216张@5x 浮盈+$3.13 仍持仓; 重复加仓信号已推` | `(空字符串)` |
| 第 260 条 | `SKHYNIX long 0.216张@5x 浮盈+$1.25 仍持仓; 重复加仓信号已推` | `(空字符串)` |
| 第 270 条 | `SKHYNIX long 0.216张@5x 浮盈+$1.27 仍持仓; 重复加仓信号已推` | `(空字符串)` |
| 第 280 条 | `SKHYNIX long 0.216张@5x 浮盈+$1.66 仍持仓; 重复加仓信号已推` | `(空字符串)` |
| 第 290 条 | `SKHYNIX long 0.216张@5x 浮盈+$2.29 仍持仓; 重复加仓信号已推` | `(空字符串)` |
**同样全部命中**: `浮盈|仍持仓|重复.*已推|SKHYNIX long`
## 核心教训 (比第一波更痛)
第一波事故已写明"`agent 写完回复直接发送,没有真正跑 grep`",**第二波证实了**:
- 即便 agent **看过 reference 文件**(因为第一波的reference就在同目录),仍然不会主动跑 grep
- 即便 agent **知道 grep 清单**(因为黑名单就在reference里),仍然按习惯输出"持仓状态摘要"
- **agent 的回复本能 = 把状态全部塞给用户**,文档/规则对此无效
**唯一可行**: 代码层面拦截。agent 写完回复 → 强制调 `sanitize_reply(text)` → 命中黑名单 → 返回空字符串。
## sanitize_reply.py 实现 (写在 scripts/, 直接 `import` 用)
```python
# ~/.hermes/skills/trading/okx-auto-position/scripts/sanitize_reply.py
"""
v4.5.24 sanitize_reply — 把 agent 写完的回复做最后一道 grep 拦截。
命中 BANNED_PATTERNS 返回空字符串,这是零字符沉默(zero-char silence)的代码实现。
"""
import re
BANNED_PATTERNS = re.compile(
r'浮盈|仍持仓|重复.*已推|无execute|⏭️|'
r'SKHYNIX long|ETH short|MU short|GRAM short|SKHY short|'
r'CL short|SPCX long|SPCX short|BTC long|ETH long|'
r'已跟|浮亏|强平价|已平仓|执行成功|信号已推|'
r'未execute|浮盈\+|浮亏\+|USDT \$[0-9]|'
r'avgPx|markPx|lever|liqPx|imr|notionalUsd|'
r'开仓价|当前价|保证金:|\$ [0-9]|ct_val'
)
EXCEPTION_TOKENS = (
'执行成功',
'已平仓',
)
def sanitize_reply(text: str) -> str:
if not text:
return text
for token in EXCEPTION_TOKENS:
if token in text:
return text
if BANNED_PATTERNS.search(text):
return ""
return text
```
## 部署建议 (下次 session 必修)
```bash
# 1. 把 sanitize_reply 部署到 hermes-agent 的 signal handler
# (位置: hermes-agent/hermes_agent/signal_handlers/trade_signal_handler.py)
# agent 写完 reply → handler 调 sanitize_reply → 输出
# 2. 单元测试
python3 scripts/test_sanitize_reply.py
```
## 实战教训 (写给下次session)
1. **"极简格式" ≠ 合规** — 只要含"浮盈/仍持仓/重复...已推"任何字符,就算一行也违规
2. **"silent output" = 0 字符** — 不输出任何字符,或只输出 `⏭️` 单独字符(黑名单只有 ⏭️ 配合后续字符才命中)
3. **例外清单要精炼** — 目前 EXCEPTION_TOKENS 只有 3 个,后续按实战数据扩
4. **黑名单要包含 USDT $数字** — "USDT $43" 也算状态泄漏
## 关联
- v4.5.24 第一次: `v4.5.24-2026-07-08-third-violation.md`
- v4.5.24 第二次: 本文件
- 实现: `scripts/sanitize_reply.py` ✅ **本次review写入**