| name | jin10 |
| description | 金十快讯数据服务。三层架构:基础层(采集+清洗+存储)→ 功能层(搜索+总结+健康检查)→ 应用层(事件追踪+告警+定时推送)。
触发:快讯、金十、新闻总结、过去X小时发生了什么、搜索关键词、追踪事件、重要快讯、采集状态等。
|
Jin10 快讯服务
架构
┌─────────────────────────────────────────┐
│ 应用层(功能层的组合 + 自动化) │
│ ├─ 事件追踪 = 搜索 + 总结 │
│ ├─ 关键词告警 = 搜索 + 推送 │
│ ├─ 定时推送 = 总结 + cron │
│ └─ 热词统计 = 搜索 + 聚合 │
├─────────────────────────────────────────┤
│ 功能层(原子能力) │
│ ├─ 快讯搜索(基础 + 高级) │
│ ├─ 时间线总结(V7 简报) │
│ └─ 采集健康度查询 │
├─────────────────────────────────────────┤
│ 基础层 │
│ ├─ 金十 API 轮询(每15秒) │
│ ├─ 内容清洗(HTML → 纯文本) │
│ ├─ 过滤(广告/汇总/点击诱导/空内容) │
│ └─ SQLite 存储 │
└─────────────────────────────────────────┘
基础层
数据库
路径(按优先级):skills/jin10/data/jin10.db → data/news-flash.db
flash_news 表:
| 字段 | 说明 |
|---|
| time | 发布时间 YYYY-MM-DD HH:MM:SS |
| content | 正文(纯文本,已清洗) |
| title | 标题(部分有) |
| important | 0=普通 1=重要 |
| channels | 频道 JSON [1]速报 [2]A股 [3]商品 [4]债券 [5]国际 |
collector_stats 表: polls/saves/skips/errors/last_error/started_at
过滤规则(入库前排除)
- 广告、HTML 列表合集、点击诱导("点击查看…")
- 汇总类(>1000字+编号列表,是单条快讯的重复合并)
- 空内容或极短内容(<5字)
采集服务
node skills/jin10/scripts/collector.js
node skills/jin10/scripts/collector.js --test
功能层
1. 快讯搜索
触发:"搜一下降息相关快讯""最近有没有关于美联储的消息""查查原油"
node skills/jin10/scripts/query.js --hours 8
node skills/jin10/scripts/query.js --today --important
node skills/jin10/scripts/query.js --keyword "降息,加息"
node skills/jin10/scripts/query.js --keyword "美联储" --keyword-and "降息"
node skills/jin10/scripts/query.js --channel 3 --hours 24
node skills/jin10/scripts/query.js --exclude "点击查看"
node skills/jin10/scripts/query.js --from "2026-03-14 22:00" --to "2026-03-15 08:00"
2. 时间线总结
触发:"过去8小时快讯总结""昨晚发生了什么""从下午3点到现在的快讯"
流程:
- 拉数据 —
query.js --hours N --json 或直接 SQL,全量拉取
- 去重 — 跳过汇总类(基础层已过滤大部分,分析时再二次排重)
- 分析 — 识别主线(4h→2-3条 / 8h→3-5条 / 24h→4-7条),按时间线分4-8个事件块,找口风变化和立场矛盾
- 输出简报 — V7 格式:
# 快讯简报 | {起始} ~ {结束}
**{总导语,50字概括全局}**
**{主题1导语,一句话概括该主题核心}**
自然语言叙事,像讲故事一样串联因果。时间点和发言人用小括号标注
(22:07,特朗普),关键时间节点加粗强调。段落之间有转折、因果、
对比,不是干巴巴的时间+内容列表。
**{主题2导语}**
继续自然叙事……
**{主题3导语}**
继续自然叙事……
## 综合判断
**{领域}:{方向}。** {逻辑}
**最核心的变量:** {关键变量+判断}
⚠️ 格式规则:
- 没有
## 事件标题,没有 --- 分隔线(综合判断除外)
- 每个主题用加粗导语开头,下面直接跟自然语言叙事
- 时间点和发言人用小括号嵌在句子里,如(14:22,革命卫队)
- 关键时间节点可加粗,如 00:43
- 叙事要连贯,像讲故事,有因果转折,不是罗列
⚠️ 约束:
- 覆盖完整时间范围到当前时刻,不能中途断掉
- 全部读完再写,不能写一半再"补充"
- 判断有态度,禁止"据xx报道""值得注意的是"
- 篇幅:4h→1500字 / 8h→2500字 / 24h→3500字
- >150条时按小时分组精选到80-120条
保存到 tmp/news-briefing-latest.md 并发送。
3. 采集健康度
触发:"采集服务正常吗""快讯数据库状态""今天收了多少条"
node skills/jin10/scripts/collector.js --health
node skills/jin10/scripts/query.js --count --today
应用层
应用层 = 功能层原子能力的组合 + 自动化。以下为可实现的应用:
事件追踪
触发:"帮我追踪一下原油的事件""霍尔木兹最近的动态"
实现:搜索(相关关键词组合)→ 时间线总结(只针对匹配结果)
关键词告警
触发:"降息相关的快讯帮我推送""出现黑天鹅就通知我"
实现:采集服务内置关键词匹配,每条快讯入库时自动检查,命中则通过 Webhook 推送。
配置文件:skills/jin10/data/alerts.json
[
{
"keyword": "特朗普,关税",
"webhook": "https://api.telegram.org/bot<TOKEN>/sendMessage",
"format": "telegram",
"chatId": "123456"
},
{
"keyword": "降息,加息,利率",
"webhook": "https://discord.com/api/webhooks/ID/TOKEN",
"format": "discord"
},
{
"keyword": "黑天鹅,暴跌",
"webhook": "https://open.feishu.cn/open-apis/bot/v2/hook/xxx",
"format": "feishu"
},
{
"keyword": "原油",
"webhook": "https://your-server.com/alert",
"format": "plain"
}
]
字段说明:
| 字段 | 说明 |
|---|
keyword | 关键词,逗号分隔,OR 匹配(任一命中即触发) |
webhook | 推送地址(Telegram Bot API / Discord Webhook / 飞书 / 自定义 URL) |
format | 推送格式:telegram / discord / feishu / plain |
chatId | Telegram 专用,目标 chat ID |
工作原理:collector.js 每条快讯入库后调用 checkAlerts(),匹配关键词则通过对应 Webhook 推送。无需额外 cron,采集服务运行期间自动生效。修改 alerts.json 后无需重启,下次轮询自动加载新规则。
也可用独立脚本手动检查:
node scripts/alert.js --keyword "降息" --seconds 120
定时推送
触发:"每天早上8点给我发一份昨晚简报"
实现:cron 定时 → 时间线总结 → 推送到频道
热词统计
触发:"最近市场在关注什么""过去24小时高频词"
实现:搜索(全量)→ 分词统计 → 按频次排序