74 lines
4.4 KiB
Markdown
74 lines
4.4 KiB
Markdown
# TG信号群 Channel Prompts 配置
|
||
|
||
## 当前配置(2026-08-21 改: 防重复推送)
|
||
|
||
⚠️ **历史问题**: 之前 prompt 让 agent 收到信号就调 format_signal.py + push_to_qq.sh。但 gateway inline hook (signal_inbox.py → process_signal.py) 已经会自动处理信号 + 推"执行结果"。**结果同一信号推两次**:一次自动开仓的"✅ 执行结果",一次冗余的"⚡ 跟单建议"。
|
||
|
||
**修复**: channel_prompts 改为先**检查信号是否已被 inline hook 处理过**(查 signal_queue.db status='done'),**已 done → 静默**;否则走 fallback format_signal.py。
|
||
|
||
```yaml
|
||
telegram:
|
||
channel_prompts:
|
||
'-1003966251111': '交易信号处理规则(必须严格执行): 收到含【币种】的消息后,第一步:用terminal工具执行 `sqlite3 ~/.hermes/trading/signal_queue.db "SELECT status FROM queue WHERE raw_text LIKE '%' || '{从【币种】提取}' || '%' ORDER BY id DESC LIMIT 1"` 检查最新队列状态。第二步:如果 status='done' (已被 inline hook 处理过, 即已自动开仓或已跳过) → 静默返回 "⏭️ 已处理", 不做任何推送。第三步:如果 status='failed' 或 'pending' → 用terminal工具执行python3 ~/.hermes/skills/trading/okx-auto-position/scripts/format_signal.py --symbol {从【币种】提取} --side {做多=long/做空=short} --leverage {从【杠杆】提取数字} --trader {从第一行【】提取名字} --trader-pos {从【仓位大小】提取} --trader-value {从【仓位价值】提取} --trader-entry {从【开仓价】提取} --trader-pnl {从【未实现盈亏】提取} --signal-type C,然后执行 bash ~/.hermes/scripts/push_to_qq.sh {脚本输出}。非交易消息忽略。'
|
||
```
|
||
|
||
### 关键变化
|
||
|
||
- ✅ 新增第一步:查 signal_queue.db 状态
|
||
- ✅ status='done' → 静默(`⏭️ 已处理`),**不重复推送** — 这是修复重复推送的核心
|
||
- status='failed' 或 'pending' → 才走 format_signal.py fallback 推人工确认
|
||
|
||
⚠️ 注意: inline hook 处理的信号会自动推"✅ 执行结果"(开仓成功)或"⏭️ 跳过"(被拦),这些才是真正的推送。agent 走 format_signal.py 是给 inline hook 没处理的信号做兜底,例如 cron retry 或人工补单。
|
||
|
||
### ⚠️ 极简版channel_prompts("加载skill按流程处理")实测失败
|
||
|
||
**教训(2026-07-04)**:agent不会主动加载skill。写"加载skill okx-auto-position按流程处理"时,agent无视指令,继续用硬编码模板推送错误金额。
|
||
|
||
**根因**:
|
||
- mimo-v2.5-pro模型不会执行模糊指令
|
||
- ongoing session重启后保留旧的"行为记忆"
|
||
- channel_prompts的指令被旧上下文覆盖
|
||
|
||
**解决**:channel_prompts里写完整命令,agent只需用terminal工具执行,不需要"理解"skill。
|
||
|
||
所有流程细节在 `okx-auto-position` skill 的 SKILL.md 里维护。改流程只改skill,不碰config.yaml,不需要重启gateway。
|
||
|
||
## 历史教训
|
||
|
||
旧版config.yaml把完整流程指令写在channel_prompts里(6步详细指令),导致:
|
||
1. 每次改流程都要重启gateway
|
||
2. config.yaml越写越长,难以维护
|
||
3. skill和config里的指令重复甚至冲突
|
||
|
||
极简版解决了这些问题:channel_prompts只做路由(指向skill),skill做所有逻辑。
|
||
|
||
## 关键规则
|
||
|
||
1. **不要回复群** — 所有回复只在QQ私信推送
|
||
2. **不要做分析** — 不在主群做趋势复盘
|
||
3. **非交易消息忽略** — 广告、闲聊直接跳过
|
||
4. **推送目标** — QQ DM: `qqbot:B1EF50442496D57C1B4F3890501C34C2`
|
||
|
||
## ⚠️ 改了channel_prompts后必须删旧session
|
||
|
||
**问题**:ongoing session不会自动加载新的channel_prompts。改了配置后agent行为不变。
|
||
|
||
**解决**:删除TG群的旧session,gateway自动重建。
|
||
```bash
|
||
# 查找TG群session
|
||
sqlite3 ~/.hermes/state.db "SELECT id, chat_id, title FROM sessions WHERE chat_id LIKE '%1003966251111%';"
|
||
|
||
# 删除(让gateway重建)
|
||
sqlite3 ~/.hermes/state.db "DELETE FROM sessions WHERE id = 'xxx';"
|
||
```
|
||
|
||
**同理**:改了skill后如果TG agent行为没变,也可能是旧session缓存了旧skill内容。删session重建即可。
|
||
|
||
## 修正已有信号金额
|
||
|
||
当agent推送了硬编码模板(金额错误)时,可用fix_recommendation.py修正:
|
||
```bash
|
||
python3 ~/.hermes/skills/trading/okx-auto-position/scripts/fix_recommendation.py '原始信号文本'
|
||
```
|
||
自动提取币种/方向/杠杆,调advisor获取正确金额,输出含📐的修正消息。可直接push_to_qq.sh推送。
|