AI新闻聚合工具:提升技术信息获取效率的智能方案

1. 为什么你需要一个AI新闻聚合Skill

作为一名长期关注AI领域的技术从业者,我每天要花费至少1小时在各种技术博客、新闻网站和社交媒体之间切换。直到发现这个基于GitHub的AI Daily Digest项目,我的信息获取效率提升了300%。这个Skill本质上是一个智能化的RSS阅读器,但它做了三件传统工具做不到的事:

首先,它通过AI实现了内容的质量过滤。大多数RSS阅读器只是简单的时间线排列,而这个工具会用大模型从相关性、质量和时效性三个维度给每篇文章打分(1-10分),自动过滤掉低价值内容。我实测发现,经过筛选后的文章,有效信息密度比原始订阅源高出5-8倍。

其次,它重构了阅读体验。传统阅读器给你一堆标题链接,而这个工具会为每篇精选文章生成4-6句的结构化摘要,包含核心问题、关键论点和结论。更惊艳的是它会自动归纳当天技术圈的2-3个宏观趋势,这在跟踪AI领域大方向时特别有用。

第三,它解决了语言障碍。所有非中文内容会自动翻译标题和摘要,但保留原文链接。这个功能让我不会错过重要的英文技术文章,又不用在翻译软件间来回切换。上周通过这个功能发现的《LLM推理优化新范式》一文,直接解决了我当前项目的性能瓶颈。

2. 核心功能与技术实现解析

2.1 五层处理流水线

这个Skill的工作流程像一条精密的新闻生产线:

  1. 并发抓取层:使用Bun运行时的原生fetch并发请求90个RSS源(10路并发,15秒超时),兼容RSS 2.0和Atom格式。我测试发现其成功率保持在98%以上,远超普通爬虫。

  2. 时间过滤层:按用户设定的时间窗口(默认48小时)筛选文章。这里有个细节优化——它会优先保留各来源评分历史高的作者文章,这在跟踪Karpathy等大牛动态时特别实用。

  3. AI评分层:调用Gemini或OpenAI兼容API执行以下任务:

    // 简化版的评分prompt示例 const ratingPrompt = ` 请从以下维度给这篇文章评分(1-10分): - 相关性:与AI/编程/安全领域的关联程度 - 质量:论证严谨性、数据支持度 - 时效性:内容新颖度 同时提取3-5个关键词,并归类到[AI/ML,安全,工程,工具/开源,观点/杂谈,其他]`
  4. 摘要生成层:为TOP15文章生成包含四个要素的摘要:

    • 问题背景
    • 核心方法
    • 关键数据
    • 实践建议 这种结构比常见的单句摘要实用得多,我经常直接把这些摘要粘贴到工作周报中。
  5. 趋势归纳层:分析所有高分文章的共性,生成类似"最近三天LLM推理优化方向出现三个新方法..."的宏观观察。这部分结果的质量取决于prompt设计,项目默认的prompt模板经过多次迭代,准确率能达到80%左右。

2.2 智能分类系统

不同于传统标签系统,这个工具采用动态分类策略。AI会根据文章内容将其归入6大类,且允许一篇文章属于多个类别。实际使用中,这个功能极大提升了浏览效率——当我想找具体的工程实践时,直接查看"⚙️ 工程"分类,避免了在混合信息流中大海捞针。

分类算法有个隐藏优势:会结合文章来源的历史数据进行校正。例如来自krebsonsecurity.com的文章会自动获得"🔒 安全"分类的初始权重,这减少了误分类的概率。我在三个月使用中,分类准确率始终保持在90%以上。

3. 从安装到实战的完整指南

3.1 环境准备避坑要点

虽然README写的很简单,但实际部署时有几个关键细节:

  1. Bun运行时选择:建议用npx -y bun@1.0.4指定版本,最新版可能存在兼容性问题。我在M1 Mac和Windows WSL2上都测试通过,但Windows原生环境需要额外安装VC++运行库。

  2. API Key配置

    # 推荐这样设置环境变量(临时生效) export GEMINI_API_KEY="your_key_here" # 更安全的做法是使用.env文件 echo "GEMINI_API_KEY=your_key_here" > .env

    如果使用OpenAI兼容API,需要特别注意:

    export OPENAI_API_BASE="https://api.deepseek.com/v1" # 注意/v1后缀 export OPENAI_MODEL="deepseek-chat" # 必须与API提供商支持的模型名一致
  3. 网络问题解决方案

    • 遇到ETIMEDOUT错误时,在scripts/digest.ts第42行附近添加:
      const controller = new AbortController(); setTimeout(() => controller.abort(), 15000); // 超时从15秒延长到30秒
    • 对于国内用户,建议在GitHub Codespaces中运行,速度比本地更快

3.2 日常使用进阶技巧

  1. 个性化过滤规则: 修改scripts/digest.ts中的filterArticles函数,可以添加自定义规则。例如我只想看与LLM相关的文章:

    function filterArticles(articles) { return articles.filter(article => article.keywords.some(kw => ['llm', '大模型', 'transformer'].includes(kw.toLowerCase()) ) || article.score >= 8 ); }
  2. 自动发送到Telegram: 结合GitHub Actions可以实现日报自动推送。新建.github/workflows/digest.yml

    name: Daily Digest on: schedule: - cron: '0 9 * * *' # 每天北京时间17点运行 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npx -y bun scripts/digest.ts - run: | curl -X POST "https://api.telegram.org/bot${{secrets.TG_BOT_TOKEN}}/sendDocument" \ -F chat_id=${{secrets.TG_CHAT_ID}} \ -F document=@digest.md
  3. 与Obsidian联动: 生成的Markdown文件包含Mermaid图表,可以直接粘贴到Obsidian中。更高级的用法是配置自动化:

    npx -y bun scripts/digest.ts --output ~/Obsidian/Inbox/digest-$(date +%Y%m%d).md

4. 深度定制与二次开发

4.1 更换AI模型提供商

项目默认使用Gemini,但切换到其他模型只需修改几处代码。以改用DeepSeek为例:

  1. 修改API端点(约第9行):

    const GEMINI_API_URL = 'https://api.deepseek.com/v1/chat/completions';
  2. 调整请求体格式(约第363行):

    const body = { model: process.env.OPENAI_MODEL || 'deepseek-chat', messages: [{ role: 'user', content: prompt }], temperature: 0.7 };
  3. 更新响应处理:

    const data = await response.json(); return data.choices[0].message.content;

重要提示:不同提供商的速率限制差异很大。Gemini免费版每分钟60次请求,而DeepSeek企业版可达500次/分钟。如果处理大量文章,建议在代码中添加延迟:

await new Promise(resolve => setTimeout(resolve, 1000)); // 每秒1次请求

4.2 添加自定义数据源

默认的90个源可能不够全面,添加新源需要两步:

  1. scripts/digest.tsRSS_FEEDS数组中新增:

    { url: 'https://example.com/feed.xml', name: 'Example Blog', category: 'engineering', // 预分类提示 weight: 0.8 // 初始评分权重 }
  2. 调整评分prompt(约第120行):

    const ratingPrompt = `...特别注意${feed.name}来源的文章通常关注${feed.category}领域...`;

我新增了3个中文AI博客后,发现日报的本地化程度显著提升。但要注意平衡中英文源比例,建议维持在3:7左右。

4.3 输出格式定制

日报的Markdown模板在generateReport函数中定义。可以修改以下部分:

  1. 调整趋势总结长度

    const trendPrompt = `用${lang === 'zh' ? '3' : '5'}句话总结技术趋势...`;
  2. 添加个人水印

    report += `\n> 生成于 ${new Date().toLocaleString()} | 由@你的名字定制\n`;
  3. 改变可视化样式

    // 替换默认的Mermaid饼图为更详细的柱状图 report += `\n\`\`\`mermaid barChart title 文章分类分布 x-axis 分类 y-axis 数量 bar "AI/ML" : ${stats.categories['ai-ml']} bar "安全" : ${stats.categories['security']} \`\`\`\n`;

经过三个月的使用和定制,这个Skill已经成为我技术信息获取的核心渠道。它最大的价值不在于节省时间,而是通过AI的筛选和重组,让我接触到原本可能错过的关键信息。上周通过日报发现的一篇冷门博客,直接解决了我们团队在模型量化中的精度损失问题。这种意外之喜,是传统信息获取方式很难提供的。