Que fait auto-paper-collecter (compétence) ?
Un radar de veille de recherche auto-hébergé qui s'exécute dans un agent de codage. Les scripts Python ne font que le travail déterministe (appel API, déduplication, rendu, email). VOUS — l'assistant exécutant cette compétence — faites tout le travail de jugement : expansion des requêtes, filtrage de pertinence en informatique, résumés en chinois et synthèse des tendances. Cela signifie qu'aucune clé API d'IA n'est nécessaire — le modèle qui exécute cette compétence (Claude dans Claude Code, GPT dans Codex, …) est le LLM.
Structure
skill/
├── SKILL.md
├── scripts/ common.py · fetch.py · render.py · notify.py (stdlib uniquement)
├── state/ config.json · (queries/candidates/curated/trends/seen .json)
└── digests/ YYYY-MM-DD.md + .html
Exécutez les scripts depuis scripts/ : cd skill/scripts && python3 <script>.py
Configuration — state/config.json
keywords: jusqu'à ~3 chaînes de sujet à suivre.domain: le domaine pour restreindre la pertinence (par défautcomputer science).sources: activez/désactivezarXiv / Crossref / Semantic Scholar / GitHub / HuggingFace / PapersWithCode / RSS.lookback_days: combien de jours en arrière récupérer (la déduplication évite de toute façon les répétitions).max_per_source,rss_feeds.
Lorsque l'utilisateur demande de changer les mots-clés / sources / domaine, modifiez ce fichier et confirmez le changement à l'utilisateur.
Variables d'environnement optionnelles (jamais stockées dans le dépôt) :
SEMANTIC_SCHOLAR_KEY(augmente les limites de débit S2),GITHUB_TOKEN(augmente les limites GitHub),SMTP_*/EMAIL_TO(email), et les canaux de notification —TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID,SLACK_WEBHOOK_URL,WECHAT_WEBHOOK(robot de groupe WeChat) ouSERVERCHAN_KEY(Server酱).
Le pipeline d'exécution — SUIVRE DANS L'ORDRE
1 · Lire la configuration et développer les requêtes (vous)
Lisez state/config.json. Pour chaque mot-clé, pensez à 2–3 requêtes de recherche
associatives en anglais — synonymes, formes complètes, sous-thèmes adjacents — afin que la
trouvaille ne se limite pas au terme littéral (par ex. C2Rust → ["C2Rust", "C-to-Rust translation", "migrating legacy C code to Rust"]). Écrivez-les dans
state/queries.json sous la forme {"<keyword>": ["q1", "q2", ...], ...}.
2 · Récupérer les candidats (script)
cd skill/scripts && python3 fetch.py
Récupère chaque source activée pour ces requêtes, supprime tout ce qui est déjà dans
state/seen.json ou plus ancien que lookback_days, et écrit
state/candidates.json. S'il signale 0 candidats, dites à l'utilisateur "暂无新文献"
et arrêtez-vous (rien d'autre à faire).
3 · Filtrer la pertinence et résumer (vous)
Lisez state/candidates.json. Pour chaque élément, décidez : est-ce (a) de l'informatique
et (b) vraiment dans le thème pour son mot-clé topic ? Supprimez le reste ("traduction"
médicale, "IA" financière, listes d'étoiles GitHub aléatoires, etc.). Pour chaque élément conservé,
écrivez un résumé concis en chinois et assemblez state/curated.json — une liste d'objets :
{"source","topic","title","url","venue","authors","published",
"tldr":"一句话核心 (<=60字)","method":"方法简述 (<=80字)",
"contributions":["核心贡献1","核心贡献2"]}
Placez d'abord les articles, puis les dépôts GitHub en dernier (ils constituent un signal
supplémentaire). Si une source a déjà fourni un tldr, vous pouvez vous en inspirer.
Les éléments GitHub sont des dépôts, pas des articles — ne les résumez pas excessivement. Utilisez la description du dépôts (son
abstract) commetldret laissezmethod/contributionsvides.fetch.pyne conserve déjà que les dépôts avec ≥10 étoiles, classés par étoiles, ce qui garantit leur substance (cours / framework / awesome-list), et non du bruit personnel.
4 · Synthèse des tendances (vous, optionnel mais recommandé)
Regroupez les éléments conservés en quelques sous-domaines CS généraux (自然语言处理 /
计算机视觉 / 系统与编译 … ; fusionnez de manière agressive). Écrivez state/trends.json :
{"top": [{"name","delta": <count>, "summary": "<=80字方向总结", "papers": ["title", ...]}, ... jusqu'à 3]}.
5 · Rendu du digest (script)
cd skill/scripts && python3 render.py
Écrit digests/YYYY-MM-DD.md + .html à partir de curated.json (+ trends.json)
et enregistre tout ce qui a été affiché dans seen.json pour éviter les répétitions.
6 · Notification (script, optionnel)
cd skill/scripts && python3 notify.py # envoie le digest HTML par email si SMTP_* est configuré
7 · Rapport (vous)
Dites à l'utilisateur combien d'articles ont été conservés, les principales directions chaudes et le chemin du digest. Proposez d'ouvrir le HTML ou d'ajuster les mots-clés.
Notes
- Les scripts sont en Python pur avec la bibliothèque standard — pas de
pip installrequis. fetch.pyfiltre déjà les dates futures invalides et déduplique entre les exécutions.- Cette compétence est la contrepartie pilotée par agent du tableau de bord Web FastAPI du projet ; les deux partagent les mêmes sources et la même philosophie de pipeline.