智能论文日报生成器,每日从 ArXiv 拉取论文,用 OpenAI-compatible LLM 生成中文摘要,并把结果保存为 Markdown。需要 Python 3.10+、ArXiv 网络访问和一个可用的 LLM API;推送渠道是可选的。
- 📰 智能筛选:自动判断论文相关性,跳过无关论文
- 🔎 关键词预筛:在 LLM 之前做轻量关键词过滤,降低噪声与成本
- 🏆 TopN 详细摘要:对评分最高的 N 篇论文生成结构化分析(TL;DR、贡献、局限等)
- 📝 简洁概述:其他相关论文生成简短摘要
- 📅 每日归档:自动保存每天的日报历史
- 🔄 自动重试:LLM 调用和邮件发送失败时自动重试
- 📧 邮件推送:支持 SMTP 邮件发送(QQ/Gmail/企业邮箱等)
- ⏰ 定时运行:支持 cron 定时任务,每天自动生成
- 📚 去重机制:自动记录已读论文,避免重复处理
- 💾 断点续跑:LLM 调用缓存,支持失败后重跑
git clone https://github.com/WhoJay0609/Daily-Arvix.git
cd Daily-Arvix
python3 --version # 需要 3.10 或更高版本
python3 -m pip install -r requirements.txt复制示例配置。示例默认 PUSH_CHANNEL=none,只写本地文件,不会向示例收件人发送消息:
cp env.example .env至少填写 OPENAI_API_KEY。OPENAI_BASE_URL 和 OPENAI_MODEL 指向所选的 OpenAI-compatible 服务;服务的模型名称、计费和速率限制由服务商决定。不要把真实密钥提交到 Git。
关键配置项:
| 配置项 | 说明 | 示例 |
|---|---|---|
OPENAI_API_KEY |
LLM API 密钥 | sk-... |
OPENAI_BASE_URL |
API 地址 | https://openrouter.ai/api/v1 |
OPENAI_MODEL |
模型名称 | deepseek/deepseek-chat |
ARXIV_CATEGORIES |
ArXiv 分类 | cs.LG,cs.DC |
ARXIV_MAX_RESULTS |
每个 ArXiv 分类最多拉取数量 | 50 |
PREFILTER_KEYWORDS |
标题/摘要/分类至少命中一个的关键词(逗号分隔) | diffusion,graph |
PREFILTER_NEGATIVE_KEYWORDS |
标题/摘要/分类命中任一项即排除 | survey,benchmark |
TOP_N_DETAILED |
Top 详细摘要数量 | 5 |
LLM_CACHE_ENABLED |
是否启用 LLM 缓存 | true |
LLM_CACHE_FILE |
LLM 缓存文件路径 | .llm_cache.json |
OUTPUT_DIR |
日报输出目录 | output |
HISTORY_FILE |
已处理 ArXiv ID 文件 | .paper_history.txt |
SMTP_HOST |
SMTP 服务器 | smtp.qq.com |
SMTP_PORT |
SMTP 端口 | 465 或 587 |
SMTP_USER |
发件邮箱 | your@qq.com |
SMTP_PASS |
SMTP 授权码 | 授权码 |
MAIL_FROM |
发件人 | your@qq.com |
MAIL_TO |
收件人(逗号分隔) | a@example.com,b@example.com |
WECOM_WEBHOOK_URL |
企业微信机器人 Webhook | https://qyapi.weixin.qq.com/... |
PUSH_CHANNEL |
推送方式;none 只保存本地文件 |
none / email / wecom / both |
兴趣提示词:编辑 prompts/interest.txt,描述你的研究兴趣(一行即可)
python3 main.py首次运行会检查 OPENAI_API_KEY,缺少时只打印错误并退出。完整首次运行需要先安装上面的依赖,并会访问 ArXiv 和所选 LLM;本地检查不会替你调用这些外部服务。配置完整且网络可用时生成:
output/daily_digest_YYYY-MM-DD.md:按日期归档的 Markdown;output/daily_digest.md:同内容的最新版本副本,不是软链接;.paper_history.txt:本次候选记录的 ArXiv ID 及日期(不等于每篇摘要都生成成功);.llm_cache.json:启用缓存时保存评分和摘要结果。
如果当天归档已经存在,程序会读取该文件并跳过拉取、筛选和 LLM 生成,只尝试再次推送。
运行脚本自动配置每天早上 6:00 运行:
bash scripts/setup_cron.sh编辑 crontab:
crontab -e添加以下行(每天 6:00 运行;将路径替换为实际克隆目录):
0 6 * * * cd /path/to/Daily-Arvix && /usr/bin/python3 main.py >> cron.log 2>&1scripts/setup_cron.sh 会从自身位置推导项目目录并选择 python3(其次是 python),因此可直接在克隆目录运行。项目、解释器或日志路径含 % 时脚本会拒绝安装,因为 % 是 cron 的特殊字符。
查看日志:
tail -f cron.logSMTP_HOST=smtp.qq.com
SMTP_PORT=465
SMTP_USER=your_qq@qq.com
SMTP_PASS=你的SMTP授权码
MAIL_FROM=your_qq@qq.com
MAIL_TO=recipient@example.com获取授权码:
- 登录 QQ 邮箱网页版
- 设置 → 账户 → POP3/SMTP 服务
- 开启服务并生成授权码
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your@gmail.com
SMTP_PASS=应用专用密码
MAIL_FROM=your@gmail.com
MAIL_TO=recipient@example.compython3 scripts/test_arxiv_time.pypython3 scripts/test_email.pypython3 scripts/test_wecom.py只有在 .env 中填入真实 SMTP 或企业微信凭据后才运行对应推送测试;没有凭据时它们会跳过或失败,不会生成本地日报。
- 拉取论文:按
ARXIV_CATEGORIES分别请求 ArXiv,每个分类最多ARXIV_MAX_RESULTS篇;使用updated时间筛选最近 24 小时的记录,若没有记录则回退到接口返回的前几篇。 - 历史过滤:从论文链接提取 ArXiv ID,跳过
.paper_history.txt中已经记录的 ID。 - 预筛过滤:可选地在标题、摘要和分类上应用包含/排除关键词。
- 相关性判断:LLM 根据
prompts/interest.txt为每篇候选返回is_relevant、0–10 分数和理由。 - 过滤排序:只保留
is_relevant=true的结果,并按分数降序排列。 - 生成摘要:
- TopN:生成结构化摘要(TL;DR/贡献/局限/适用场景)
- 其他:生成简短摘要(1-2 句)
- 保存归档:写入日期归档和最新版本副本,并在流程结束时记录本次候选的 ArXiv ID。
- 可选推送:当
PUSH_CHANNEL为email、wecom或both时,通过 SMTP 或企业微信 Webhook 发送;否则只保留本地文件。
项目使用 OpenAI Python 客户端的 chat.completions.create 接口;可配置提供该接口的服务,例如 OpenRouter、OpenAI、GLM、DeepSeek 或本地 Ollama。具体模型名写入 OPENAI_MODEL,实际兼容性由服务商接口和模型决定。
- LLM 调用失败:自动重试 3 次,指数退避(2^n 秒)
- 邮件发送失败:自动重试 3 次,指数退避
PREFILTER_KEYWORDS:只保留包含关键词的论文(标题/摘要/分类)PREFILTER_NEGATIVE_KEYWORDS:包含关键词则直接剔除- 关键词为空则自动跳过预筛选
- 默认启用,缓存文件为
.llm_cache.json - 可用于失败重跑与降低重复调用成本
- 历史文件:
.paper_history.txt(自动创建) - 格式:
arxiv_id|处理日期 - 每次运行前自动过滤已处理论文
- 查看统计:运行时会显示"历史记录: 共 X 篇,今日已处理 Y 篇"
- 手动清理:删除
.paper_history.txt重新开始
- 程序没有离线或 dry-run 模式:一次完整运行需要访问 ArXiv 和 LLM 服务。相关性评分最终失败的论文不会进入相关结果;摘要生成失败的已入选论文可能保留回退内容或空摘要字段。
- ArXiv 的时间窗口依据
updated(缺失时用published),每个分类独立受ARXIV_MAX_RESULTS限制;接口异常的分类会返回空结果。 - 摘要由所选 LLM 根据 ArXiv 元数据生成,项目不做事实核验或引用核验;请把它当作筛选和阅读入口。
- 邮件和企业微信推送失败不会删除已经生成的本地文件。默认示例使用
PUSH_CHANNEL=none,避免占位邮箱或 Webhook 被误用。
- Python 3.10+;cron 安装脚本适用于提供
crontab的 Unix-like 环境。Windows 定时任务未在项目中提供。 ModuleNotFoundError: feedparser:当前环境尚未安装项目依赖,先运行python3 -m pip install -r requirements.txt。错误: 未配置 OPENAI_API_KEY:在.env中填写密钥后再运行;完整运行仍需要 ArXiv 和 LLM 网络访问。
仓库提供的 cron 回归检查和语法检查已在 2026-09-12 本地运行:
python3 -m unittest tests.test_setup_cron -v # 1 passed
python3 -m compileall -q main.py src tests # exit 0python3 main.py 的成功输出依赖外部服务和真实凭据,因此没有把联网运行结果当作仓库内的兼容性证据。
# 每日论文日报 (2026-01-16)
## 📌 重点推荐(Top 5)
### 1. Paper Title Here
**评分**: 9.5/10
**作者**: Author1, Author2 等
**日期**: 2026-01-15
**链接**: https://arxiv.org/abs/...
**背景**: ...
**动机**: ...
**方法**: ...
**总结**: ...
**推荐理由**: ...
---
## 📝 其他相关论文
**1. Another Paper Title**
评分: 7.8/10 | 作者: Author 等 | [链接](https://...)
简短摘要内容...欢迎提交 Issue 和 Pull Request。兴趣方向请修改 prompts/interest.txt;配置示例只保留占位值,不要提交 .env、缓存、历史记录或输出文件。若修改筛选、缓存或推送行为,请同时更新 README 中的流程和边界说明。
MIT License