mcpField
N
news-monitoring

news-monitoring

github.com/moonlight-lupin生产力113129 次安装1 天前更新
代码仓库

关于 news-monitoring

news-monitoring 是用于设置定期新闻搜索并发送精简排序摘要的技能。它指导定义主题、多语言来源发现、结果筛选与去重,并支持定时或单次交付。

主要功能

  1. 01定义主题、地区和关注角度
  2. 02构建多语言时效性查询
  3. 03筛选并排列文章
  4. 04与往期摘要去重
  5. 05发送单次或定期摘要

适用场景

  1. 01监测行业或政策新闻
  2. 02创建定期主题摘要
  3. 03将新结果与往期内容比较
  4. 04向聊天渠道或文档工作流发送摘要

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/moonlight-lupin/agent-skills --skill news-monitoring

安装后在 Claude Code 中输入/news-monitoring确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
routing-fixtures.json
references/
pbsa-hk-search-config.md
selfhosting-digest-config.md
web-search-fallback.md

详细介绍

新闻监测与摘要推送

设置定期的主题/新闻监测,搜索近期文章,汇总成标题摘要,并推送到消息频道或文档工作流。

工作流

第 1 步 — 定义主题

与用户一起确定:

  • 主题:要监测的内容(例如:香港学生公寓、AI 监管、自托管工具)
  • 地区:关注哪些地区(例如:香港、新加坡、全球)
  • 角度:要跟踪哪些方面——投资/交易、政策/监管、供应/项目管线、入住率/租金、综合评论
  • 动态速度:该领域变化的快慢——这决定了可接受的文章时效(见第 5 步)
第 2 步 — 创建搜索关键词

根据主题定义构建搜索查询:

  • 多角度:每个角度各用一个查询(投资、政策、供应等)
  • 多语言:每个地区都使用英文关键词和当地语言关键词
  • 限定时间:尽可能在查询中注明时效范围(例如“2026”“最新”)
  • 查询应简洁——3~7 个词效果最佳。查询过长会导致结果稀少。
第 3 步 — 选择来源

确定与主题和地区相关的来源:

  • 英文来源:国际媒体、当地英文媒体、行业出版物
  • 当地语言来源:使用该地区主要语言的当地媒体——这些媒体往往最先发布新闻
  • 行业专属来源:行业出版物、研究机构、REIT/行业专属网站
  • 封闭生态平台(小红书、抖音、微信公众号):内容不会被网页索引。应明确说明这一限制——可选方案包括人工监测或使用第三方分析工具。

在主题的参考文件中记录来源列表(见“参考文件”部分)。

第 4 步 — 执行搜索

日期校准(必需)。 执行任何搜索前,先让模型了解当前真实日期。大模型默认会在查询中使用训练数据截止年份,导致结果过时。注入:

今天的日期是 {当前日期,格式为“DD Month YYYY”}。当搜索查询需要年份,或提及“最新”/“当前”/“今年”时,请使用 {当前年份} 或相对时间表述——切勿使用从训练数据推断出的年份。

主要方法:使用运行环境的 web_search 工具。

web_search(query="Hong Kong PBSA student accommodation investment 2026", limit=10)

该工具使用 config.yaml 中配置的任意后端(例如 SearXNG → DDGS 回退)。此技能与后端无关——不会规定使用哪种搜索引擎。针对第 2 步中的每条查询,分别运行一次 web_search 调用。

高级选项:使用 SearXNG 直接 curl,以应用新闻专用筛选条件。

当需要新闻类别筛选、语言选择或 web_search 未提供的时间范围限定时:

# English news, last month
curl -sL "${SEARXNG_URL}/search?q=ENCODED_QUERY&format=json&categories=news&language=en&time_range=month"

# Chinese news, last month
curl -sL "${SEARXNG_URL}/search?q=ENCODED_ZH_QUERY&format=json&categories=news&language=zh-Hant&time_range=month"

SearXNG 的关键参数:

  • format=json — 必需(省略会返回 403)
  • categories=news — 仅返回新闻结果
  • language=zh-Hant / language=en
  • time_range=day|week|month|year
  • 结果包含来源的直接 URL(无需解析代理)

RSS 订阅源适用于需要精选、持续跟踪的来源,搜索引擎可能无法及时呈现这些来源的内容:

curl -sL "https://example.com/feed/"

解析 <item> 块中的 <title>、<pubDate>、<link>、<description>。

第 5 步 — 处理结果

检查所有搜索结果,并:

  1. 质量筛选 — 在进行任何排序之前,剔除低质量结果:
    • 内容单薄:页面是落地页、聚合器占位页,或没有实质性文本(实际文章内容少于 100 个单词)
    • 不相关:尽管关键词重叠,结果仍与任何已定义的主题角度都不匹配(例如,主题是海港时,「port」匹配到「transport」)
    • 重复 URL:同一篇文章出现在多个搜索结果中(保留首次出现的结果)
    • 非文章内容:仅含视频的页面、图片论坛、没有预览内容的登录墙
    • 对主题词使用词边界匹配,以避免子字符串匹配造成的误判(例如,「us」匹配到「business」)
  2. 去重 — 同一篇文章出现在多个查询或搜索引擎结果中时,只保留一次(按标题相似度匹配,而非仅匹配完全相同的 URL)
  3. 按用户的优先顺序排序:
    • 时效性:最新内容优先(默认)
    • 相关性:与主题角度的匹配程度
    • 来源优先级:Tier 1 来源排名更高(参见主题参考文件)
  4. 排名 — 根据时效性 × 相关性 × 来源级别,为每篇文章分配优先级/影响力分数
  5. 标记过时内容 — 当结果相对于所在领域的发展速度已显陈旧时,提醒用户:
    • 快速变化的领域(AI、加密货币、科技监管):超过 2–3 个月的文章可能已过时,应标记或排除
    • 变化缓慢的领域(房地产、基础设施、政策):长达 6 个月的文章仍可能相关
    • 根据第 1 步定义的发展速度进行校准
  6. 筛选 — 移除超出主题范围、地理范围或时效门槛的文章
第 6 步 — 与之前的摘要对比

如果这是定期摘要(cron 任务),请检查内容是否重叠:

  • 在 cron 任务上使用 context_from,将上一次摘要的输出作为上下文注入(参见 Cron Setup 部分)
  • 将新结果与之前的摘要对比 — 按标题相似度匹配,而非要求字符串完全一致
  • 移除上一次运行中已出现的文章
  • 对于内容重叠较多的小众/低活跃度主题,可考虑扩大范围或降低频率
第 7 步 — 汇编摘要

将已排序、去重的结果整理成易读的摘要:

📰 [TOPIC] — Headline Digest
🗓 [Today's date as DD Mon YYYY]

1. [Date] — Source
   **Headline**
   1-2 line summary. Key stat or implication.
   🔗 Direct source URL

2. [Date] — Source
   ...

---
🔑 Key themes:
- Theme 1: brief summary
- Theme 2: brief summary

格式规则:

  • 每个条目都必须包含发布日期
  • 标题 + 1–2 行摘要(不要写成段落分析)
  • 按优先级/影响力排序(最高优先)
  • 来源链接使用 🔗 + 发布者网站的直接 URL — 绝不要使用 Google News 代理 URL 或 Bing apiclick URL
  • 最近 7 天发布的文章使用 🆕 标记
  • 默认最多 5 条(可按主题配置)。宁可降低频率,也不要用过时内容凑数。
  • 在底部汇总关键主题 — 用一行概述主导趋势

URL 规则:

  • 每个链接都必须直接指向发布者网站上的文章
  • Google News RSS 链接(news.google.com/rss/articles/CBMi...)是 protobuf 编码的代理 URL,无法通过任何方法解析。如果仅使用 Google News RSS 进行发现,请在加入摘要前通过 SearXNG 标题搜索或 web_search 获取实际来源 URL。
  • Bing News RSS 链接是 apiclick.aspx 重定向链接 — 从 url= 参数中提取真实 URL。
  • 如果无法解析:仍收录该文章,并注明 ⚠️ Direct link unavailable — search [SOURCE] for: [title]
Step 8 — 交付

通过以下任一方式将摘要交付给用户:

  • 聊天渠道(Telegram、WhatsApp)——最常见。使用定时任务的 deliver 参数(例如 deliver=telegram、deliver=whatsapp:<HANDLE>)。WhatsApp 需要明确的目标;只写 deliver=whatsapp 会失败。
  • 生成文档——将编译好的摘要传给文档生成技能,以生成排版好的 PDF、幻灯片或文章。该技能应以结构化格式(markdown)输出摘要内容,供下游技能使用。

一次性摘要:直接在当前聊天中交付。 定期摘要:设置定时任务(见下文)。

Step 9 — 设置 Cron(参考)

对于定期摘要,使用 cronjob 工具创建计划任务。此步骤为可选;一次性摘要无需设置。

关键参数:

  • schedule:cron 表达式(例如,0 9 1,15 * * 表示每两周上午 9 点运行,0 3 */3 * * 表示每 3 天运行一次)
  • prompt:独立完整的指令,包含主题、搜索查询、来源列表、摘要格式、输出语言和输出规范
  • deliver:目标渠道(telegram、whatsapp:<HANDLE> 等)
  • context_from:应将其上次输出注入为上下文的任务 ID 列表(用于去重,通常为任务自身的 ID,以便引用自身)
  • enabled_toolsets:限制为 ["web", "terminal"],以减少令牌开销

Cron 提示词模板:

You are a [TOPIC] news scout. Find recent articles (within the last [N] months ONLY) and compile a concise digest.

## Date grounding
Today's date is {current date}. When a search query needs a year or refers to "latest"/"current"/"this year", use {current year} or relative wording — never a year inferred from training data.

## Search
Run [N] searches using the web_search tool — one per angle, in both English and [native language]:

1. web_search("[English query 1]", limit=10)
2. web_search("[English query 2]", limit=10)
3. web_search("[Native language query 1]", limit=10)
...

If results need news-specific filtering (categories, language, time_range), use SearXNG directly:
curl -sL "${SEARXNG_URL}/search?q=ENCODED_QUERY&format=json&categories=news&language=[lang]&time_range=month"

If SearXNG is unreachable, the web_search tool will fall back automatically.

## Processing
1. Quality filter — discard thin content (landing pages, stubs, <100 words), irrelevant results (word-boundary match topic terms, not substring), duplicate URLs, and non-article pages
2. Deduplicate across queries (match by title similarity)
3. Filter: only articles from the last [N] months, directly related to [TOPIC]
4. Compare against previous digest (provided as context) — remove articles already covered
5. Sort by recency, then by relevance
6. Pick TOP [5] articles

## Output
📰 [TOPIC] — Headline Digest
🗓 [today's date]

1. **{Headline}**
   📅 {DD Mon YYYY} · {Source}
   {1-2 line summary}
   🔗 {DIRECT article URL}

...up to [5] items

---
🔑 Key themes: {one-line takeaway}

## Rules
- Every 🔗 link MUST be a direct URL to the publisher's site
- Always include publish date
- Use 🆕 for articles from last 7 days
- Do NOT fabricate articles
- OUTPUT DISCIPLINE: Output EXACTLY ONE copy of the digest. The VERY FIRST LINE must be '📰'. The VERY LAST LINE must be the last theme bullet. No thinking, reasoning, planning, or meta-commentary.
**IMPORTANT: Write ALL output in [LANGUAGE].** Preserve original [native language] headlines as-is when the source article is in [native language].

通过 context_from 去重: 在 cron 任务中设置 context_from: ["<job_id>"](使用任务自身的 ID),以便每次运行都能接收上一次的摘要。在提示词中添加:“查看上一份摘要输出(作为上下文提供)。不要包含任何已经出现过的文章——根据标题相似度匹配,而非要求字符串完全一致。”

调整频率:

  • 高信息量主题:每天或每 2~3 天
  • 中等信息量主题:每周
  • 小众/低活跃度主题:每两周一次(每月 1 日和 15 日)——这样可以积累更多内容并减少重复

来源选择参考

香港来源

英文: SCMP、The Standard HK、Hong Kong Business、Mingtiandi、Colliers/JLL/CBRE/Savills 的研究报告、ResearchAndMarkets

中文(繁体): HK01、香港經濟日報 HKET、明報 Ming Pao、文匯報 Wen Wei Po、東方日報 on.cc、Now財經、信報 HKEJ、香港商報

行业专项: PBSA News、Global Student Living、Centurion 公告(在 SGX 上市的 PBSA REIT)

注意事项

  • 摘要中没有日期 = 拒绝。 用户明确要求每条内容都标注发布日期。
  • 过时文章 = 拒绝。 严格按照该领域的变化速度筛选——标记或排除已超出相关时效窗口的文章。
  • 过度概括。 用户要的是标题 + 1-2 行,而不是一段分析。
  • 条目过多。 用户默认最多要 5 条。减少更新频率,不要用过时内容凑数。
  • 缺少本地语言来源。 本地语言媒体往往最先报道新闻。务必同时使用英语和当地的本地语言进行搜索。
  • 不要承诺可访问封闭生态系统平台。 小红书、抖音、微信公众号都只能在应用内访问。请如实说明。
  • Google News RSS 链接无法解析。 切勿包含 news.google.com/rss/articles/CBMi... URL。请先解析出发布方的直达 URL。
  • 输出重复——摘要被渲染两次。 有些模型会在“思考”期间写出完整摘要,然后再次输出。解决方法:添加“OUTPUT DISCIPLINE: Output EXACTLY ONE copy.”,并指定首尾行锚点。
  • 输出语言漂移。 技能中包含本地语言搜索查询(输入内容)。多语言模型可能会将其理解为使用该语言输出的信号。务必明确指定输出语言——在提示词的开头和结尾都加以说明。
  • “必须包含”的 RSS 来源被发现结果挤占。 使用配额(例如,5 条发现结果 + 5 条 RSS),或确保每个必须包含的来源至少占有一定名额。
  • WhatsApp 定时任务投递需要明确指定目标。 deliver=whatsapp 会失败。请使用 deliver=whatsapp:<HANDLE> 或明确的聊天 ID。
  • 使用 web 工具集的 delegate_task 不适合搜索密集型任务。 请直接执行搜索并自行解析结果。
  • SearXNG 地址已更改。 如果 NAS IP 发生变化,请更新 ~/.hermes/.env 中的 SEARXNG_URL,以及主题参考文件中的 curl 命令。
  • DDGS 已安装在 Hermes venv 中。 无需使用 PYTHONPATH 变通方法——可直接使用 ddgs CLI 和 from ddgs import DDGS。不要使用 /root/.hermes/ddgs_lib 或 /opt/hermes/.venv/bin/python 等过时路径。

参考文件

  • references/web-search-fallback.md — Hermes 网络搜索后端的分发机制、当前配置(SearXNG → DDGS 回退)、运行时回退补丁详情,以及环境变量验证技巧。调试搜索问题时加载。
  • references/pbsa-hk-search-config.md — PBSA Hong Kong 专用配置:搜索查询、来源层级、关键主题和投递配置。运行 PBSA HK 监测扫描时加载。
  • references/selfhosting-digest-config.md — 自托管与家庭实验室摘要配置:搜索查询、必须跟踪的 RSS 来源和投递配置。运行 Self-Hosting 周报时加载。

评估

evals/routing-fixtures.json 存放轻量级契约测试样例——示例请求 → 预期路由(包括请求应转到 deep-research 或 youtube-topic-research 的情况)、摘要输出必需字段,以及禁止的输出模式。这些是规范,不会针对在线模型运行;仓库根目录中的 tests/test_routing_fixtures.py 会验证它们格式正确,并且指向真实技能。

评论

支持 Markdown