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的工作流程像一条精密的新闻生产线:
并发抓取层:使用Bun运行时的原生fetch并发请求90个RSS源(10路并发,15秒超时),兼容RSS 2.0和Atom格式。我测试发现其成功率保持在98%以上,远超普通爬虫。
时间过滤层:按用户设定的时间窗口(默认48小时)筛选文章。这里有个细节优化——它会优先保留各来源评分历史高的作者文章,这在跟踪Karpathy等大牛动态时特别实用。
AI评分层:调用Gemini或OpenAI兼容API执行以下任务:
// 简化版的评分prompt示例 const ratingPrompt = ` 请从以下维度给这篇文章评分(1-10分): - 相关性:与AI/编程/安全领域的关联程度 - 质量:论证严谨性、数据支持度 - 时效性:内容新颖度 同时提取3-5个关键词,并归类到[AI/ML,安全,工程,工具/开源,观点/杂谈,其他]`摘要生成层:为TOP15文章生成包含四个要素的摘要:
- 问题背景
- 核心方法
- 关键数据
- 实践建议 这种结构比常见的单句摘要实用得多,我经常直接把这些摘要粘贴到工作周报中。
趋势归纳层:分析所有高分文章的共性,生成类似"最近三天LLM推理优化方向出现三个新方法..."的宏观观察。这部分结果的质量取决于prompt设计,项目默认的prompt模板经过多次迭代,准确率能达到80%左右。
2.2 智能分类系统
不同于传统标签系统,这个工具采用动态分类策略。AI会根据文章内容将其归入6大类,且允许一篇文章属于多个类别。实际使用中,这个功能极大提升了浏览效率——当我想找具体的工程实践时,直接查看"⚙️ 工程"分类,避免了在混合信息流中大海捞针。
分类算法有个隐藏优势:会结合文章来源的历史数据进行校正。例如来自krebsonsecurity.com的文章会自动获得"🔒 安全"分类的初始权重,这减少了误分类的概率。我在三个月使用中,分类准确率始终保持在90%以上。
3. 从安装到实战的完整指南
3.1 环境准备避坑要点
虽然README写的很简单,但实际部署时有几个关键细节:
Bun运行时选择:建议用
npx -y bun@1.0.4指定版本,最新版可能存在兼容性问题。我在M1 Mac和Windows WSL2上都测试通过,但Windows原生环境需要额外安装VC++运行库。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提供商支持的模型名一致网络问题解决方案:
- 遇到ETIMEDOUT错误时,在
scripts/digest.ts第42行附近添加:const controller = new AbortController(); setTimeout(() => controller.abort(), 15000); // 超时从15秒延长到30秒 - 对于国内用户,建议在GitHub Codespaces中运行,速度比本地更快
- 遇到ETIMEDOUT错误时,在
3.2 日常使用进阶技巧
个性化过滤规则: 修改
scripts/digest.ts中的filterArticles函数,可以添加自定义规则。例如我只想看与LLM相关的文章:function filterArticles(articles) { return articles.filter(article => article.keywords.some(kw => ['llm', '大模型', 'transformer'].includes(kw.toLowerCase()) ) || article.score >= 8 ); }自动发送到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与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为例:
修改API端点(约第9行):
const GEMINI_API_URL = 'https://api.deepseek.com/v1/chat/completions';调整请求体格式(约第363行):
const body = { model: process.env.OPENAI_MODEL || 'deepseek-chat', messages: [{ role: 'user', content: prompt }], temperature: 0.7 };更新响应处理:
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个源可能不够全面,添加新源需要两步:
在
scripts/digest.ts的RSS_FEEDS数组中新增:{ url: 'https://example.com/feed.xml', name: 'Example Blog', category: 'engineering', // 预分类提示 weight: 0.8 // 初始评分权重 }调整评分prompt(约第120行):
const ratingPrompt = `...特别注意${feed.name}来源的文章通常关注${feed.category}领域...`;
我新增了3个中文AI博客后,发现日报的本地化程度显著提升。但要注意平衡中英文源比例,建议维持在3:7左右。
4.3 输出格式定制
日报的Markdown模板在generateReport函数中定义。可以修改以下部分:
调整趋势总结长度:
const trendPrompt = `用${lang === 'zh' ? '3' : '5'}句话总结技术趋势...`;添加个人水印:
report += `\n> 生成于 ${new Date().toLocaleString()} | 由@你的名字定制\n`;改变可视化样式:
// 替换默认的Mermaid饼图为更详细的柱状图 report += `\n\`\`\`mermaid barChart title 文章分类分布 x-axis 分类 y-axis 数量 bar "AI/ML" : ${stats.categories['ai-ml']} bar "安全" : ${stats.categories['security']} \`\`\`\n`;
经过三个月的使用和定制,这个Skill已经成为我技术信息获取的核心渠道。它最大的价值不在于节省时间,而是通过AI的筛选和重组,让我接触到原本可能错过的关键信息。上周通过日报发现的一篇冷门博客,直接解决了我们团队在模型量化中的精度损失问题。这种意外之喜,是传统信息获取方式很难提供的。
