paper-digest · git:20260721.f94abc2 · 2026-07-21 · sha256 e62bf7e77a22e887
paper-digest git:20260721.f94abc2A
Immutable. This exact content never changes and is served at /api/v1/blob/e62bf7e77a22e887.
---
name: paper-digest
description: >
当 Supervisor 给出论文或 blog 的 URL/标题/PDF/DOI,或阅读队列中有待处理条目时,消化内容并生成结构化笔记到 Papers/
argument-hint: "[arXiv URL / blog URL / PDF path / title / DOI]"
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, WebSearch, WebFetch
---
## Purpose
给定一篇论文或技术 blog 的来源(URL、PDF 路径、标题或 DOI),它自动获取内容、提炼核心信息,并按照 `Templates/Paper.md` 格式生成结构化笔记保存至 `Papers/`。
支持两种内容类型:
- **论文**:arXiv、PDF、DOI 等学术论文
- **Blog**:技术博客文章(如 Google Research Blog、Lilian Weng、公司技术博客等)
## Steps
### Step 1:获取论文内容
根据 `source` 的类型选择获取方式:
- **arXiv URL**(如 `https://arxiv.org/abs/2603.08127`):用 WebFetch 抓取该页面。若需要正文,同时抓取对应的 HTML 全文页(如 `https://arxiv.org/html/2603.08127`)。
- **CVF Open Access URL**(如 `https://openaccess.thecvf.com/content/CVPR2026/html/..._paper.html`):**全文** 走同名 PDF(把路径中的 `/html/` 换成 `/papers/`、`.html` 换成 `.pdf`,即 `.../content/CVPR2026/papers/..._paper.pdf`)。⚠️ **thecvf.com 对 WebFetch 的 UA 返回 403**,必须用 Bash + curl 带浏览器 UA 下载 PDF 再用 Read 读取:
```bash
curl -s --max-time 90 -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" \
-o /tmp/cvf_paper.pdf "<pdf_url>"
```
然后 `Read /tmp/cvf_paper.pdf`(>10 页需指定 `pages`)。abstract、作者等元数据可同样用 curl 抓 html 页解析(`id="abstract"` / `id="authors"`),或直接从 PDF 首页提取。`venue` 字段按 proceeding 填,如 `CVPR 2026`、`ICCV 2025`。CVF 论文 PDF 免费且完整,应获取全文而非停留在 abstract。若候选来自 daily-papers,其 `pdf_url` 字段已给出 PDF 直链。
- **PDF 路径**(如 `/path/to/paper.pdf`):用 Read 读取文件内容。
- **论文标题或关键词**:用 WebSearch 搜索(建议加上 `site:arxiv.org` 或 `filetype:pdf`),从结果中定位最可能的论文页面,再用 WebFetch 获取内容。
- **DOI**(如 `10.1145/...`):用 WebFetch 抓取 `https://doi.org/<DOI>`,跟随重定向到出版商页面。
- **Blog URL**(非 arXiv/DOI 的普通网页链接):用 WebFetch 抓取页面内容。从页面中提取作者、发布日期等元数据。
**网络兜底协议**:若 WebFetch / WebSearch 卡住、返回空内容、只拿到 abstract、或 arXiv / HuggingFace 页面无法完整读取,读取 `references/network-fetch-fallback.md` 并启用 Lexmount fallback。关键约束:
1. 不把 API key 写入笔记、日志、frontmatter 或可提交文件;只从 `LEXMOUNT_API_KEY` 或已被 `.gitignore` 忽略的 `.env` 读取。
2. arXiv 全文优先尝试 `https://arxiv.org/html/<arxiv_id>`,再尝试 `https://ar5iv.labs.arxiv.org/html/<arxiv_id>`;用:
```bash
python3 scripts/lexmount_fetch.py extract "<url>" --format markdown
```
3. 若 `extract` 结果仍不完整,再用 DOM dump 检查:
```bash
python3 scripts/lexmount_fetch.py dump "<url>" --engine lightmount_domstable --format text
```
4. HuggingFace papers / model / dataset 页面或动态页面卡顿时,先 `extract` 公共页面;仍失败再 `dump --engine chrome_cdp`。
5. Lexmount 也失败时,明确记录"未获取全文",不得补写正文细节。
从获取到的内容中提取以下元数据(如果全文无法获取,至少要获取 abstract):
| 字段 | 说明 |
| :------------- | :-------------------------------------- |
| `title` | 完整论文标题 |
| `authors` | 作者列表(字符串数组) |
| `institute` | 作者所属机构(字符串数组,从 affiliation 提取) |
| `date_publish` | 发表日期,格式 `YYYY-MM-DD`、`YYYY-MM` 或 `YYYY` |
| `venue` | 发表场所,如 `NeurIPS 2025`、`arXiv`;blog 填来源名如 `Google DeepMind Blog`、`Lilian Weng Blog` |
| `url` | 论文链接(优先用论文主页,无则用 arXiv abstract 页) |
| `arxiv_id` | arXiv id,如 `2606.19409`(非 arXiv 论文留空) |
| `doi` | DOI,如 `10.1109/TPAMI...`(期刊/会议有则填,否则留空) |
| `code` | GitHub 代码链接(若论文中提及) |
### Step 2:阅读并理解
**Read Critically**——论文不是圣经。找出隐含假设和适用边界,ablation、failure case、baseline 选择往往比 main result 更有信息量。对高引论文同样保持批判。
通读获取到的内容,重点提炼以下四个维度:
1. **Problem & Motivation**:作者要解决什么问题?现有方法有什么局限?为什么这个问题重要?
2. **Method**:核心方法/架构是什么?关键设计选择有哪些?用简洁的中文描述,保留必要的英文术语。对于 blog,此处提炼文章的核心论点或技术方案。
3. **Key Results**:主要实验结果是什么?在哪些 benchmark 上取得了什么指标?核心 takeaway 是什么?对于 blog,提炼关键结论、数据或 demo 效果。
4. **Strengths & Weaknesses**:方法的亮点与局限,以及对该领域的潜在影响。严格区分已知、推测、不知道——不 overclaim,不掩盖方法的局限。
如果只能获取 abstract 而非全文,在所有内容区块开头加注:`> [未获取全文,仅基于 abstract]`
### Step 3:确定文件名和 tags
**文件名格式**:`YYMM-ShortTitle.md`
- `YYMM`:取自 `date_publish` 的年份后两位 + 月份,如 `2603`(2026年3月)
- `ShortTitle`:标题的 CamelCase 缩写,2-4 个关键词,如 `EvoScientist`、`RoboClaw`、`DiffusionPolicy`
- Blog 同理,如一篇 2026 年 2 月的 blog 关于 scaling laws → `2602-ScalingLaws.md`
**去重检查**:用 Glob 扫描 `Papers/` 目录,检查是否已存在同名或同主题笔记(搜索标题关键词)。若发现重复,停止并告知 Human,不创建新文件。
**Tag 选择**:阅读 `references/tags.md`,按照规范选择 tag。
### Step 4:生成笔记
读取 `Templates/Paper.md`,按模板中的字段和 `%%` 注释指导填写所有内容。
补充规则(模板未涵盖的):
- **rating**:必填,按模板中的 1-5 分制评分,基于内容质量和与当前研究方向的相关性综合判断
- **未获取全文**:在受影响的章节开头加注 `> [未获取全文,仅基于 abstract]`,不得推测正文内容
- **date_added**:填写今天日期,格式 `YYYY-MM-DD`
### Step 5:保存并记录
1. **写入文件**:用 Write 将笔记保存到 `Papers/YYMM-ShortTitle.md`。
2. **YAML 前置校验**:写入后立即用 Bash 执行以下检查,确保 frontmatter 可被 Quartz 正确解析:
```bash
f="Papers/YYMM-ShortTitle.md"
# 检查 title 等字段值中含冒号但未加引号的情况
awk '/^---$/{n++; next} n==1 && /^[a-z_]+:/{print}' "$f" | while read -r line; do
value=$(echo "$line" | sed 's/^[a-z_]*: *//')
if echo "$value" | grep -q ':' && ! echo "$value" | grep -q '^"'; then
echo "YAML ERROR: unquoted colon in value: $line"
fi
done
```
若发现未加引号的字段,立即用 Edit 为该值加上双引号后重新检查。
3. **固化引用身份**:用 Bash 为该论文分配稳定 cite_key 并缓存权威 BibTeX:
```bash
python3 skills/4-writing/latex-citation-enhancer/assign_cite_keys.py Papers/YYMM-ShortTitle.md
python3 skills/4-writing/latex-citation-enhancer/fetch_bibtex.py Papers/YYMM-ShortTitle.md
```
第一条从 url 抽 `arxiv_id` 并写回 `cite_key`(幂等,已有 key 不变);第二条把 arXiv/Crossref 权威 BibTeX 存入 `references/bibtex-cache.bib`(抓不到则从 frontmatter 重建)。两条都安全可重复执行。
4. **追加日志**:用 Edit(或 Write 若文件不存在)将以下格式的 log entry 追加到 `Workbench/logs/YYYY-MM-DD.md`(日期为今天):
```markdown
### [HH:MM] paper-digest
- **input**: <source 的原始内容>
- **output**: [[Papers/YYMM-ShortTitle]]
- **observation**: <一句话描述论文核心贡献>
- **status**: success
```
若日志文件不存在,先创建文件(包含一级标题 `# YYYY-MM-DD`),再追加 entry。
5. **阅读队列**:若 source 来自阅读队列(`Workbench/queue.md` 的 Reading 部分),用 Edit 将对应条目标记为已完成(如在行首添加 `✓` 或删除该条目)。
### Step 6:survey 归属记账
笔记保存后,运行记账脚本把它挂到相关 survey 的待更新队列:
```bash
python3 scripts/survey_updates.py record "Papers/{文件名}.md"
```
- 脚本按 `Topics/*-Survey.md` frontmatter 的 `keywords` 与本笔记 tags/标题匹配(大小写与连字符已归一化),输出匹配到的 survey 列表(JSON)。
- 匹配为空是正常情况(论文不属于任何已有 survey 主题),静默继续。
- 脚本报错时不阻塞 digest:在当日 log 记一条 `survey-updates 记账失败` 即可。
- pending 的消费由 `survey-refresh` skill 负责(GUI canonical 在 ≥1 篇时触发;其他 survey 在 ≥5 篇或最老条目超 7 天时触发)。
- 若输出列表含 `GUIAgent-Survey`,该 pending 是下一 skill round 的强制优先项:在执行任何其他研究任务、或宣告一个包含 digest+整合的多步请求完成前,必须先运行 `survey-refresh`。独立的单篇 digest 可以在本轮结束,但必须明确报告“GUI survey integration pending”;这保留“一轮一个 skill”的原子性,同时保证下一轮立即整合。
- **GUI canonical 特例**:若输出包含 `GUIAgent-Survey`,不等待 5 篇 / 7 天阈值;保持本轮
paper-digest 原子性,并由下一轮优先执行 `survey-refresh GUIAgent-Survey`。GUI 论文的 tag
必须遵守 `references/tags.md` 的 umbrella 规则,避免只标 `agentic-RL` 或宽泛 `environment`
而漏记账。
## Guard
- **不覆盖已有笔记**:若 `Papers/YYMM-ShortTitle.md` 已存在,停止执行并告知 Human,不得覆盖或修改已有文件。
- **不捏造信息**:所有字段必须来自论文原文。无法获取全文时,在受影响的章节开头标注 `> [未获取全文,仅基于 abstract]`,不得推测正文内容填充 Method / Key Results 等节。
- **语言规范**:正文用中文撰写,英文技术术语(模型名、方法名、benchmark 名)保持英文,不做翻译。
## Verify
- [ ] `Papers/YYMM-ShortTitle.md` 已创建且正文 >200 字
- [ ] frontmatter 的 title、authors、date_publish 字段非空
- [ ] **YAML 前置校验通过**:所有含冒号的字段值已加双引号(title、venue 等)
- [ ] **引用身份已固化**:frontmatter 的 `cite_key` 非空,`references/bibtex-cache.bib` 含该 key 的条目
- [ ] Summary 节非空且不超过 3 句话
- [ ] 日志已追加到 `Workbench/logs/YYYY-MM-DD.md`
## Examples
**示例 1:从 arXiv URL 消化论文**
```
/paper-digest "https://arxiv.org/abs/2603.08127"
```
执行过程:
1. WebFetch `https://arxiv.org/abs/2603.08127` 获取 abstract、作者、日期等元数据
2. WebFetch `https://arxiv.org/html/2603.08127` 获取 HTML 全文
3. 提炼 Problem / Method / Results / Strengths & Weaknesses
4. Glob `Papers/2603-*.md` 检查是否重复
5. 读取 `references/tags.md` 选取合适 tags
6. Grep `Papers/` 和 `Ideas/` 搜索相关笔记
7. 写入 `Papers/2603-EvoScientist.md`
8. 追加日志到 `Workbench/logs/2026-03-26.md`
输出文件:`Papers/2603-EvoScientist.md`
---
**示例 2:从论文标题搜索**
```
/paper-digest "Diffusion Policy: Visuomotor Policy Learning via Action Diffusion"
```
执行过程:
1. WebSearch `"Diffusion Policy: Visuomotor Policy Learning via Action Diffusion" site:arxiv.org`
2. 获取 arXiv 链接,WebFetch 抓取内容
3. 后续步骤同示例 1
输出文件:`Papers/2303-DiffusionPolicy.md`
---
**示例 3:从本地 PDF 消化**
```
/paper-digest "/Users/qingli/Downloads/roboclaw_2025.pdf"
```
执行过程:
1. Read `/Users/qingli/Downloads/roboclaw_2025.pdf` 读取 PDF 内容
2. 从内容中提取元数据(title、authors、date、venue)
3. 后续步骤同示例 1
---
**示例 4:从 blog URL 消化**
```
/paper-digest "https://lilianweng.github.io/posts/2024-11-28-reward-hacking/"
```
执行过程:
1. WebFetch 抓取 blog 页面内容
2. 提取元数据:title、author(Lilian Weng)、date_publish、venue 填 `Lilian Weng Blog`
3. institute、code 无法确定则留空
4. 提炼 Problem / Method(核心论点)/ Key Results(关键结论)/ Strengths & Weaknesses
5. 后续去重、tag 选择、Connections 搜索、保存、日志同论文流程
输出文件:`Papers/2411-RewardHacking.md`