面向 AI 开发者的双语论文日报系统。 在线平台:arXivDaily.tech
它不是简单的论文聚合页,而是一条完整的生产链:抓取真实论文源,按规则打分筛选,对入选论文生成中文标题和双语解读,按 issue_date 快照落库,并通过 Web 界面和邮件日报对外分发。
- 聚合
Hugging Face Daily Papers与arXiv多个 AI 方向的论文数据。 - 使用
GitHub Trending和Semantic Scholar为论文补充开源热度与学术影响信号。 - 通过 8 类规则信号对论文打分,并按“数量优先”策略产出最多
5篇Focus和最多12篇Watching。 - 对入选论文执行单篇隔离的
Editor -> Writer -> Reviewer三阶段 LLM 链路,生成中文标题与双语摘要。 - 将
paper、paper_summary、paper_ai_trace、system_task_log等关键数据落到 MySQL,支持历史回看与排障。 - 提供首页、论文详情、候选池、方向聚合、分类总览、订阅/退订页面。
- 支持每日自动更新、每日简报邮件发送、任务失败告警邮件,以及 Ubuntu 单机部署。
当前前端的真实页面形态如下:
首页 每页只展示一天内容,右侧日历可快速跳转 |
论文详情页 展示双语一句话总结、亮点与应用场景 |
候选池明细 展示保留到快照中的全部候选论文、总分与加分项 |
分类总览页 提供固定方向 taxonomy 的入口 |
方向聚合页 用技术方向聚合历史论文,适合做专题浏览 |
|
当前抓取链路使用这 4 类真实外部来源:
Hugging Face Daily Papers APIarXiv APIGitHub TrendingSemantic Scholar
其中:
- Hugging Face 与 arXiv 提供论文主数据。
- GitHub Trending 用于判断论文是否命中开源热度信号。
- Semantic Scholar 用于计算
academic_influence分数。
issue_date:简报发布日期fetch_date = issue_date - 3 天
日常任务会优先抓 issue_date - 3 的论文;如果当天供给为空,会继续向前回退最多 3 天寻找非空抓取结果。
每篇论文会基于以下 8 类信号打分:
- 顶级机构作者
- Hugging Face Daily 推荐
- 社区热度(upvotes)
- 顶会/重要 venue
- 是否存在代码信号
- 工程实践相关关键词
- 学术影响力(由 citationCount 换算)
- GitHub Trending 开源趋势
方向标签由标题和摘要中的 taxonomy 关键词规则推断,例如 Agent、RAG、Reasoning、Vision_Image、Safety_Alignment 等。
当前实现已经切换到“数量优先发布”:
Focus- 优先选取
score >= 80的论文 - 若不足
5篇,则从剩余高分论文中继续补位,直到达到5篇或候选耗尽
- 优先选取
Watching- 在剔除已进入 Focus 的论文后,从
50 <= score < 80中按分数倒序取最多12篇 - 可以少于
12,必要时也可以为0
- 在剔除已进入 Focus 的论文后,从
Candidatelow_score:分数低于50capacity_overflow:分数达到档位但超出容量窗口reviewer_rejected:进入 AI 生产链但最终未通过发布门禁
每天最终只保留评分前 50 名论文进入 paper_summary 快照。超过 50 的论文不会进入当天候选池页面。
入选论文会按“单篇隔离”的方式执行同一条主链:
Editor- 确定写作角度、核心痛点、具体解法
Writer- 生成中文/英文一句话总结、亮点和应用场景
Reviewer- 做最后一轮质量门禁,决定通过或拒绝
每个阶段的输出和失败重试都会写入 paper_ai_trace,用于审计和排障,不直接在前端展示。
当前仓库默认接入的是:
MiniMax-M2.5- OpenAI 兼容调用方式
KIMI_BASE_URL=https://api.minimaxi.com/v1
为了兼容历史实现,部分环境变量仍沿用 KIMI_* 前缀,但当前默认服务商已经是 MiniMax,不是 Moonshot Kimi。
paper- 论文静态元数据,如
arxiv_id、中英文标题、作者、venue、abstract、pdf_url
- 论文静态元数据,如
paper_summary- 以
issue_date为核心的快照表,是首页、详情页、候选池和方向页的查询真相源
- 以
paper_ai_traceEditor / Writer / Reviewer的中间产物与状态留痕
system_task_log- 每个期号任务的抓取数量、处理数量、成功/失败状态与错误日志
subscriber- 邮件订阅状态、验证 token、退订 token
notification_delivery_log- 日报邮件与任务告警邮件的发送审计与幂等留痕
当前 paper 表并不持久化原始 citationCount。系统会在打分阶段实时获取引用数,并把换算后的 academic_influence 分数落到 paper_summary.score_reasons 中。
External Sources
-> Crawler
-> Scorer
-> Pipeline
-> Title Localization
-> Editor
-> Writer
-> Reviewer
-> MySQL
-> FastAPI API
-> Vue Web UI / Email Digest
- 首页
/- 每页只展示一个
issue_date - 右侧日历可快速跳转
- 无数据日期显示为灰色
- 每页只展示一个
- 详情页
/paper/:id- 展示双语解读与论文基础信息
- 候选池页
/sources/:date- 展示当天保留到快照中的全部候选论文
- 方向页
/topic/:name- 某个固定方向下的历史论文聚合
- 分类总览页
/topics- 展示全部方向入口
- 退订页
/unsubscribe- 供邮件中的退订链接回跳使用
- 论文列表、详情、候选池、日历数据接口
- 邮件订阅、邮箱验证、退订接口
- 每日更新、历史回填、日报发送、cron 安装脚本
- Ubuntu
systemd + nginx + cron的生产部署资产
.
├── backend/
│ ├── app/
│ │ ├── api/v1/ # FastAPI 路由
│ │ ├── core/ # 配置与规格常量
│ │ ├── db/ # SQLAlchemy engine / session
│ │ ├── models/ # ORM 模型
│ │ ├── schemas/ # Pydantic 模型
│ │ └── services/ # crawler / scorer / ai_processor / pipeline / mailer
│ ├── prompts/ # Editor / Writer / Reviewer 提示词
│ ├── scripts/ # 跑批、回填、发报、部署辅助脚本
│ ├── requirements.txt
│ └── .env.example
├── frontend/
│ ├── public/
│ ├── src/
│ │ ├── api/
│ │ ├── router/
│ │ └── views/
│ └── package.json
├── database/
│ ├── schema.sql
│ └── migrate_v225.sql
├── deploy/linux/
│ ├── ai-paper-summary.nginx.conf
│ ├── ai-paper-summary-backend.service
│ └── DEPLOY.md
├── tests/
│ ├── backend/
│ ├── frontend/
│ ├── live/
│ ├── smoke/
│ └── fixtures/
└── Detailed_PRD.md
cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-test.txt
cp .env.example .env至少需要配置这些环境变量:
DATABASE_URL=mysql+pymysql://root:password@localhost:3306/ai_paper_summary
BACKEND_PUBLIC_URL=http://127.0.0.1:8000
FRONTEND_URL=http://127.0.0.1:5173
MINIMAX_API_KEY=your-api-key
KIMI_BASE_URL=https://api.minimaxi.com/v1
KIMI_MODEL=MiniMax-M2.5
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_FROM_EMAIL=no-reply@example.com
OWNER_ALERT_EMAIL=you@example.com初始化数据库:
cd backend
./venv/bin/python scripts/setup_local_db.py如果你本机是 Oracle 安装包版 MySQL,仓库还提供了一个系统 MySQL 引导脚本:
cd backend
./venv/bin/python scripts/setup_local_mysql.py启动后端:
cd backend
./venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000 --reloadcd frontend
npm install开发环境 .env.local:
VITE_API_BASE_URL=http://127.0.0.1:8000启动前端:
cd frontend
npm run dev -- --host 127.0.0.1 --port 5173生产构建:
cd frontend
npm run buildfrontend/.env.production 当前保持为空字符串,因为前端生产环境直接请求同源 /api/v1/...,由 nginx 负责反向代理。
cd backend
./venv/bin/python scripts/run_daily_update_job.py- 按上海时区计算当日
issue_date - 调用共享的
run_issue_pipeline(...) - 失败时向
OWNER_ALERT_EMAIL发告警邮件
cd backend
./venv/bin/python scripts/send_daily_digest.py- 只会在当日
issue_date成功生成后发送 - 只发送给
subscriber.status = 1的有效订阅用户 - 发送前会刷新退订 token
cd backend
./venv/bin/python scripts/run_pipeline_once.pycd backend
./venv/bin/python scripts/backfill_issue_range.py --start-date 2026-02-13 --end-date 2026-03-30当前历史回填和日常发布共享同一条入口:
这意味着两者都会调用同一套:
CrawlerScorerPipeline.run(...)Editor -> Writer -> Reviewer
仓库已经提供了 Linux 单机部署资产:
nginx配置:deploy/linux/ai-paper-summary.nginx.confsystemd服务:deploy/linux/ai-paper-summary-backend.service- 部署说明:
deploy/linux/DEPLOY.md
当前推荐的生产形态是:
MySQL:本机服务FastAPI:uvicorn监听127.0.0.1:8000Vue:frontend/dist交给nginx托管systemd:托管后端服务cron:08:00更新、08:30发日报
安装 cron:
cd backend
./venv/bin/python scripts/install_linux_cron.py仓库现在约定使用两条 GitHub Actions workflow:
CI- 触发:
pull_request到main、push到main - 内容:
- 后端:
tests/backend + tests/smoke - 外网:
tests/live - 前端:
npm run test:run+npm run build
- 后端:
- 触发:
Deploy- 触发:
CI在main分支的push成功后自动触发- 或手动
workflow_dispatch
- 内容:
- 通过 SSH 登录现有 Ubuntu 服务器
- 更新
/srv/ai-paper-summary - 用 GitHub
productionEnvironment Secrets 渲染并覆盖backend/.env - 执行
setup_local_db.py - 重建前端并重启
ai-paper-summary-backend - 做本机后端与
arxivdaily.tech入口健康检查
- 触发:
推荐把部署 workflow 绑定到 GitHub production Environment,并把敏感值放在该 Environment Secrets 下。
部署连接类:
DEPLOY_HOSTDEPLOY_PORTDEPLOY_USERDEPLOY_SSH_KEYDEPLOY_KNOWN_HOSTS
业务运行类:
DATABASE_URLMINIMAX_API_KEYKIMI_API_KEY(可选,兼容旧变量)BACKEND_PUBLIC_URLFRONTEND_URLSMTP_HOSTSMTP_PORTSMTP_USERNAMESMTP_PASSWORDSMTP_FROM_EMAILSMTP_FROM_NAMESMTP_USE_STARTTLSSMTP_USE_SSLOWNER_ALERT_EMAIL
可选覆盖的运行参数:
MYSQL_UNIX_SOCKETKIMI_BASE_URLKIMI_MODELKIMI_TIMEOUT_SECONDSKIMI_LONGFORM_TIMEOUT_SECONDSKIMI_MAX_RETRIESKIMI_LONGFORM_MAX_RETRIESKIMI_TITLE_BATCH_SIZEPIPELINE_MAX_CATEGORY_ATTEMPTSPIPELINE_FOCUS_ATTEMPT_MULTIPLIERPIPELINE_WATCHING_ATTEMPT_MULTIPLIERPIPELINE_ENABLE_WATCHINGPIPELINE_REVIEWER_STRICTPIPELINE_PROBE_DAYSSEMANTIC_SCHOLAR_TIMEOUT_SECONDSCRAWLER_CITATION_MAX_WORKERS
固定写入 deploy 生成 .env 的默认值:
KIMI_MIN_REQUEST_INTERVAL_SECONDS=1.5KIMI_LONGFORM_MIN_REQUEST_INTERVAL_SECONDS=2.5KIMI_TITLE_LOCALIZATION_ATTEMPTS=4KIMI_EDITOR_MAX_TOKENS=1400KIMI_WRITER_FOCUS_MAX_TOKENS=1800KIMI_WRITER_WATCHING_MAX_TOKENS=1300KIMI_REVIEWER_MAX_TOKENS=512
pull_request路径不会读取生产 Secrets- 生产
.env由 Actions 根据deploy/linux/backend.env.production.template渲染后覆盖到服务器 - 服务器上原有
.env会先备份,再写入新版本 - 若仓库允许外部 fork PR,不要改成
pull_request_target去跑带 Secrets 的逻辑 - 推荐给
productionEnvironment 增加 required reviewers,至少为部署保留一层人工门禁 - 推荐在 GitHub 仓库设置里把
backend-tests、live-tests、frontend-tests设为main的 required checks
cd backend
./venv/bin/pytest ../tests/backend ../tests/smokecd backend
./venv/bin/pytest ../tests/livecd frontend
npm run test:runcd backend
./venv/bin/python -m compileall app scripts
cd frontend
npm run buildtests/live只覆盖真实外网 crawler,不等同于完整的LLM + MySQL + API + 前端全链路回归。- AI 中间产物已经落库,但默认不在前端显示。
- 当前 README 不再把 RSS 作为正式产品能力描述,因为这条需求目前不作为项目主功能承诺。
- 代码里仍保留一部分历史命名,例如
KIMI_*配置前缀,但当前默认模型服务商是MiniMax。 - Vite 生产构建目前仍会提示主 chunk 偏大,但不影响构建成功。
- 产品规格:Detailed_PRD.md
- 代码图谱入口:.nexus-map/INDEX.md
- 测试说明:tests/README.md
- Linux 部署说明:deploy/linux/DEPLOY.md
MIT






