Hot Event Monitor(热点事件监控)
核心能力
- 发现热点:实时抓取全球各类突发事件
- 分级评估:判断事件重要性(P0/P1/P2)
- 影响分析:按「事件类型 → 影响市场 → 代表标的」链路展开,包含金融市场/股票板块分析
- 主动提醒:根据等级推送摘要,用户追问再展开详细分析
- 偏好记忆:记住用户关注的行业、标的、板块,下次加权推送
- 去重机制:避免同一条事件被重复推送
- 金融专项:A股早盘前瞻/收盘复盘、北向资金追踪、板块轮动分析、大宗商品/汇率异动
⚠️ 推送格式统一要求
所有推送消息(无论 Cron 触发还是用户主动触发)必须在开头包含品牌标记:
👁️ Eyes · 大眼看世界
━━━━━━━━━━━━━━━━━━
[正文内容]
━━━━━━━━━━━━━━━━━━
工作流程
Step 0:定时器安装检测(每次触发时执行)
目的:检测用户是否已完成 cron 定时器安装。未安装时在推送内容最前方插入提醒(仅提醒一次)。
标记文件:memory/eyes-installed(install.sh 成功跑完后创建,内容为安装时间)
操作:
- 读取
memory/eyes-installed - 若文件不存在:
- 在本次推送内容最前方(品牌标记之后、正文之前)插入以下提醒:
⚠️ Eyes 定时器未完成配置,当前仅支持手动触发。
直接回复「帮我安装」,AI 将自动完成配置。
配置完成后将自动开启每日早 8 点 / 晚 8 点热点汇总,以及每小时整点扫描。
━━━━━━━━━━━━━━━━━━
安装指令处理
当用户回复「帮我安装」(或不包含热点关键词的主动安装请求)时,由 agent 动态完成注册:
第一步:获取当前用户的 open_id
调用 feishu_get_user(不传参数,获取当前用户自己),从返回结果中取得用户的 open_id(格式:ou_xxx)。
第二步:注册 3 个 cron job(通用版)
参考 references/cron-install-shell.sh 中的命令模板,将 <USER_OPEN_ID> 替换为第一步获取的真实 open_id 后依次执行。具体推送指令内容请查看 references/cron-templates.json。
**第三步:创建安装标记文件**
memory/eyes-installed 内容:
Eyes skill 安装确认
安装时间:<当前ISO时间>
**第四步:回复用户**
- **成功**:「✅ Eyes 定时器配置完成!🌅 早 8 点 / 🌙 晚 8 点 / ⏰ 每小时扫描已就绪。从明早起会自动收到每日热点汇总。」
- **失败**:告知错误信息,建议用户手动检查定时器:运行 `openclaw cron list` 查看状态。
---
### Step 1:读取状态(推送前必做)
读取 `memory/eyes-sent-events.md`,获取**最近24小时内已推送事件列表**。
格式:`EVENT_ID | 推送时间 | 级别 | 摘要`
目的:后续筛除已在列表中的事件,避免重复推送。
---
### Step 2:发现热点
使用 `tools.web_search` 搜索多维度关键词,获取最新事件:
搜索组合(每次至少查 2-3 组):
- "<高热度词>" 或 "最新" + "<日期>"
- "<事件名>" + "影响/市场/经济"
- "突发事件/热点新闻/最新消息"
常用搜索模式:
- 战争冲突:`"中东战争" "最新"`,`"美伊" "停火" "2026"`,`"俄乌" "最新"`
- 地缘摩擦:`"台海" "最新"`,`"贸易战" "最新消息"`
- 政策:`"美联储" "利率" "决议"`,`"央行" "降准" "最新"`
- 灾害:`"地震" "最新"`,`"洪涝" "影响"`
- 技术:`"AI" "突破" "最新"`,`"固态电池" "量产"`
- **金融市场**:`"A股" "开盘" "最新"`,`"美股" "收盘" "最新"`,`"板块" "涨跌"`,`"北向资金"`,`"龙虎榜"`
- **大盘/指数**:`"上证指数" "最新"`,`"恒生指数"`,`"纳斯达克"`
- **大宗商品**:`"原油" "价格"`,`"黄金" "走势"`,`"铜价"`
- **行业/概念**:`"半导体" "最新消息"`,`"AI" "板块"`,`"军工" "动态"`,`"新能源" "政策"`
- **股票异动**:`"涨停" "最新"`,`"跌停"`,`"重大公告"`
- **宏观经济**:`"非农" "CPI"`,`"GDP" "PMI"`,`"社融"`
- **盘前/盘后**:`"A股开盘前瞻"`,`"盘后分析"`,`"机构晨会"`
- **节前/节后**:`"五一" "节后"`,`"国庆" "节前"`(A股节假日效应)
> ⚠️ **搜索 provider 由 OpenClaw 配置决定**,本 skill 不指定具体实现,动态路由。
---
### Step 3:重要性分级
读取 `references/event-impact-matrix.md` 第8节,对照分级规则:
| 等级 | 触发条件 | 推送方式 |
|------|----------|----------|
| P0 | 战争爆发、大规模制裁、全球性危机、黑天鹅、全球市场熔断、重大金融风险事件 | 立即推送,不等待定时 |
| P1 | 重要政策、地缘摩擦升级、大国博弈、重要经济数据、大盘单日跌幅>3%、北向资金单日异动>200亿、板块涨停潮/跌停潮、美联储紧急决议 | 实时推送 |
| P2 | 一般灾害、行业新闻、局部事件、个股异动、板块轮动、常规经济数据、北向资金常规异动、节前/节后效应 | 朝8点/晚8点汇总推送 |
**分级优先原则**:就高不就低,模糊时升一级。
**金融市场特殊规则**:
- 早8点汇总 = 隔夜全球事件 + 开盘前瞻(含A50/美股期货指向)
- 晚8点汇总 = 当日A股复盘 + 板块轮动 + 重大事件总结
- 整点扫描 = 仅P0/P1级突发事件
---
### Step 4:去重过滤
将搜索到的每条事件与 `memory/eyes-sent-events.md` 中的记录比对:
- **事件相似度 > 80%**(相同当事人 + 相同结论)→ 跳过,不推送
- **事件为已推送事件的最新进展** → 仅当有实质性新进展时更新推送,标注「**后续跟踪**」
- **全新事件** → 进入 Step 5
去重判断标准:
- 相同地区 + 相同事件类型 + 相同结论方向 → 视为重复
- 例:"伊朗宣布关闭霍尔木兹海峡" vs "霍尔木兹海峡持续关闭" → 后者为跟进,跳过
- 例:"美伊停火协议达成" vs "以色列空袭黎巴嫩,停火破裂" → 结论方向改变 → 视为新事件
---
### Step 5:影响分析(⚠️ 必须命中矩阵链路)
**强制规则:每条事件必须归类到 event-impact-matrix.md 的 8 大类别之一,并严格沿用该类别的分析链路,不得自由发挥。**
归类判断:
- 军事行动/武装冲突 → 类别1(战争/武装冲突)
- 贸易摩擦/关税/制裁 → 类别2(地缘摩擦/贸易战)
- 央行决议/降准/财政政策 → 类别3(重大政策)
- 疫情/公共卫生事件 → 类别4
- 极端天气/地震/自然灾害 → 类别5(自然灾害)
- AI突破/技术进展/新产品 → 类别6(创新技术)
- GDP/非农/CPI等数据发布 → 类别7(宏观经济数据)
- 股市异动/板块轮动/资金流向/交易数据 → 类别8(金融市场/股票市场)
- 大宗商品/汇率/加密货币 → 类别9(大宗商品/汇率)
- 不属于以上任何类别 → 默认走「地缘摩擦 → A股/港股承压」链路
链路使用规则:
1. **严格对应**:找到矩阵中对应事件类型,逐一列出受影响品种,不遗漏
2. **不扩展品种**:矩阵中没有的品种不主动添加,除非有明确逻辑链支撑
3. **标注推导**:每条影响后用「→」标注推导逻辑,如「→ 原油↑(供应担忧)」
4. **不确定时注明**:没有明确数据支撑时,用"可能/预计"表述,不编造数字
5. **摘要优先**:输出先给结论,用户追问再给详细链路
---
### Step 6:更新推送记录
每推送一条 P0/P1 事件,立即追加一行到 `memory/eyes-sent-events.md`:
<当前时间HH:MM> | <级别> | <事件摘要,20字内>
**保留规则**:自动清理超过 24 小时的旧记录(保留最新一行摘要)。
---
### Step 7:推送摘要格式
**先发送,发送成功不进队列;只有发送失败才写队列重试。**
**流程**:
1. **先调用飞书发送接口**,发送推送内容
2. **发送成功** → 直接追加到 `memory/eyes-sent-events.md`(无需写 retry queue)
3. **发送失败** → 将完整推送内容写入 `memory/eyes-retry-queue.md`,格式:
[<当前时间ISO>] | pending | <推送内容>
repair job 会自动重试并写入 sent-events
**去重规则**:推送内容需按照 Step 2/Step 4 规则去重(比对 eyes-sent-events.md),避免同一事件重复推送。
**repair job 额外规则**:重试推送前,检查 `memory/eyes-sent-events.md` 中是否已有相似内容,若有则标记为 `done` 跳过,不重复发送。
静默规则:无新事件时不推送任何消息。
👁️ Eyes · 大眼看世界 ━━━━━━━━━━━━━━━━━━ {可选标签:🌅 早8点 · 开盘前瞻 / 🌙 晚8点 · 收盘复盘 / ⏰ 整点扫描} 📰 <事件标题> ⏰ <发生时间> | 🔴 P0 / 🟡 P1 / 🟢 P2 📌 <事件简述(1-2句)>
💹 市场影响: • <市场/板块>:<方向> <简述> • <市场/板块>:<方向> <简述>
{若涉及用户关注行业/标的,优先在此展开}
💡 操作参考: • <标的类型>:<建议>
🔍 想了解更多?回复"展开"获取详细分析
### 早8点/晚8点特殊模板(详见 cron-templates.json)
- **🌅 早8点 · 开盘前瞻**:隔夜重磅→外围市场(美股/A50/商品)→今日关注(方向预判/板块/数据预告)→操作参考
- **🌙 晚8点 · 收盘复盘**:大盘表现→热点板块→资金动向(北向/主力)→今日要闻→明日展望
- 标签自动加在品牌标记下方
**字数控制**:
- 即时推送(P0/P1):每条 ≤ 150 字
- 定时汇总(早8/晚8):每条 ≤ 100 字,总推送 ≤ 800 字
- 超出3条时只展示 Top3,其余标注"更多N条"
---
### Step 8(金融专项):市场/板块/个股数据获取
事件涉及金融市场时,按场景搜索数据:
- **政策/行业** → `"<政策>" "板块" "受益"` / `"<行业>" "概念股"`
- **地缘/数据** → `"<国家>" "股市" "影响"` / `"<数据>" "A股" "影响"`
- **外围/北向** → `"<事件>" "A50" "开盘"` / `"北向资金" "净买入" "<日期>"`
- **板块异动** → `"<板块>" "涨停" "原因"`
**反向操作**:个股在同消息中反复出现≥3次,标注为"市场焦点"单独列出。
---
### Step 8(原):更新偏好(自动提取 + 衰减清理)
**提取触发**:在同一次 eyes 对话中,用户提及以下任一内容超过 1 次:
- 任何股票代码(如 688981、002261)
- 任何行业名称(如"半导体"、"新能源"、"军工")
- 任何具体标的简称(如"中芯"、"昇腾"、"拓维")
- 任何市场名称(如"A股"、"港股"、"美股"、"原油"、"黄金")
**提取流程**:
1. 读取当前 `references/user-preferences.md`
2. 检查该行业/标的是否已在列表中:
- **已存在** → 更新其 `lastSeen` 为当前时间,`status` 改为 `active`
- **不存在** → 追加新条目,`lastSeen` 为当前时间,`status` 为 `active`
3. 将 `更新时间` 更新为当前 ISO 时间戳
4. 写回文件
**衰减清理(仅在早 8 点汇总末尾执行一次)**:
today = 当前时间 for each item in 重点关注行业 / 关注标的: days_since_seen = today - item.lastSeen if 90 < days_since_seen <= 180: item.status = "dimmed"(标注 ⚠️,移至列表末尾) elif days_since_seen > 180: 从列表中移除该条目 写入更新后的文件
**展示优先级**:分析结果中,active 条目优先于 dimmed 条目
---
## 定时推送(Cron)
### ⚠️ Cron Job 配置(已实测稳定版本)
三个 cron job 的完整 JSON 模板见 `references/cron-templates.json`,包含早8点/晚8点/整点扫描的完整指令内容。
### 推送时间与A股交易时段对照
| 时间段 | Cron 推送 | 覆盖内容 |
|--------|-----------|----------|
| 早8:00 | ✅ 早8点汇总 | 隔夜全球事件+开盘前瞻(A股9:30开盘前) |
| 9:00-15:00 | ⏰ 整点扫描 | 盘中重大突发事件 |
| 晚8:00 | ✅ 晚8点汇总 | 收盘复盘+明日展望(A股15:00收盘后) |
| 其他时间 | ⏰ 整点扫描 | 仅P0/P1突发事件 |
**注意**:A股节假日/休市期间,早8点汇总调整为"假期外围市场追踪",晚8点取消复盘内容,改为"全球市场综述"。
---
## 常见问答
**Q:搜索结果太多/太少怎么办?**
A:调整关键词,聚焦到具体事件或地区。新闻刚发生时用具体名词(如"伊朗停火"),持续事件用"最新进展"。
**Q:事件影响不确定怎么办?**
A:分析逻辑链条,给出"可能↑/↓"而非确定结论,注明不确定因素。绝对不编数据。
**Q:用户持仓和热点相关怎么办?**
A:读取 `references/user-preferences.md`,若用户有关注行业/标的,在影响分析中优先提及并给出建议。
**Q:同类型事件反复出现怎么办?**
A:识别为"持续事件",在摘要中标注"后续跟踪:XXX",简述最新进展而非重复背景。
**Q:搜索延迟导致事件已过时?**
A:搜索结果中核对时间戳,优先引用 24 小时内的新闻,超时消息注明"早前报道"。
**Q:金融数据如何获取?**
A:`web_search` 搜 `"北向资金" "今日"` / `"A股" "板块" "涨跌"` / `"龙虎榜"` 等。
**Q:A股节假日怎么处理?**
A:早8点改为假期外围追踪,晚8点改为全球综述,整点扫描不变。
**Q:多个关注行业怎么排序?**
A:active > dimmed,同级别按关注程度降序。
**Q:P0/P1 事件在 Cron 扫描中被判定为重复但实际有新进展?**
A:以结论方向是否改变为判断标准。事件结论方向与已推送记录相同 → 跳过;结论方向改变(如停火达成→停火破裂)→ 视为新事件,正常推送。
---
## 工具依赖
- **搜索**:调用 `tools.web_search`(OpenClaw 动态路由,按配置使用当前指定的搜索 provider,自动生成摘要)
- **金融专项搜索**:涉及股票/板块/北向资金/龙虎榜等金融内容时,使用针对性搜索关键词获取数据
- **内存读写**:读取/写入推送记录(`memory/eyes-sent-events.md`)和 P2 暂存(`memory/eyes-p2-pending.md`)
- **用户信息**(可选):查询用户日历辅助判断关注点
- **消息推送**:发送到飞书
## 文件索引
- `memory/eyes-sent-events.md`:最近24小时已推送事件记录(自动维护,用于去重)
- `memory/eyes-p2-pending.md`:Cron 扫描中暂存的 P2 事件(由 hourly job 写入,由早/晚汇总 job 读取并清空)
- `memory/eyes-installed`:定时器安装标记(install.sh 跑完后自动创建)
- `references/event-impact-matrix.md`:9大类型事件的影响链路与分级规则(含金融市场/大宗商品类别)
- `references/user-preferences.md`:用户个性化偏好(关注市场/行业/标的/排除方向)
- `references/cron-templates.json`:三个 cron job 的完整 JSON 模板(早8点开盘前瞻/晚8点收盘复盘/整点扫描,均含A股分析指令)
- `references/cron-install-shell.sh`:安装 cron job 的 shell 命令模板