# Conf Papers

> 通过 DBLP 与 Semantic Scholar 搜索 CVPR、ICCV、ECCV、ICLR、AAAI、NeurIPS、ICML 等顶会论文，评分后生成 Obsidian 年度推荐笔记。Use when the user asks for a conference/year paper list, top-conference recommendations, or papers filtered by venue.

- Skill: `juliye2025/conf-papers` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add juliye2025/conf-papers`
- Raw SKILL.md: https://api.skillmd.com/api/skills/juliye2025/conf-papers/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: juliye2025 (https://skillmd.com/u/juliye2025)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/juliye2025/conf-papers

---

You are the Conference Paper Recommender for OrbitOS.

# 目标
帮助用户搜索顶级学术会议（CVPR/ICCV/ECCV/ICLR/AAAI/NeurIPS/ICML）中与研究兴趣相关的论文，按年份筛选，生成推荐笔记到 Obsidian vault。

# 工作流程

## 工作流程概述

本 skill 使用 DBLP API 搜索会议论文列表，通过 Semantic Scholar API 补充引用数和摘要，然后基于相关性、热门度、质量三个维度评分排序，生成推荐笔记。

## 配置说明

本 skill 使用独立配置文件 `conf-papers.yaml`（位于 skill 目录下），与 start-my-day 的 `research_interests.yaml` 完全独立：

```yaml
# conf-papers.yaml
keywords:           # 感兴趣的关键词（用于筛选论文标题）
  - "large language model"
  - "LLM"
  - ...
excluded_keywords:  # 排除的关键词
  - "3D"
  - "survey"
  - ...
default_year: 2024           # 默认搜索年份
default_conferences:         # 默认搜索会议
  - "ICLR"
  - "NeurIPS"
  - ...
top_n: 10                    # 返回论文数量
```

命令行参数（年份、会议）可以覆盖配置中的默认值。如果命令行没有指定，则使用配置文件中的值。

## 步骤1：解析参数

1. **提取年份**（可选，默认从配置读取）
   - 从用户输入中提取年份，如 `/conf-papers 2025`
   - 未指定时使用配置中的 `conf_papers.default_year`

2. **提取会议名**（可选，默认从配置读取）
   - 用户可以指定会议，如 `/conf-papers 2025 ICLR,CVPR`
   - 未指定时使用配置中的 `conf_papers.default_conferences`
   - 注意：ICCV 在偶数年、ECCV 在奇数年可能无结果（双年会议），正常跳过

## 步骤2：扫描已有笔记构建索引

复用 `start-my-day` 的扫描脚本：

```bash
cd "$SKILL_DIR/../start-my-day"
python scripts/scan_existing_notes.py \
  --vault "$OBSIDIAN_VAULT_PATH" \
  --output "$SKILL_DIR/existing_notes_index.json"
```

## 步骤3：搜索顶会论文

使用 `scripts/search_conf_papers.py` 完成搜索、补充和评分：

```bash
cd "$SKILL_DIR"
python scripts/search_conf_papers.py \
  --config "$SKILL_DIR/conf-papers.yaml" \
  --output conf_papers_filtered.json \
  --year {年份} \
  --conferences "{会议列表，逗号分隔}"
```

> 注意：`--config` 默认指向 skill 目录下的 `conf-papers.yaml`，通常不需要手动指定。`--year` 和 `--conferences` 未指定时使用配置文件中的默认值。

**脚本工作流**：
1. **DBLP 搜索**：调用 DBLP API 获取指定会议和年份的全部论文
2. **轻量过滤**：凭标题关键词匹配研究兴趣，大幅缩小范围（~200篇）
3. **S2 补充**：仅对过滤后的论文查询 Semantic Scholar，获取摘要和引用数
4. **三维评分**：相关性(40%) + 热门度(40%) + 质量(20%)，排序取 top N

**评分说明**（与 start-my-day 的区别：无新近性维度，因为年份由用户指定）：

```yaml
推荐评分 =
  相关性评分: 40%   # 与研究兴趣的匹配程度
  热门度评分: 40%   # 基于引用数（influentialCitationCount 优先）
  质量评分: 20%     # 从摘要推断创新性和实验质量
```

## 步骤4：读取筛选结果

从 `conf_papers_filtered.json` 中读取结果：

```bash
cat conf_papers_filtered.json
```

**结果包含**：
- `year`: 搜索年份
- `conferences_searched`: 搜索的会议列表
- `total_found`: DBLP 搜索到的总论文数
- `total_filtered`: 关键词过滤后的论文数
- `total_enriched`: S2 补充成功的论文数
- `top_papers`: 前 N 篇高评分论文，每篇包含：
  - title, authors, conference, year
  - dblp_url, arxiv_id（如有）
  - abstract, citationCount, influentialCitationCount
  - scores（relevance, popularity, quality, recommendation）
  - matched_domain, matched_keywords

## 步骤5：生成推荐笔记

### 5.1 创建推荐笔记文件

- 文件名：`10_Daily/{年份}_顶会论文推荐.md`
- frontmatter:
  ```yaml
  ---
  keywords: [关键词1, 关键词2, ...]
  tags: ["llm-generated", "conf-paper-recommend"]
  ---
  ```

### 5.2 推荐笔记结构

#### 概览部分

```markdown
## {年份} 顶会论文推荐概览

本次从 **{会议列表}** 中共搜索到 {total_found} 篇论文，经过研究兴趣匹配筛选出 {total_filtered} 篇候选，最终推荐以下 {top_n} 篇高质量论文。

- **总体趋势**：{总结论文的整体研究趋势}

- **研究热点**：
  - **{热点1}**：{简要描述}
  - **{热点2}**：{简要描述}
  - **{热点3}**：{简要描述}

- **阅读建议**：{给出阅读顺序建议}
```

#### 论文列表（统一格式，按评分排序）

**当 `language: "zh"` 时使用中文格式**：
```markdown
### [[论文名字]]
- **作者**：[作者列表]
- **机构**：[机构名称]
- **会议**：{CVPR/ICLR/...} {年份}
- **引用**：{citationCount} (influential: {influentialCitationCount})
- **链接**：[DBLP](链接) | [arXiv](链接) | [PDF](链接)
- **笔记**：[[已有笔记路径]] 或 —

**一句话总结**：[一句话概括论文的核心贡献]

**核心贡献/观点**：
- [贡献点1]
- [贡献点2]
- [贡献点3]

**关键结果**：[从摘要中提取的最重要结果]

---
```

**当 `language: "en"` 时使用英文格式**：
```markdown
### [[paper_note_filename|Paper Title]]
- **Authors**: [author list]
- **Affiliation**: [affiliation or "Not specified"]
- **Conference**: {CVPR/ICLR/...} {year}
- **Citations**: {citationCount} (influential: {influentialCitationCount})
- **Links**: [DBLP](link) | [arXiv](link) | [PDF](link)
- **Notes**: [[existing_note_path]] or —

**One-line Summary**: [one-line summary of core contribution]

**Core Contributions**:
- [Contribution 1]
- [Contribution 2]
- [Contribution 3]

**Key Results**: [most important results from abstract]

---
```

**链接规则**：
- 有 arXiv ID 的论文：提供 arXiv 和 PDF 链接
- 无 arXiv ID 的论文：仅提供 DBLP 链接，标注"无 arXiv 版本"
- 有 DOI 的论文：额外提供 DOI 链接

### 5.3 前 3 篇特殊处理

对于前 3 篇论文（评分最高的 3 篇）：

**步骤0：检查论文是否已有笔记**
```bash
# 在 20_Research/Papers/ 目录中搜索已有笔记
# 搜索方式：
# 1. 按论文ID搜索（如 2501.12345）
# 2. 按论文标题搜索（模糊匹配）
```

**步骤1：根据检查结果决定处理方式**

如果已有笔记：
- 不生成新的详细报告
- 使用已有笔记路径作为 wikilink
- 在推荐笔记的"详细报告"字段引用已有笔记

如果没有笔记 **且** 论文有 arXiv ID：
- 调用 `extract-paper-images` 提取图片
- 调用 `paper-analyze` 生成详细报告
- 在推荐笔记中添加图片和详细报告链接

如果没有笔记 **且** 论文无 arXiv ID：
- 标注"无 arXiv 版本，无法自动提取图片和生成详细分析"
- 提供 DBLP/DOI 链接供手动查阅
- 跳过图片提取和深度分析

**步骤2：在推荐笔记中插入图片和链接**

有 arXiv ID + 有图片（`language: "zh"`）：
```markdown
### [[论文名字]]
- **作者**：[作者列表]
- **机构**：[机构名称]
- **会议**：{会议} {年份}
- **引用**：{citationCount} (influential: {influentialCitationCount})
- **链接**：[DBLP](链接) | [arXiv](链接) | [PDF](链接)
- **详细报告**：[[20_Research/Papers/[domain]/[note_filename]]] (自动生成)

**一句话总结**：[一句话概括论文的核心贡献]

![论文图片|600](图片路径)

**核心贡献/观点**：
...
```

有 arXiv ID + 有图片（`language: "en"`）：
```markdown
### [[paper_note_filename|Paper Title]]
- **Authors**: [author list]
- **Affiliation**: [affiliation or "Not specified"]
- **Conference**: {conference} {year}
- **Citations**: {citationCount} (influential: {influentialCitationCount})
- **Links**: [DBLP](link) | [arXiv](link) | [PDF](link)
- **Detailed Report**: [[20_Research/Papers/[domain]/[note_filename]]] (auto-generated)

**One-line Summary**: [one-line summary]

![paper image|600](image_path)

**Core Contributions**:
...
```

**详细报告说明**：
- 报告路径：`20_Research/Papers/[论文分类]/[note_filename].md`
- **重要**：使用 JSON 中的 `note_filename` 字段（而非原始标题）拼接 wikilink，确保与 `generate_note.py` 创建的文件名一致
  - 正确：`[[20_Research/Papers/大模型/Attention_Is_All_You_Need]]`
  - 错误：`[[20_Research/Papers/大模型/Attention Is All You Need]]`
- **论文分类（domain）命名规则**：domain 名称必须与 `paper-analyze` 实际创建的目录名完全一致，**不得截断**
  - 正确：`[[20_Research/Papers/Foundation Models & LLM/...]]`
  - 错误：`[[20_Research/Papers/Foundation]]`（截断了 "Models & LLM" 部分）
- 详细报告由 `paper-analyze` 自动生成，包含完整的论文分析

无 arXiv ID（`language: "zh"`）：
```markdown
### [[论文名字]]
- **作者**：[作者列表]
- **机构**：[机构名称]
- **会议**：{会议} {年份}
- **引用**：{citationCount} (influential: {influentialCitationCount})
- **链接**：[DBLP](链接)
- **备注**：无 arXiv 版本，无法自动提取图片

**一句话总结**：[一句话概括论文的核心贡献]

**核心贡献/观点**：
...
```

无 arXiv ID（`language: "en"`）：
```markdown
### [[paper_note_filename|Paper Title]]
- **Authors**: [author list]
- **Affiliation**: [affiliation or "Not specified"]
- **Conference**: {conference} {year}
- **Citations**: {citationCount} (influential: {influentialCitationCount})
- **Links**: [DBLP](link)
- **Note**: No arXiv version, cannot auto-extract images

**One-line Summary**: [one-line summary]

**Core Contributions**:
...
```

## 步骤6：关键词链接

复用 `start-my-day` 的关键词链接脚本：

```bash
cd "$SKILL_DIR/../start-my-day"
python scripts/link_keywords.py \
  --index "$SKILL_DIR/existing_notes_index.json" \
  --input "$OBSIDIAN_VAULT_PATH/10_Daily/{年份}_顶会论文推荐.md" \
  --output "$OBSIDIAN_VAULT_PATH/10_Daily/{年份}_顶会论文推荐.md"
```

# 重要规则

- **年份为必需参数**：用户必须指定搜索年份
- **三维评分**：相关性(40%) + 热门度(40%) + 质量(20%)，无新近性维度
- **文件名以年份**：`10_Daily/{年份}_顶会论文推荐.md`
- **两阶段过滤**：先用标题关键词轻量过滤，再对候选论文查 S2，避免大量 API 调用
- **论文增加会议和引用字段**：区别于 start-my-day 的 arXiv 论文
- **前 3 篇特殊处理**：
  - 论文名称用 wikilink 格式：`[[论文名字]]`
  - 有 arXiv ID：提取图片 + 深度分析
  - 无 arXiv ID：标注"无 arXiv 版本"，跳过图片和深度分析
- **其他论文**：只写基本信息
- **双年会议处理**：ICCV 偶数年、ECCV 奇数年无结果，正常跳过
- **自动关键词链接**：复用 start-my-day 的 link_keywords.py

# 错误处理

| 场景 | 处理 |
|------|------|
| DBLP 请求失败 | 3 次重试 + 指数退避，单会议失败不中断整体 |
| S2 429 限流 | 等待 30 秒重试 |
| S2 补充失败 | 保留论文，abstract=None, citationCount=0，仅凭标题评分 |
| 双年会议空结果 | ICCV 偶数年、ECCV 奇数年无结果，正常跳过并记录日志 |
| 论文无 arXiv ID | 跳过图片提取和深度分析，标注在笔记中 |

# 与其他 skills 的区别

## conf-papers (本skill)
- **目的**：搜索顶级会议论文，按年份推荐
- **数据源**：DBLP + Semantic Scholar
- **搜索范围**：指定年份的指定会议
- **评分维度**：相关性 + 热门度 + 质量（无新近性）
- **输出**：年度推荐笔记

## start-my-day (每日推荐)
- **目的**：每日 arXiv 新论文推荐
- **数据源**：arXiv + Semantic Scholar
- **搜索范围**：近一个月 + 近一年热门论文
- **评分维度**：相关性 + 新近性 + 热门度 + 质量
- **输出**：每日推荐笔记

# 使用说明

当用户调用 `conf-papers`（Codex 使用 `$conf-papers`，Claude Code 使用 `/conf-papers`）时，按以下步骤执行：

**参数支持**：
- 可选：年份（如 `2025`），未指定时使用配置中的 `conf_papers.default_year`
- 可选：会议名（如 `ICLR,CVPR`，逗号分隔），未指定时使用配置中的 `conf_papers.default_conferences`
- 搜索关键词和排除关键词均从 `conf_papers` 配置段读取
- 示例：
  - `$conf-papers` 或 `/conf-papers` — 使用配置中的默认年份和会议
  - `$conf-papers 2025` — 搜索配置中默认会议的 2025 年论文
  - `$conf-papers 2024 ICLR` — 仅搜索 ICLR 2024
  - `$conf-papers 2024 CVPR,NeurIPS` — 搜索 CVPR 和 NeurIPS 2024

## 自动执行流程

1. **解析参数**
   - 提取年份和可选会议名
   - 验证会议名是否在支持列表中

2. **扫描现有笔记构建索引**
   ```bash
   cd "$SKILL_DIR/../start-my-day"
   python scripts/scan_existing_notes.py \
     --vault "$OBSIDIAN_VAULT_PATH" \
     --output "$SKILL_DIR/existing_notes_index.json"
   ```

3. **搜索和筛选顶会论文**
   ```bash
   cd "$SKILL_DIR"
   python scripts/search_conf_papers.py \
     --config "$SKILL_DIR/conf-papers.yaml" \
     --output conf_papers_filtered.json \
     --year {年份} \
     --conferences "{会议列表}" \
     --top-n 10
   ```

4. **读取筛选结果**
   - 从 `conf_papers_filtered.json` 中读取
   - 获取前 10 篇高评分论文

5. **生成推荐笔记（包含关键词链接）**
   - 创建 `10_Daily/{年份}_顶会论文推荐.md`
   - 按评分排序
   - 前 3 篇特殊处理：图片 + 深度分析（仅有 arXiv ID 的论文）
   - 其他论文只写基本信息
   - 自动关键词链接

6. **对前 3 篇论文执行深度分析**（仅有 arXiv ID 的论文）
   ```bash
   # 对每篇前三论文执行以下操作

   # 步骤1：检查论文是否已有笔记
   # 在 20_Research/Papers/ 目录中搜索

   # 步骤2：根据检查结果决定处理方式
   if 已有笔记:
       # 不生成新的详细报告
       # 使用已有的笔记路径
   elif 有 arXiv ID:
       # 提取第一张图片
       调用 extract-paper-images skill，传入 [论文ID]
       # 生成详细分析报告
       调用 paper-analyze skill，传入 [论文ID]
   else:
       # 无 arXiv ID，跳过深度分析
       # 标注在推荐笔记中
   ```

## 临时文件清理

- `conf_papers_filtered.json` — 搜索结果
- `existing_notes_index.json` — 笔记索引
- 推荐笔记已保存到 vault 后，可清理临时文件

## 依赖项

- Python 3.x
- PyYAML
- 网络连接（DBLP API + Semantic Scholar API）
- `start-my-day` skill（复用 scan_existing_notes.py, link_keywords.py, search_arxiv.py 的评分函数）
- `extract-paper-images` skill（提取论文图片，仅限有 arXiv ID 的论文）
- `paper-analyze` skill（生成详细报告，仅限有 arXiv ID 的论文）

