利用 SKILL让 Agent 自动筛选 & 解读 Huggingface 的每日论文

面向大模型领域研究者的每日论文筛选工具

English 中文

SKILL WebSite

起因

作为研究生,我们每天都要读很多论文。但除了读论文本身,挑选论文同样很耗费时间和精力

能帮忙分析论文的软件其实不少,比如:

  1. AlphaXiv:可以非常系统地精读某一篇论文。
  2. papers.cool:由苏神开发,每天爬取 arXiv 新论文,用 Kimi 给出中文解读,并支持在 Kimi 里继续追问、深入分析。

尽管这些工具在论文解读上做得很深入,但它们有一个共同的缺点:没有起到筛选的作用。它们能把某一篇论文读得很细,可“从每天几十篇里挑出值得读的”仍然得我自己来做,它们也不会帮我打标签。此外,更麻烦的是,即便发现一篇不错的论文、想 follow 它的工作,也常常会发现它的 GitHub repo 是空的,甚至根本没有链接,最后白忙活一场。

这样的沉没成本其实很高:follow 一篇论文,可能写了很久的代码,最后才发现某个输入对不上,或者某一步根本复现不了。

所以我想把这个工具做得真正有用、能投入真正使用,可以把时间花在有意义的工作上。

思路

需求

具体来说,我希望它能帮我筛选每天 HuggingFace Daily Papers 里的论文,并且能按分类整理好。

Hugginface daily paper中的论文是论文作者自主上传的,这种积极性使得相比于arXiv,daily paper中的论文的完善度、可信度和质量更高

这个产品要做两件事:

  1. 自动分类:为每篇论文打上标签。
  2. 验证论文的真实性,以及“容易 follow”的程度
  3. 自动生成论文摘要(类似于papers.cool

其中“容易 follow”,定义为:

  • (a) 论文应该对应有 GitHub 的 repo;
  • (b) repo 里的代码必须是完善的——比如有些 repo 里只有一个 README,由于难以复现,因此应该被排除;
  • (c) 数据集等资源也应是开源的。

HuggingFace Daily Papers 每日列表
HuggingFace Daily Papers:每天几十篇论文需要我们自己点进去逐个挑选

Tex源码 or PDF

关于论文分析的真实性和技术实现,我有两点考虑:

  1. 真实性:论文发表的单位应当是frontier的高校/机构
  2. 流程:为了便于分析,应该让 Agent 直接读取论文的 tex 源码,而不是PDF。

之所以不建议读 PDF,是因为 PDF 在解析时容易出现各种问题,而且也难以进行字符串匹配(比如要在正文里找 github.com/ 这样的链接)。


实现

先Python初筛,再交给 Agent 自主执行

我希望它每天自动爬取,让我无感地拿到当天的论文。整体分两步:先用 Python 脚本初筛,再交给 Agent 做判断和整理

对于初筛,HuggingFace 有公开接口,按日期就能取到当天列表,所以我写了个零依赖脚本 fetch_hf_papers.py,用关键词规则粗筛一遍:

# scripts/fetch_hf_papers.py —— 直接调用 HF 公开接口,无需 API Key
url = f"https://huggingface.co/api/daily_papers?date={date_str}"

# 标题命中这些关键词 → 排除
TITLE_EXCLUDE_KEYWORDS = [
    "benchmark", "benchmarking", "bench",
    "speech", "audio", "video", "3d",
    "compiler", "cuda", "kernel", "triton", "tpu", "xla",
    "quantization", "quantisation", "distillation",
]

# 摘要必须命中其一 → 确认是 LLM/VLM 领域
ABSTRACT_REQUIRE_ANY = [
    "large language model", "llm", "vision language model", "vlm",
    "multimodal", "reasoning", "reinforcement learning",
    "instruction tuning", "fine-tuning", "alignment", "agent",
    "chain-of-thought", "in-context learning",
]

只需纯标准库(urllib + json)就够,且不需要 API key。这一步可以把把几十篇筛选到十几篇,剩下的论文需要留给 Agent 来盘。

其次是对论文的判断&分析。 考虑到目前的模型已经可以很好的平衡指令遵循能力与成本,因此决定不做过多的harmness,而是全权交给Agent自主判断。 为此,我将需求写为 Skill


SKILL Pipline Design

SKILL将每篇候选论文分为三个步骤:

第一步,提取 GitHub 链接:优先用 HF 接口的 githubRepo 字段,如果此字段为空,就去 arXiv 的 tex 源码里检索 github.com/

第二步,调用 GitHub Contents API 验证仓库里有没有实质代码:

API: https://api.github.com/repos/{owner}/{repo}/contents

保留(满足其一):
  - 根目录有 .py / .sh / .ipynb 文件
  - 有 src / scripts / train / model / code 等目录

丢弃(命中其一):
  - 只有 README.md / LICENSE / assets 这类非代码文件
  - API 返回 404(仓库不存在或为空)
  - 仓库名 / 描述含 "coming-soon"

第三步,写一段一眼就能看懂的中文摘要,再从一套固定标签里打标签以便筛选:

RL · 微调 · 无需训练 · 长文本 · VLM · MeM(Agent记忆) · API · 扩散模型

最后落成一条 JSON:

{
  "date": "2026-03-12",
  "title": "Prism-Δ: Differential Subspace Steering for Prompt Highlighting in Large Language Models",
  "arxiv_id": "2603.10705",
  "github": "https://github.com/YuyaoGe/PRISM-DELTA",
  "abstract": "PRISM-Δ 是一种提示高亮方法,使 LLM 在生成时优先关注用户指定的文本片段。核心思路是分解正负交叉协方差矩阵的差值以最大化判别能量、消除共享方向,每个注意力头获得连续 softplus 重要性权重(弱但有用的头以降低强度贡献),并扩展到 Value 表示以捕获内容通道信号。在 4 个基准、5 个模型上,PRISM-Δ 在 20 个配置中的 19 个匹配或超越最佳现有方法,相对增益最高 +10.6%,流畅度损失减半,长文本检索场景相对增益最高 +4.8%。",
  "tags": ["无需训练"]
}

Harmness Engineering Design

有了SKILL接下来就是设计 Agent (或者是Subagent) 与 SKILL 的调用关系。

这里两个选择:

  • 主从调度:一个主 Agent 去调度多个子 Agent
  • 并行调度:每天各起一个独立 Agent

对于主从调度,我使用OpenClaw实现,最大subagent数设置为5。

然而经常出现超时的问题,具体而言,让claw调研某 10 天的论文,尽管它会起多个 sub-agent,但超时&超出上下文的问题频频出现,极不稳定。

因此,后来选择了后者的方案:每天一个独立 Agent 并行跑,各自写一个 JSON,最后用主程序合并。一天生成一个论文列表,事实证明,越简单越稳定。

并行用 xargs -P 就够:

# backfill_papers.sh —— 批量补录历史日期,默认并发 6
printf '%s\n' "${MISSING[@]}" \
  | xargs -P "$CONCURRENCY" -I{} bash "$SCRIPT_DIR/run_kimi_one_day.sh" {} "$PAPER_READER_DIR"

合并脚本 merge_batches.py 也只做确定的事:扫 paper_batches/*.json,跳过已有日期,按日期把缺的追加进去。

关于Agent框架的选择

选 Agent 有个硬条件:能在命令行非交互式启动,而不是用进入终端手动操作。

比如:

  • Cursor & Claude Code:需要进GUI界面或者终端操作
  • Kimi CLI:可以将 prompt 作为CLI启动命令中的一个形参,可以很方便的调用,而且KIMI价格便宜

所以对于每一天的处理就是一行命令:

# run_kimi_one_day.sh —— 用 Kimi CLI 处理单天,结果写入 batch JSON
kimi --print --quiet \
  --work-dir "$PAPER_READER_DIR" \
  --add-dir /Users/yuyaoge/Project/Paper_Agent_Skill \
  -p "$PROMPT" \
  > "$LOG_FILE" 2>&1

尽管如此,目前还是需要每天手动启动工作流,我们希望可以对于用户无感运行。因此,希望可以设置一个适配于Macos的自动启动脚本。

在Macos上的自动启动脚本

自动脚本用 macOS 的 launchd,配置 com.yuyaoge.paper-daily-fetch.plist

<!-- 登录 / load 时立即跑一次 -->
<key>RunAtLoad</key>
<true/>

<!-- 之后每 2 小时再跑一次 -->
<key>StartInterval</key>
<integer>7200</integer>

daily_fetch.sh 里有两个Feature值得一提:

  • 不处理今日论文:HuggingFace 在当天是会根据用户的上传而实时更新的,当天爬会漏掉当前时间点后面提交的论文。所以默认抓“昨天往前数 7 天”,而不包括当天的论文,顺便也补上关机那几天的论文。

  • 幂等:不应该每日定时启动,因此不确定所定的时间点是否已经开机。因此,设定为自开机后,每 2 小时跑一次,如果已有结果就跳过,但若是空结果先执行一次;如果git没变化就不 push。


Quick Start

环境要求:macOS、Python 3,以及已安装并登录的 Kimi CLI

1. 克隆仓库

git clone https://github.com/YuyaoGe/Paper_Agent_Skill.git   # Skill + 脚本
git clone https://github.com/YuyaoGe/paper_reader.git        # 数据 + 前端

2. 安装 Skill 到 Kimi

cd Paper_Agent_Skill
mkdir -p ~/.kimi/skills
ln -sfn "$PWD" ~/.kimi/skills/hf-paper-filter

3. 手动验证链路

# run_kimi_one_day.sh YYYY-MM-DD [paper_reader 路径]
./scripts/run_kimi_one_day.sh 2026-06-01 /path/to/paper_reader

4.(可选)批量补录历史区间

# backfill_papers.sh 起始日期 结束日期 [并发数] [paper_reader 路径]
./scripts/backfill_papers.sh 2026-04-25 2026-05-26 6 /path/to/paper_reader
python3 ./scripts/merge_batches.py /path/to/paper_reader

5. 安装定时任务,实现无人值守

cp scripts/com.yuyaoge.paper-daily-fetch.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/com.yuyaoge.paper-daily-fetch.plist

前端展示

最终列表汇总到 paper_list.md 中,以便于 Agent 可以很方便的在文件末尾追加,同时易于前端解析。

前端 设计为纯静态页面,运行时把 Markdown 拉下来解析成卡片,支持按标签筛、按日期检索:

// 前端运行时直接拉取 Markdown 数据源并解析
const resp = await fetch('paper_list.md');
// 每条格式:- **Title** `[Tag]` — [id](url) | [GitHub](url)
//           > 中文摘要
currentPapers.push({ title, tags, links, desc });

托管在 GitHub Pages,定时脚本每天把更新后的 paper_list.md push 到云端,页面同步更新。

paper_reader 界面
paper_reader:筛选、打标签、生成中文摘要后的样子,可以按标签筛选、按日期排序。

整体流程

综上,整条流程如下:

   macOS launchd ──▶ daily_fetch.sh (每 2h 触发,幂等)
                          │  按天拆分,并行
        run_kimi_one_day.sh × N  (xargs -P 6)
          └─ Kimi CLI 加载 hf-paper-filter Skill
             ├─ fetch_hf_papers.py  Python 初筛
             ├─ GitHub Contents API 验证有无代码
             └─ 写中文摘要 + 打标签
                          │  每天一个 JSON
              paper_batches/YYYY-MM-DD.json
                          │  merge_batches.py 合并
              paper_list.md ──git push──▶ GitHub Pages(前端 fetch 渲染)

用到的东西也都很常规:Python 标准库做初筛、Kimi CLI 做判断、xargs -P 并行、launchd 定时、一个 paper_list.md 当数据源、一个静态页面做展示。