auto-paper-collecter (技能)
一个自托管的研究文献雷达,可在代码代理内部运行。 Python 脚本仅执行确定性工作(API 获取、去重、渲染、发送邮件)。您——运行该技能的助手——负责所有判断性工作:查询扩展、计算机科学相关性过滤、中文摘要以及热点方向综合。这意味着无需 AI API 密钥——运行该技能的任何模型(Claude Code 中的 Claude、Codex 中的 GPT 等)即为 LLM。
布局
skill/
├── SKILL.md
├── scripts/ common.py · fetch.py · render.py · notify.py (仅标准库)
├── state/ config.json · (queries/candidates/curated/trends/seen .json)
└── digests/ YYYY-MM-DD.md + .html
从 scripts/ 运行脚本:cd skill/scripts && python3 <script>.py
配置 —— state/config.json
keywords:最多约 3 个要跟踪的主题字符串。domain:限制相关性的领域(默认computer science)。sources:切换启用arXiv / Crossref / Semantic Scholar / GitHub / HuggingFace / PapersWithCode / RSS。lookback_days:回溯获取的天数(去重会自动避免重复)。max_per_source、rss_feeds。
当用户要求更改关键词/来源/领域时,编辑此文件并向用户确认更改。
可选环境变量(切勿保存在仓库中):
SEMANTIC_SCHOLAR_KEY(提升 S2 速率限制)、GITHUB_TOKEN(提升 GitHub 限制)、SMTP_*/EMAIL_TO(邮件),以及推送渠道——TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID、SLACK_WEBHOOK_URL、WECHAT_WEBHOOK(企业微信群机器人)或SERVERCHAN_KEY(Server酱)。
运行流程 —— 请按顺序执行
1 · 读取配置并扩展查询 (由您操作)
读取 state/config.json。针对每个关键词,思考 2–3 个关联的英文搜索查询——同义词、完整形式、相邻子主题——以确保召回不受限于字面术语(例如 C2Rust → ["C2Rust", "C-to-Rust translation", "migrating legacy C code to Rust"])。将它们写入 state/queries.json,格式为 {"<keyword>": ["q1", "q2", ...], ...}。
2 · 获取候选文献 (脚本)
cd skill/scripts && python3 fetch.py
为这些查询从所有已启用来源获取数据,丢弃已存在于 state/seen.json 中或早于 lookback_days 的条目,并将结果写入 state/candidates.json。如果报告 0 个候选,则告知用户“暂无新文献”并停止(无需其他操作)。
3 · 过滤相关性并摘要 (由您操作)
读取 state/candidates.json。对每个条目判断:它是否**(a) 计算机科学领域且(b) 与其 topic 关键词真正相关**?丢弃其余内容(医学“翻译”、金融“AI”、随机 GitHub 星标列表等)。对保留的每个条目,撰写一段简洁的中文摘要,并组装 state/curated.json——一个对象列表:
{"source","topic","title","url","venue","authors","published",
"tldr":"一句话核心 (<=60字)","method":"方法简述 (<=80字)",
"contributions":["核心贡献1","核心贡献2"]}
将论文排在前面,GitHub 仓库排在最后(它们是辅助信号)。如果某个来源已提供 tldr,您可以在此基础上构建。
GitHub 条目是仓库,而非论文——不要过度摘要它们。使用仓库描述(其
abstract)作为tldr,并将method/contributions留空。fetch.py已仅保留 ≥10 星标的仓库,并按星标排序,因此它们通常是实质性的(课程/框架/awesome-list),而非个人噪音。
4 · 热点方向综合 (由您操作,可选但推荐)
将保留的条目聚类为少数几个粗粒度 CS 子领域(自然语言处理 / 计算机视觉 / 系统与编译 …;积极地合并)。写入 state/trends.json:
{"top": [{"name","delta": <计数>, "summary": "<=80字方向总结", "papers": ["标题", ...]}, ... 最多 3 个]}。
5 · 渲染摘要 (脚本)
cd skill/scripts && python3 render.py
从 curated.json(+ trends.json)生成 digests/YYYY-MM-DD.md + .html,并将所有已展示的条目记录到 seen.json 中以避免重复。
6 · 通知 (脚本,可选)
cd skill/scripts && python3 notify.py # 如果设置了 SMTP_* 环境变量,则通过邮件发送 HTML 摘要
7 · 汇报结果 (由您操作)
告知用户保留了多少篇论文、最热门的几个方向以及摘要文件路径。提供打开 HTML 或调整关键词的选项。
备注
- 脚本是纯 Python 标准库——无需
pip install。 fetch.py已过滤垃圾期货日期并在运行间去重。- 此技能是该项目 FastAPI Web 仪表盘的代理驱动版本;两者共享相同的来源和流程理念。