auto-paper-collecter (skill)
Un radar de literatura de investigación autoalojado que se ejecuta dentro de un agente de codificación. Los scripts de Python solo hacen el trabajo determinista (fetch de API, deduplicación, renderizado, correo electrónico). TÚ — el asistente que ejecuta esta skill — haces todo el trabajo de juicio: expansión de consultas, filtrado de relevancia en ciencias de la computación, resúmenes en chino y síntesis de temas candentes. Esto significa que no se necesita ninguna clave de API de IA — cualquier modelo que esté ejecutando esta skill (Claude en Claude Code, GPT en Codex, …) es el LLM.
Diseño
skill/
├── SKILL.md
├── scripts/ common.py · fetch.py · render.py · notify.py (solo stdlib)
├── state/ config.json · (queries/candidates/curated/trends/seen .json)
└── digests/ YYYY-MM-DD.md + .html
Ejecuta los scripts desde scripts/: cd skill/scripts && python3 <script>.py
Configuración — state/config.json
keywords: hasta ~3 cadenas de temas a rastrear.domain: el campo para restringir la relevancia (por defectocomputer science).sources: alternararXiv / Crossref / Semantic Scholar / GitHub / HuggingFace / PapersWithCode / RSS.lookback_days: hasta dónde retroceder en la búsqueda (la deduplicación ya evita repeticiones).max_per_source,rss_feeds.
Cuando el usuario pida cambiar palabras clave / fuentes / campo, edita este archivo y confirma el cambio devolviéndoselo.
Variables de entorno opcionales (nunca almacenadas en el repositorio):
SEMANTIC_SCHOLAR_KEY(aumenta los límites de tasa de S2),GITHUB_TOKEN(aumenta los límites de GitHub),SMTP_*/EMAIL_TO(correo electrónico) y canales de push —TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID,SLACK_WEBHOOK_URL,WECHAT_WEBHOOK(Robot de grupo de WeChat empresarial) oSERVERCHAN_KEY(Server酱).
El pipeline de ejecución — seguir EN ORDEN
1 · Leer configuración y expandir consultas (tú)
Lee state/config.json. Para cada palabra clave, piensa en 2–3 consultas de búsqueda en inglés asociativas
— sinónimos, formas completas, subtemas adyacentes — para que la recuperación no se limite al término literal
(p. ej., C2Rust → ["C2Rust", "C-to-Rust translation", "migrating legacy C code to Rust"]).
Escríbelas en state/queries.json como {"<keyword>": ["q1", "q2", ...], ...}.
2 · Obtener candidatos (script)
cd skill/scripts && python3 fetch.py
Obtiene cada fuente habilitada para esas consultas, descarta cualquier cosa que ya esté en
state/seen.json o que sea más antigua que lookback_days, y escribe
state/candidates.json. Si informa 0 candidatos, dile al usuario "暂无新文献" y detente (no hay nada más que hacer).
3 · Filtrar relevancia y resumir (tú)
Lee state/candidates.json. Para cada elemento decide: ¿es (a) de ciencias de la computación
y (b) genuinamente relevante para su topic keyword? Descarta el resto ("traducción" médica,
"IA" financiera, listas aleatorias de estrellas de GitHub, etc.). Para cada elemento conservado
escribe un resumen conciso en chino y ensambla state/curated.json — una
lista de objetos:
{"source","topic","title","url","venue","authors","published",
"tldr":"一句话核心 (<=60字)","method":"方法简述 (<=80字)",
"contributions":["核心贡献1","核心贡献2"]}
Primero los papers, luego los repositorios de GitHub (son una señal complementaria). Si una
fuente ya proporcionó un tldr, puedes basarte en él.
Los elementos de GitHub son repositorios, no papers — no los resumas en exceso. Usa la descripción del repositorio (su
abstract) comotldry dejamethod/contributionsvacíos.fetch.pyya solo conserva repos con ≥10 estrellas, ordenados por estrellas, por lo que suelen ser sustanciales (curso / framework / awesome-list), no ruido personal.
4 · Síntesis de temas candentes (tú, opcional pero recomendado)
Agrupa los elementos conservados en un puñado de subcampos gruesos de CS (自然语言处理 /
计算机视觉 / 系统与编译 …; fusiona agresivamente). Escribe state/trends.json:
{"top": [{"name","delta": <count>, "summary": "<=80字方向总结", "papers": ["title", ...]}, ... hasta 3]}.
5 · Renderizar el resumen (script)
cd skill/scripts && python3 render.py
Escribe digests/YYYY-MM-DD.md + .html a partir de curated.json (+ trends.json)
y registra todo lo mostrado en seen.json para que no se repita.
6 · Notificar (script, opcional)
cd skill/scripts && python3 notify.py # envía el resumen HTML por correo si la variable SMTP_* está configurada
7 · Informar (tú)
Dile al usuario cuántos papers se conservaron, las principales direcciones candentes y la ruta del resumen. Ofrece abrir el HTML o ajustar las palabras clave.
Notas
- Los scripts son Python puro de la biblioteca estándar — no se requiere
pip install. fetch.pyya filga fechas futuras basura y deduplica entre ejecuciones.- Esta skill es la contraparte impulsada por agente del panel web FastAPI del proyecto; ambas comparten las mismas fuentes y la misma filosofía de pipeline.