网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

tech-news-digest技能使用说明

2026-03-27 新闻来源:网淘吧 围观:20
电脑广告
手机广告

科技新闻摘要

一个自动化的科技新闻摘要系统,包含统一的数据源模型、质量评分流水线和基于模板的输出生成。

快速开始

  1. 配置设置:默认配置位于config/defaults/。复制到工作空间以进行自定义:

    mkdir -p workspace/config
    cp config/defaults/sources.json workspace/config/tech-news-digest-sources.json
    cp config/defaults/topics.json workspace/config/tech-news-digest-topics.json
    
  2. 环境变量

    • TWITTERAPI_IO_KEY- twitterapi.io API 密钥(可选,首选)
    • X_BEARER_TOKEN- Twitter/X 官方 API 承载令牌(可选,备用)
    • TAVILY_API_KEY- Tavily 搜索 API 密钥,可作为 Brave 的替代方案(可选)
    • WEB_SEARCH_BACKEND- 网络搜索后端:auto|brave|tavily(可选,默认值:auto)
    • BRAVE_API_KEYS- Brave 搜索 API 密钥,用逗号分隔以便轮换使用(可选)
    • BRAVE_API_KEY- 单一Brave密钥回退机制(可选)
    • GITHUB_TOKEN- GitHub个人访问令牌(可选,可提升速率限制)
  3. 生成摘要

    # Unified pipeline (recommended) — runs all 6 sources in parallel + merge
    python3 scripts/run-pipeline.py \
      --defaults config/defaults \
      --config workspace/config \
      --hours 48 --freshness pd \
      --archive-dir workspace/archive/tech-news-digest/ \
      --output /tmp/td-merged.json --verbose --force
    
  4. 使用模板:将Discord、电子邮件或PDF模板应用于合并后的输出

配置文件

sources.json- 统一数据源

{
  "sources": [
    {
      "id": "openai-rss",
      "type": "rss",
      "name": "OpenAI Blog",
      "url": "https://openai.com/blog/rss.xml",
      "enabled": true,
      "priority": true,
      "topics": ["llm", "ai-agent"],
      "note": "Official OpenAI updates"
    },
    {
      "id": "sama-twitter",
      "type": "twitter", 
      "name": "Sam Altman",
      "handle": "sama",
      "enabled": true,
      "priority": true,
      "topics": ["llm", "frontier-tech"],
      "note": "OpenAI CEO"
    }
  ]
}

topics.json- 增强型主题定义

{
  "topics": [
    {
      "id": "llm",
      "emoji": "🧠",
      "label": "LLM / Large Models",
      "description": "Large Language Models, foundation models, breakthroughs",
      "search": {
        "queries": ["LLM latest news", "large language model breakthroughs"],
        "must_include": ["LLM", "large language model", "foundation model"],
        "exclude": ["tutorial", "beginner guide"]
      },
      "display": {
        "max_items": 8,
        "style": "detailed"
      }
    }
  ]
}

脚本管道

run-pipeline.py- 统一管道(推荐)

python3 scripts/run-pipeline.py \
  --defaults config/defaults [--config CONFIG_DIR] \
  --hours 48 --freshness pd \
  --archive-dir workspace/archive/tech-news-digest/ \
  --output /tmp/td-merged.json --verbose --force
  • 特性:并行运行全部6个抓取步骤,随后进行合并、去重和评分
  • 输出:最终合并的JSON,可用于报告生成(总计约30秒)
  • 元数据:将各步骤的时间统计和计数信息保存至*.meta.json
  • GitHub 认证:如果未设置$GITHUB_TOKEN则自动生成 GitHub App 令牌
  • 备选方案:如果上述方法失败,请运行下方的独立脚本

独立脚本(备选方案)

fetch-rss.py- RSS 源抓取器

python3 scripts/fetch-rss.py [--defaults DIR] [--config DIR] [--hours 48] [--output FILE] [--verbose]
  • 并行抓取(10个工作线程),带退避重试,feedparser + 正则表达式备选方案
  • 超时:每个源30秒,ETag/Last-Modified缓存

fetch-twitter.py- Twitter/X KOL 监控器

python3 scripts/fetch-twitter.py [--defaults DIR] [--config DIR] [--hours 48] [--output FILE] [--backend auto|official|twitterapiio]
  • 后端自动检测:如果设置了TWITTERAPI_IO_KEY则使用 twitterapi.io,否则如果设置了X_BEARER_TOKEN则使用官方 X API v2
  • 速率限制处理,互动指标,带退避重试

fetch-web.py- 网络搜索引擎

python3 scripts/fetch-web.py [--defaults DIR] [--config DIR] [--freshness pd] [--output FILE]
  • 自动检测Brave API速率限制:付费计划→并行查询,免费→顺序查询
  • 无API时:为智能体生成搜索界面

fetch-github.py- GitHub版本发布监控器

python3 scripts/fetch-github.py [--defaults DIR] [--config DIR] [--hours 168] [--output FILE]
  • 并行获取(10个工作线程),30秒超时
  • 认证优先级:$GITHUB_TOKEN→ GitHub应用自动生成 →gh命令行界面→未认证(60次请求/小时)

fetch-github.py --trending- GitHub热门仓库

python3 scripts/fetch-github.py --trending [--hours 48] [--output FILE] [--verbose]
  • 在GitHub API中搜索4个主题(LLM、AI智能体、加密、前沿科技)的热门仓库
  • 质量评分:基础5分 + 预估每日星标数 / 10,最高15分

fetch-reddit.py- Reddit帖子获取器

python3 scripts/fetch-reddit.py [--defaults DIR] [--config DIR] [--hours 48] [--output FILE]
  • 并行获取(4个工作线程),公共JSON API(无需认证)
  • 13个子版块,带评分过滤

enrich-articles.py- 文章全文增强器

python3 scripts/enrich-articles.py --input merged.json --output enriched.json [--min-score 10] [--max-articles 15] [--verbose]
  • 获取高分文章的完整正文
  • Cloudflare Markdown for Agents(首选)→ HTML提取(备用)→ 跳过(付费墙/社交内容)
  • 博客域名白名单,采用较低分数阈值(≥3)
  • 并行获取(5个工作进程,10秒超时)

merge-sources.py- 质量评分与去重

python3 scripts/merge-sources.py --rss FILE --twitter FILE --web FILE --github FILE --reddit FILE
  • 质量评分,标题相似度去重(85%),对先前摘要内容进行惩罚性扣分
  • 输出:按主题分组并按分数排序的文章

validate-config.py- 配置验证器

python3 scripts/validate-config.py [--defaults DIR] [--config DIR] [--verbose]
  • JSON模式验证,主题引用检查,重复ID检测

generate-pdf.py- PDF报告生成器

python3 scripts/generate-pdf.py --input report.md --output digest.pdf [--verbose]
  • 将Markdown摘要转换为带中文字体排版(Noto Sans CJK SC)的A4样式PDF
  • 表情符号图标,页眉/页脚,蓝色强调主题。需要weasyprint

sanitize-html.py- 安全的HTML邮件转换器

python3 scripts/sanitize-html.py --input report.md --output email.html [--verbose]
  • 将Markdown转换为内联CSS的XSS安全HTML邮件
  • URL白名单(仅限http/https),HTML转义的文本内容

source-health.py- 数据源健康监控

python3 scripts/source-health.py --rss FILE --twitter FILE --github FILE --reddit FILE --web FILE [--verbose]
  • 追踪各数据源7天内的成功/失败历史
  • 报告异常数据源(失败率>50%)

summarize-merged.py- 合并数据摘要

python3 scripts/summarize-merged.py --input merged.json [--top N] [--topic TOPIC]
  • 为LLM使用提供人类可读的合并数据摘要
  • 显示每个主题下评分最高的文章及其指标

用户自定义

工作空间配置覆盖

将自定义配置置于workspace/config/目录以覆盖默认设置:

  • 数据源:添加新数据源,通过"enabled": false
  • 禁用默认数据源主题
  • :覆盖主题定义、搜索查询、显示设置具有相同
    • 标识符→ 用户版本优先具有新
    • 标识符→ 追加到默认值后具有相同
    • 标识符→ 用户版本完全替换默认版本工作区覆盖示例

模板与输出

// workspace/config/tech-news-digest-sources.json
{
  "sources": [
    {
      "id": "simonwillison-rss",
      "enabled": false,
      "note": "Disabled: too noisy for my use case"
    },
    {
      "id": "my-custom-blog", 
      "type": "rss",
      "name": "My Custom Tech Blog",
      "url": "https://myblog.com/rss",
      "enabled": true,
      "priority": true,
      "topics": ["frontier-tech"]
    }
  ]
}

Discord 模板 (

references/templates/discord.md)项目符号列表格式,支持链接抑制 (

  • <link>)移动端优化,包含表情符号标题
  • 注意 2000 字符限制
  • 电子邮件模板 (

references/templates/email.md)丰富的元数据、技术统计信息、存档链接

  • Rich metadata, technical stats, archive links
  • 执行摘要,热门文章版块
  • 兼容HTML的格式

PDF模板 (references/templates/pdf.md)

  • 采用A4版面,使用Noto Sans CJK SC字体以支持中文
  • 包含表情符号图标、带页码的页眉/页脚
  • 通过scripts/generate-pdf.py生成 (需要weasyprint)

默认来源(总计151个)

  • RSS订阅源(62个):人工智能实验室、科技博客、加密新闻、中文科技媒体
  • Twitter/X关键意见领袖(48个):人工智能研究员、加密领域领导者、科技公司高管
  • GitHub仓库(28个):主要开源项目(LangChain, vLLM, DeepSeek, Llama等)
  • Reddit(13个):r/MachineLearning, r/LocalLLaMA, r/CryptoCurrency, r/ChatGPT, r/OpenAI等
  • 网络搜索(4个主题):LLM,AI Agent,Crypto,前沿科技

所有来源均已预先配置了相应的主题标签和优先级。

依赖项

pip install -r requirements.txt

可选但推荐

  • feedparser>=6.0.0- 更好的RSS解析(如果不可用,则回退到正则表达式)
  • jsonschema>=4.0.0- 配置验证

所有脚本仅使用Python 3.8+的标准库即可运行。

监控与运维

健康检查

# Validate configuration
python3 scripts/validate-config.py --verbose

# Test RSS feeds
python3 scripts/fetch-rss.py --hours 1 --verbose

# Check Twitter API
python3 scripts/fetch-twitter.py --hours 1 --verbose

归档管理

  • 摘要自动归档至<工作空间>/archive/tech-news-digest/
  • 使用之前的摘要标题进行重复检测
  • 旧归档自动清理(90天以上)

错误处理

  • 网络故障:使用指数退避策略进行重试
  • 速率限制:通过适当的延迟自动重试
  • 内容无效:优雅降级,详细日志记录
  • 配置错误:使用有帮助信息的模式验证

API密钥与环境

设置在~/.zshenv或类似文件中:

# Twitter (at least one required for Twitter source)
export TWITTERAPI_IO_KEY="your_key"        # twitterapi.io key (preferred)
export X_BEARER_TOKEN="your_bearer_token"  # Official X API v2 (fallback)
export TWITTER_API_BACKEND="auto"          # auto|twitterapiio|official (default: auto)

# Web Search (optional, enables web search layer)
export WEB_SEARCH_BACKEND="auto"          # auto|brave|tavily (default: auto)
export TAVILY_API_KEY="tvly-xxx"           # Tavily Search API (free 1000/mo)

# Brave Search (alternative)
export BRAVE_API_KEYS="key1,key2,key3"     # Multiple keys, comma-separated rotation
export BRAVE_API_KEY="key1"                # Single key fallback
export BRAVE_PLAN="free"                   # Override rate limit detection: free|pro

# GitHub (optional, improves rate limits)
export GITHUB_TOKEN="ghp_xxx"              # PAT (simplest)
export GH_APP_ID="12345"                   # Or use GitHub App for auto-token
export GH_APP_INSTALL_ID="67890"
export GH_APP_KEY_FILE="/path/to/key.pem"
  • Twitter首选 TWITTERAPI_IO_KEY(每月3-5美元);X_BEARER_TOKEN作为备用;自动模式首先尝试twitterapiio网络搜索
  • :Tavily(自动模式首选)或Brave;可选,若不可用则回退至代理网络搜索GitHub
  • :如果未设置PAT,则从GitHub应用自动生成令牌;未认证回退(每小时60次请求)Reddit
  • Reddit无需API密钥(使用公共JSON API)

Cron/定时任务集成

OpenClaw Cron(推荐方案)

cron提示词应当避免硬编码流水线步骤。应引用references/digest-prompt.md并仅传递配置参数。这能确保流水线逻辑始终保留在技能仓库中,且在所有部署环境中保持一致。

每日摘要Cron提示词

Read <SKILL_DIR>/references/digest-prompt.md and follow the complete workflow to generate a daily digest.

Replace placeholders with:
- MODE = daily
- TIME_WINDOW = past 1-2 days
- FRESHNESS = pd
- RSS_HOURS = 48
- ITEMS_PER_SECTION = 3-5
- ENRICH = true
- BLOG_PICKS_COUNT = 3
- EXTRA_SECTIONS = (none)
- SUBJECT = Daily Tech Digest - YYYY-MM-DD
- WORKSPACE = <your workspace path>
- SKILL_DIR = <your skill install path>
- DISCORD_CHANNEL_ID = <your channel id>
- EMAIL = (optional)
- LANGUAGE = English
- TEMPLATE = discord

Follow every step in the prompt template strictly. Do not skip any steps.

每周摘要Cron提示词

Read <SKILL_DIR>/references/digest-prompt.md and follow the complete workflow to generate a weekly digest.

Replace placeholders with:
- MODE = weekly
- TIME_WINDOW = past 7 days
- FRESHNESS = pw
- RSS_HOURS = 168
- ITEMS_PER_SECTION = 10-15
- ENRICH = true
- BLOG_PICKS_COUNT = 3-5
- EXTRA_SECTIONS = 📊 Weekly Trend Summary (2-3 sentences summarizing macro trends)
- SUBJECT = Weekly Tech Digest - YYYY-MM-DD
- WORKSPACE = <your workspace path>
- SKILL_DIR = <your skill install path>
- DISCORD_CHANNEL_ID = <your channel id>
- EMAIL = (optional)
- LANGUAGE = English
- TEMPLATE = discord

Follow every step in the prompt template strictly. Do not skip any steps.

为何采用此模式?

  • 单一事实来源:流水线逻辑存在于digest-prompt.md中,而非分散在各cron配置里
  • 可移植性:相同技能部署于不同OpenClaw实例时,仅需修改路径和频道ID
  • 可维护性:更新技能→所有cron任务自动同步变更
  • 反模式切勿将流水线步骤复制到cron提示中——否则会导致不同步

多频道投递限制

OpenClaw强制实施跨供应商隔离:单个会话只能向一个供应商发送消息(例如,Discord 或 Telegram,不能同时发送)。如果您需要将摘要投递到多个平台,请为每个供应商创建独立的cron任务

# Job 1: Discord + Email
- DISCORD_CHANNEL_ID = <your-discord-channel-id>
- EMAIL = user@example.com
- TEMPLATE = discord

# Job 2: Telegram DM
- DISCORD_CHANNEL_ID = (none)
- EMAIL = (none)
- TEMPLATE = telegram

替换DISCORD_CHANNEL_ID在第二个任务的提示中,使用目标平台的投递方式。

这是一个安全特性,而非缺陷——旨在防止意外的跨上下文数据泄露。

安全说明

执行模型

此技能采用提示模板模式:代理读取digest-prompt.md并遵循其指令。这是标准的OpenClaw技能执行模型——代理程序解析来自技能文件的结构化指令。所有指令都随技能包一同发布,可在安装前进行审核。

网络访问

Python脚本会向以下地址发起出站请求:

  • RSS源URL(在tech-news-digest-sources.json文件中配置
  • Twitter/X API(api.x.comapi.twitterapi.io
  • Brave搜索API(api.search.brave.com
  • Tavily搜索API(api.tavily.com
  • GitHub API(api.github.com
  • Reddit JSON API(reddit.com

不会向任何其他端点发送数据。所有 API 密钥均从技能元数据中声明的环境变量中读取。

Shell 安全性

邮件发送使用send-email.py该脚本构建包含 HTML 正文和可选 PDF 附件的标准 MIME 多部分消息。主题格式为硬编码(每日技术摘要 - YYYY-MM-DD)。PDF 生成通过weasyprint使用generate-pdf.py脚本完成。提示模板明确禁止将不受信任的内容(文章标题、推文文本等)插入 Shell 参数。电子邮件地址和主题必须仅为静态占位符值。

文件访问

脚本从config/目录读取配置,并向workspace/archive/目录写入文件。不会访问工作区之外的文件。

支持与故障排除

常见问题

  1. RSS 源获取失败检查网络连接,使用--verbose以获取详细信息
  2. Twitter 速率限制:减少来源或增加间隔
  3. 配置错误:运行validate-config.py以查找具体问题
  4. 未找到文章:检查时间窗口(--hours)和来源启用状态

调试模式

所有脚本都支持--verbose标志,用于详细日志记录和故障排除。

性能调优

  • 并行工作器:根据您的系统调整脚本中的MAX_WORKERS 超时设置
  • :增加: Increase超时针对慢速网络
  • 文章限制:调整每个订阅源的最大文章数根据需求调整

安全考量

Shell执行

摘要提示指示代理通过shell命令运行Python脚本。所有脚本路径和参数都是技能定义的常量——没有用户输入被插入到命令中。有两个脚本使用了subprocess

  • run-pipeline.py协调子抓取脚本(所有脚本均在scripts/目录内)
  • fetch-github.py包含两个子进程调用:
    1. openssl dgst -sha256 -sign用于JWT签名(仅在设置了GH_APP_*环境变量时使用——对自构造的JWT载荷进行签名,不涉及用户内容)
    2. gh auth tokenCLI后备方案(仅在gh已安装的情况下——从gh自身的凭据存储中读取)

任何用户提供或获取的内容都绝不会被插入到子进程参数中。邮件发送使用send-email.py,它以编程方式构建MIME消息——无shell插值。PDF生成通过weasyprint使用generate-pdf.py完成。邮件主题仅为静态格式字符串——绝不从获取的数据中构建。

凭据与文件访问

脚本不会直接读取~/.config/~/.ssh/或任何凭据文件。所有API令牌均从技能元数据中声明的环境变量读取。GitHub身份验证的级联顺序为:

  1. $GITHUB_TOKEN环境变量(由您控制提供的内容)
  2. GitHub App 令牌生成(仅当您设置了GH_APP_IDGH_APP_INSTALL_IDGH_APP_KEY_FILE时使用——通过openssl命令行工具进行内联JWT签名,不涉及外部脚本)
  3. gh auth token命令行工具(委托给gh自身的安全凭据存储)
  4. 未验证身份(每小时60次请求,安全的回退方案)

如果您不希望自动发现凭据,只需设置$GITHUB_TOKEN,脚本将直接使用它,而不会尝试步骤2-3。

依赖安装

此技能不会安装任何软件包。requirements.txt列出了可选依赖项(feedparserjsonschema) 仅供参考。所有脚本均使用 Python 3.8+ 标准库运行。如有需要,用户应在虚拟环境中安装可选依赖项——此功能永远不会运行pip install

输入净化

  • URL解析会拒绝非HTTP(S)协议(如javascript:、data:等)
  • RSS备用解析使用简单、非回溯的正则表达式模式(无ReDoS风险)
  • 所有获取的内容均被视为不可信数据,仅用于显示

网络访问

脚本会向配置的RSS源、Twitter API、GitHub API、Reddit JSON API、Brave搜索API和Tavily搜索API发起出站HTTP请求。不会创建入站连接或监听器。

天猫隐藏优惠券

网淘吧

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第292529名访客 今日有290篇新文章/评论