Hot Event Monitor(热点事件监控)
核心能力
- 发现热点:实时抓取全球各类突发事件
- 分级评估:判断事件重要性(P0/P1/P2)
- 影响分析:按「事件类型 → 影响市场 → 代表标的」链路展开
- 主动提醒:根据等级推送摘要,用户追问再展开详细分析
- 偏好记忆:记住用户关注方向,下次加权推送
- 去重机制:避免同一条事件被重复推送
⚠️ 推送格式统一要求
所有推送消息(无论 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(通用版)
依次执行以下 openclaw cron add 命令,将 <USER_OPEN_ID> 替换为第一步获取的真实 open_id:
# 早 8 点汇总
openclaw cron add \
--name "eyes-morning" \
--cron "0 8 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message '{"kind":"agentTurn","message":"执行 eyes skill 早间热点汇总任务:\n\n1. 搜索过去12小时内(即前一晚20:00到今早08:00之间)的全球热点事件\n2. 搜索时用多组关键词:战争/停火+最新,地缘+最新,政策+今天,经济数据+最新,灾害+最新,技术+最新\n3. 读取 memory/eyes-p2-pending.md,提取过去12小时内暂存的P2事件\n4. 合并去重后,按P0→P1→P2顺序输出完整热点汇总\n5. 每条事件附:级别标签+简述+市场影响(30字内)\n6. 推送完成后,清空 memory/eyes-p2-pending.md 中的当日记录\n7. 若过去12小时无任何新事件,发送「近12小时无重大热点事件」\n\n注意:格式按SKILL.md,每条事件控制在100字内,总推送不超过800字,开头必须有「👁️ Eyes · 大眼看世界」品牌标记。","timeoutSeconds":180}' \
--no-deliver \
--channel last \
--to "user:<USER_OPEN_ID>"
# 晚 8 点汇总
openclaw cron add \
--name "eyes-evening" \
--cron "0 20 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message '{"kind":"agentTurn","message":"执行 eyes skill 晚间热点汇总任务:\n\n1. 搜索过去12小时内(即当日早08:00到20:00之间)的全球热点事件\n2. 搜索时用多组关键词:战争/停火+今天,地缘+今天,政策+今天,经济数据+今天,灾害+今天,技术突破+今天\n3. 读取 memory/eyes-p2-pending.md,提取当日暂存的所有P2事件\n4. 合并去重后,按P0→P1→P2顺序输出完整热点汇总\n5. P0/P1事件附:级别标签+简述+市场影响+操作参考\n6. 推送完成后,清空 memory/eyes-p2-pending.md 中的当日记录\n7. 若当日无任何新事件,发送「今日无重大热点事件」\n\n注意:格式按SKILL.md,每条事件控制在100字内,总推送不超过800字,开头必须有「👁️ Eyes · 大眼看世界」品牌标记。","timeoutSeconds":180}' \
--no-deliver \
--channel last \
--to "user:<USER_OPEN_ID>"
# 每小时整点扫描
openclaw cron add \
--name "eyes-hourly" \
--cron "0 9-22 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message '{"kind":"agentTurn","message":"执行 eyes skill 整点扫描任务:\n\n1. 读取 memory/eyes-sent-events.md,获取过去24小时已推送事件列表,避免重复推送\n2. 搜索过去1小时内最新热点事件(关键词组:战争/冲突/停火+最新,地缘摩擦+最新,重大政策+今天,灾害+最新,技术突破+最新)\n3. 按P0/P1/P2分级标准评估每条事件\n4. P0/P1事件 → 立即推送完整摘要到飞书(开头必须有「👁️ Eyes · 大眼看世界」品牌标记,格式:标题+级别+简述+市场影响+操作参考,每条≤150字)\n5. P2事件 → 追加写入 memory/eyes-p2-pending.md,格式:[HH:MM] P2 | <标题> | <简述>\n6. 推送P0/P1后立即更新 memory/eyes-sent-events.md\n7. 若本次扫描未发现新事件,无需推送任何内容。\n\n注意:必须先读 eyes-sent-events.md 去重!只推送真正新的事件。","timeoutSeconds":150}' \
--no-deliver \
--channel last \
--to "user:<USER_OPEN_ID>"
第三步:创建安装标记文件
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" "突破" "最新","固态电池" "量产"
⚠️ 搜索 provider 由 OpenClaw 配置决定,本 skill 不指定具体实现,动态路由。
Step 3:重要性分级
读取 references/event-impact-matrix.md 第8节,对照分级规则:
| 等级 | 触发条件 | 推送方式 |
|---|
| P0 | 战争爆发、大规模制裁、全球性危机、黑天鹅 | 立即推送,不等待定时 |
| P1 | 重要政策、地缘摩擦升级、大国博弈、重要经济数据 | 实时推送 |
| P2 | 一般灾害、行业新闻、局部事件 | 朝8点/晚8点汇总推送 |
分级优先原则:就高不就低,模糊时升一级。
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(宏观经济数据)
- 不属于以上任何类别 → 默认走「地缘摩擦 → A股/港股承压」链路
链路使用规则:
- 严格对应:找到矩阵中对应事件类型,逐一列出受影响品种,不遗漏
- 不扩展品种:矩阵中没有的品种不主动添加,除非有明确逻辑链支撑
- 标注推导:每条影响后用「→」标注推导逻辑,如「→ 原油↑(供应担忧)」
- 不确定时注明:没有明确数据支撑时,用"可能/预计"表述,不编造数字
- 摘要优先:输出先给结论,用户追问再给详细链路
Step 6:更新推送记录
每推送一条 P0/P1 事件,立即追加一行到 memory/eyes-sent-events.md:
<当前时间HH:MM> | <级别> | <事件摘要,20字内>
保留规则:自动清理超过 24 小时的旧记录(保留最新一行摘要)。
Step 7:推送摘要格式
推送前:先将完整推送内容写入 memory/eyes-retry-queue.md,格式:
[<当前时间ISO>] | pending | <推送内容>
发送:调用飞书发送接口。
发送成功 → 更新队列中该条状态为 done:[<创建时间>] | done | <内容>
发送失败 → 留在队列,status 保持 pending,repair job 会自动重试。
静默规则:无新事件时不推送任何消息。
👁️ Eyes · 大眼看世界
━━━━━━━━━━━━━━━━━━
📰 <事件标题>
⏰ <发生时间> | 🔴 P0 / 🟡 P1 / 🟢 P2
📌 <事件简述(1-2句)>
💹 市场影响:
• <市场/板块>:<方向> <简述>
• <市场/板块>:<方向> <简述>
💡 操作参考:
• <标的类型>:<建议>
🔍 想了解更多?回复"展开"获取详细分析
字数控制:
- 即时推送(P0/P1):每条 ≤ 150 字
- 定时汇总(早8/晚8):每条 ≤ 100 字,总推送 ≤ 800 字
- 超出3条时只展示 Top3,其余标注"更多N条"
Step 8:更新偏好(自动提取 + 衰减清理)
提取触发:在同一次 eyes 对话中,用户提及以下任一内容超过 1 次:
- 任何股票代码(如 688981、002261)
- 任何行业名称(如"半导体"、"新能源"、"军工")
- 任何具体标的简称(如"中芯"、"昇腾"、"拓维")
- 任何市场名称(如"A股"、"港股"、"美股"、"原油"、"黄金")
提取流程:
- 读取当前
references/user-preferences.md
- 检查该行业/标的是否已在列表中:
- 已存在 → 更新其
lastSeen 为当前时间,status 改为 active
- 不存在 → 追加新条目,
lastSeen 为当前时间,status 为 active
- 将
更新时间 更新为当前 ISO 时间戳
- 写回文件
衰减清理(仅在早 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 配置(已实测稳定版本)
早8点推送(Cron Job:每天 08:00):
{
"name": "eyes-morning",
"schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Asia/Shanghai" },
"payload": {
"kind": "agentTurn",
"message": "执行 eyes skill 早间热点汇总任务:\n\n1. 搜索过去12小时内(即前一晚20:00到今早08:00之间)的全球热点事件\n2. 搜索时用多组关键词:战争/停火+最新,地缘+最新,政策+今天,经济数据+最新,灾害+最新,技术+最新\n3. 读取 memory/eyes-p2-pending.md,提取过去12小时内暂存的P2事件\n4. 合并去重后,按P0→P1→P2顺序输出完整热点汇总\n5. 每条事件附:级别标签+简述+市场影响(30字内)\n6. 推送完成后,清空 memory/eyes-p2-pending.md 中的当日记录\n7. 若过去12小时无任何新事件,发送「近12小时无重大热点事件」\n\n注意:格式按SKILL.md,每条事件控制在100字内,总推送不超过800字,开头必须有「👁️ Eyes · 大眼看世界」品牌标记。",
"timeoutSeconds": 180
},
"sessionTarget": "isolated",
"delivery": { "mode": "none" }
}
晚8点推送(Cron Job:每天 20:00):
{
"name": "eyes-evening",
"schedule": { "kind": "cron", "expr": "0 20 * * *", "tz": "Asia/Shanghai" },
"payload": {
"kind": "agentTurn",
"message": "执行 eyes skill 晚间热点汇总任务:\n\n1. 搜索过去12小时内(即当日早08:00到20:00之间)的全球热点事件\n2. 搜索时用多组关键词:战争/停火+今天,地缘+今天,政策+今天,经济数据+今天,灾害+今天,技术突破+今天\n3. 读取 memory/eyes-p2-pending.md,提取当日暂存的所有P2事件\n4. 合并去重后,按P0→P1→P2顺序输出完整热点汇总\n5. P0/P1事件附:级别标签+简述+市场影响+操作参考\n6. 推送完成后,清空 memory/eyes-p2-pending.md 中的当日记录\n7. 若当日无任何新事件,发送「今日无重大热点事件」\n\n注意:格式按SKILL.md,每条事件控制在100字内,总推送不超过800字,开头必须有「👁️ Eyes · 大眼看世界」品牌标记。",
"timeoutSeconds": 180
},
"sessionTarget": "isolated",
"delivery": { "mode": "none" }
}
整点扫描(Cron Job:每小时 9-22点,timeout 设为 150s):
{
"name": "eyes-hourly",
"schedule": { "kind": "cron", "expr": "0 9-22 * * *", "tz": "Asia/Shanghai" },
"payload": {
"kind": "agentTurn",
"message": "执行 eyes skill 整点扫描任务:\n\n1. 读取 memory/eyes-sent-events.md,获取过去24小时已推送事件列表,避免重复推送\n2. 搜索过去1小时内最新热点事件(关键词组:战争/冲突/停火+最新,地缘摩擦+最新,重大政策+今天,灾害+最新,技术突破+最新)\n3. 按P0/P1/P2分级标准评估每条事件\n4. P0/P1事件 → 立即推送完整摘要到飞书(开头必须有「👁️ Eyes · 大眼看世界」品牌标记,格式:标题+级别+简述+市场影响+操作参考,每条≤150字)\n5. P2事件 → 追加写入 memory/eyes-p2-pending.md,格式:[HH:MM] P2 | <标题> | <简述>\n6. 推送P0/P1后立即更新 memory/eyes-sent-events.md\n7. 若本次扫描未发现新事件,无需推送任何内容。\n\n注意:必须先读 eyes-sent-events.md 去重!只推送真正新的事件。",
"timeoutSeconds": 150
},
"sessionTarget": "isolated",
"wakeMode": "now",
"delivery": { "mode": "none" }
}
常见问答
Q:搜索结果太多/太少怎么办?
A:调整关键词,聚焦到具体事件或地区。新闻刚发生时用具体名词(如"伊朗停火"),持续事件用"最新进展"。
Q:事件影响不确定怎么办?
A:分析逻辑链条,给出"可能↑/↓"而非确定结论,注明不确定因素。绝对不编数据。
Q:用户持仓和热点相关怎么办?
A:读取 references/user-preferences.md,若用户有关注行业/标的,在影响分析中优先提及并给出建议。
Q:同类型事件反复出现怎么办?
A:识别为"持续事件",在摘要中标注"后续跟踪:XXX",简述最新进展而非重复背景。
Q:搜索延迟导致事件已过时?
A:搜索结果中核对时间戳,优先引用 24 小时内的新闻,超时消息注明"早前报道"。
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:8大类型事件的影响链路与分级规则
references/user-preferences.md:用户个性化偏好(关注市场/行业/标的)