20Bytes Log
VLM ArXiv Daily TrackerBlur image

在AI领域,每天arXiv上都会涌现大量新论文。对于专注于特定方向的研究者来说, manually 浏览和筛选既耗时又低效。这篇文章将分享我搭建的一套自动化论文追踪系统的完整思路,希望能给有类似需求的同学一些参考。

项目动机#

在关注 Vision-Language-Action (VLA)、Vision-Language Navigation (VLN) 等具身智能方向时,我遇到了几个痛点:

  1. 信息过载:arXiv每天上新数百篇论文,手动筛选效率极低
  2. 语言障碍:英文标题和摘要阅读成本高,快速理解核心贡献需要时间
  3. 兴趣匹配:不同研究方向关注点不同,需要个性化过滤
  4. 知识管理:看过的论文容易遗忘,缺乏系统化的标记和回顾机制

基于这些需求,我设计并实现了一套自动化解决方案。

系统架构概览#

整个系统由三个核心模块组成:

模块功能技术方案
数据采集从arXiv抓取目标领域论文arxiv-python + 定时任务
内容处理翻译、格式化、去重DeepSeek API + 缓存机制
展示交互Web端展示与个性化标记GitHub Pages + localStorage
┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   arXiv     │────▶│   Python     │────▶│   GitHub    │
│   API       │     │   处理脚本   │     │   Pages     │
└─────────────┘     └──────────────┘     └─────────────┘
                           │                    │
                           ▼                    ▼
                    ┌──────────────┐     ┌─────────────┐
                    │  DeepSeek    │     │  用户标记   │
                    │  翻译服务    │     │  & 筛选    │
                    └──────────────┘     └─────────────┘
plaintext

核心实现细节#

1. 精准的关键词检索策略#

不同于简单的关键词匹配,系统支持多维度复合检索。以VLA领域为例:

keywords:
  "VLA":
    filters:
      - "Vision-Language-Action Model"
      - "Vision Language Action"
      - "VLA Model"
      - "RT-2"
      - "OpenVLA"
yaml

通过 OR 逻辑组合多个相关关键词,可以最大程度避免遗漏,同时通过分层配置支持多领域并行追踪。

2. 智能双语展示#

论文标题和摘要的翻译是提升阅读效率的关键。系统采用了以下策略:

翻译流程

  • 首次遇到论文时,调用大模型API进行翻译
  • 翻译结果缓存到本地JSON文件,避免重复调用
  • 增量更新机制,只处理新增论文

提示工程

system_prompt = (
    "Translate the paper title and abstract into Chinese. "
    "Return only JSON with keys: title_zh, abstract_zh."
)
python

这种结构化的翻译要求确保输出格式统一,便于后续处理。

3. HJFY集成:便捷的PDF访问#

系统集成了 HJFY 学术搜索服务,为每篇论文生成直接访问链接。这解决了arXiv访问不稳定的问题,提供了更流畅的PDF阅读体验。

4. Web端个性化标记#

在生成的GitHub Pages页面中,每篇论文都配有交互式评估按钮:

  • 已读:标记已浏览过的论文
  • 跳过:不感兴趣,后续可过滤
  • 收藏:重要论文,需要深度阅读

技术实现

// 使用localStorage保存用户标记
const storageKey = (id) => `vlm_arxiv_daily_eval:${id}`;
localStorage.setItem(storageKey(arxivId), evaluation);
javascript

这种设计的好处是:

  • 无需后端服务器,纯前端实现
  • 用户数据保存在本地,隐私安全
  • 跨会话持久化,刷新不丢失

5. 摘要独立页面#

为了提供更好的阅读体验,系统为每篇论文生成独立的摘要页面:

  • 中英文摘要对照展示
  • 简洁的排版设计
  • 一键返回主列表

这些页面通过脚本自动生成,维护成本极低。

自动化运维#

GitHub Actions 定时任务#

利用GitHub Actions实现每日自动更新:

on:
  schedule:
    - cron: '0 1 * * *'  # 每天凌晨1点执行
  workflow_dispatch:     # 支持手动触发

jobs:
  update-papers:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run crawler
        run: python daily_arxiv.py
      - name: Commit changes
        run: |
          git add .
          git commit -m "Update daily papers"
          git push
yaml

增量更新机制#

为了避免重复处理,系统实现了多层缓存:

  1. 翻译缓存:已翻译的论文ID和结果
  2. 论文数据缓存:arXiv元数据
  3. 摘要缓存:英文原文存储

这种设计使得每日更新通常在几秒内完成,API调用成本也大幅降低。

技术亮点与优化#

1. 优雅的错误处理#

网络请求和API调用都有完善的异常处理:

try:
    resp = requests.post(url, headers=headers, json=payload, timeout=60)
    resp.raise_for_status()
except Exception as exc:
    logging.warning(f"Translation failed: {exc}")
    return {}
python

2. Markdown到HTML的灵活转换#

系统支持生成多种输出格式:

  • README.md:GitHub仓库展示
  • docs/index.html:GitHub Pages交互式页面
  • docs/wechat.md:微信公众号文章格式

通过配置灵活切换,一份代码满足多平台需求。

3. 数学公式排版优化#

针对论文标题中常见的LaTeX数学公式,实现了简单的格式化:

def pretty_math(s: str) -> str:
    # 处理 $...$ 格式的行内公式
    match = re.search(r"\$.*\$", s)
    if match:
        # 添加适当的空格,提升渲染效果
        ...
python

实际效果#

经过几个月的运行,这套系统带来了显著的效率提升:

  • 时间节省:从每天30-40分钟的浏览筛选,缩短到5分钟快速浏览
  • 信息完整:双语展示降低了理解门槛
  • 知识沉淀:通过标记系统建立了个人论文库
  • 社区价值:开源后帮助了同领域的研究者

扩展思路#

这个系统的架构可以很容易地扩展到其他场景:

  1. 多领域追踪:通过修改配置文件,可以追踪任意arXiv分类
  2. 邮件订阅:增加邮件推送功能,每日发送精选论文
  3. RSS输出:生成RSS feed,方便集成到阅读器
  4. 协作标记:结合后端数据库,实现团队共享的论文库

总结#

这套系统的核心思想是:自动化处理重复性工作,保留人的判断和决策。技术本身并不复杂,关键在于:

  • 清晰定义需求,解决真实痛点
  • 合理选择技术方案,避免过度工程化
  • 注重用户体验,降低使用门槛
  • 保持可扩展性,预留迭代空间

对于研究者来说,工具的价值不在于功能多复杂,而在于能否真正提升工作效率。希望这篇文章能给正在考虑搭建类似系统的同学一些启发。

致谢#

本项目基于 cv-arxiv-daily 二次开发,在此感谢原作者 @Vincentqyw 的开源贡献。同时也要感谢 HJFY 提供的学术搜索服务,让论文PDF访问更加便捷。

开源社区的力量让这些工具不断完善,如果你也从中受益,欢迎star和支持相关项目。

参考资源#

构建个人学术追踪系统:自动化 arXiv 论文监控实践
https://20bytes.github.io/blog/arxiv-reader
Author 昙柏
Published at April 11, 2026