每天自动从 arXiv 抓取最新论文,用 LLM 按你的研究方向打分,筛出最值得读的 10 篇。你越投票,它越懂你。

支持两种使用方式:
| 本地网页版 | 飞书推送版 | |
|---|---|---|
| 使用方式 | 浏览器打开网页 | 每天直接推到手机飞书 |
| 投票反馈 | 网页点击 👍 👎 | 飞书消息卡片点击 |
| 需要额外配置 | 不需要 | 需要创建飞书应用 |
| 适合场景 | 坐在电脑前 | 随时随地,手机查看 |
git clone https://github.com/ccandee/paper-recommender
cd paper-recommender
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt安装慢或失败? 换国内镜像源:
.venv/bin/pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
macOS 用户如果遇到 SSL 错误,运行一次:
/Applications/Python\ 3.10/Install\ Certificates.command
复制配置模板并填写:
cp .env.example .env打开 .env,至少填一个 LLM API Key:
# 选一个填就行,优先级从上到下
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
DEEPSEEK_API_KEY=...
GROQ_API_KEY=...
# 每天几点抓论文(24小时制,默认早8点)
SCHEDULE_HOUR=8
# 每次抓多少篇(越多越全,LLM花费也越高)
ARXIV_MAX_RESULTS=100
# 允许手动触发(建议开启)
ENABLE_RUN_NOW=trueLLM 选哪个?
- 想省钱:用 Gemini Flash 或 DeepSeek,近乎免费
- 想效果好:用 claude-sonnet 或 gpt-4o,每天约 $0.05–0.10
启动 app,浏览器打开 http://localhost:5001/profile,填写:
- 你的研究兴趣(这是最重要的打分依据)
- 你发表过的论文(帮助 LLM 理解你的风格)
- 可选:Google Scholar ID,一键导入你的论文列表
启动(需要两个终端)
# 终端 1 — 网页服务
python app.py
# 浏览器打开 http://localhost:5001
# 终端 2 — 每日定时任务(每天 SCHEDULE_HOUR 自动跑)
python scheduler.py网页功能
| 页面 | 地址 | 说明 |
|---|---|---|
| 每日推荐 | / |
浏览论文、看摘要、投票 |
| 论文详情 | /paper/<id> |
查看完整摘要和原文链接 |
| 研究档案 | /profile |
修改研究兴趣、导入论文 |
| 设置 | /settings |
关注机构、清除数据 |
| 投票历史 | /history |
查看你投过票的论文 |
每天早上论文直接推到你的飞书,卡片里可以直接点 👍 👎 投票,偏好模型实时更新。
- 打开 open.feishu.cn,登录你的飞书账号
- 创建「企业自建应用」,填写应用名称(如「论文推荐」)
- 添加应用能力 → 开启「机器人」
- 权限管理 → 开通:
im:message(发消息)contact:user.id:readonly(查用户 ID)
- 机器人 → 消息卡片请求方式 → 选「使用长连接接收回调」
- 凭证与基础信息 → 复制 App ID 和 App Secret
在飞书里发一条消息给机器人,或者用 curl 测试(把 token 换成你的):
# 先拿 tenant_access_token
curl -X POST https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal \
-H 'Content-Type: application/json' \
-d '{"app_id":"你的AppID","app_secret":"你的AppSecret"}'
# 再用手机号查 open_id
curl -X POST 'https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id?user_id_type=open_id' \
-H 'Authorization: Bearer 上一步的token' \
-H 'Content-Type: application/json' \
-d '{"mobiles":["你的手机号"]}'在 .env 追加:
FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FEISHU_OPEN_ID=ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx如果手机号查不到 open_id(个人版飞书通讯录限制),可以先发一条消息给机器人,从消息事件里获取 open_id,或在飞书 API 调试台手动测试。
版本管理与发布 → 创建版本 → 申请发布(自动审核,秒过)
# 终端 1 — 网页服务 + 飞书长连接(接收点赞)
python app.py
# 终端 2 — 每日定时任务(每天 SCHEDULE_HOUR 自动抓论文并推飞书)
python scheduler.py启动后飞书里会收到这样的卡片:
📚 今日论文推荐 · 2026-04-07
─────────────────────────────
🥇 [9.2] Attention Is All You Need
论文完整摘要...
[👍 有用] [👎 没用] [查看原文 ↗]
─────────────────────────────
🥈 [8.7] Scaling Laws for ...
...
每次运行按以下步骤处理:
1. 读取研究档案 — 你填的研究兴趣和论文
2. 抓取新论文 — 只抓上次没见过的(水印去重,不重复花钱)
3. LLM 打分 — 每篇 0–10 分,按语义相关性评分(批量处理省 token)
4. ML 偏好模型 — 用你的历史投票训练,越用越准
5. 机构声誉加成 — 你关注的机构发的论文额外加分
6. 生成综合分数 — 多维信号合并,取最高 10 篇
7. 生成摘要 — 每篇 3 句话摘要
8. 推送 — 发到网页 / 飞书
综合分数构成:
综合分 = LLM相关性 (0–10, 主导)
+ ML偏好分 (0–2, 投票训练)
+ 机构加成 (0–1.5)
+ 作者历史 (±1.0)
+ 机构历史 (±1.0)
+ 话题信号 (±1.0)
→ 上限 10.0
越用越准: 每次点 👍 👎 都会更新偏好模型。投票越多,推荐越个性化。
每次运行,ARXIV_MAX_RESULTS=100 时:
| 模型 | 每次费用 |
|---|---|
| claude-sonnet | ~$0.05–0.10 |
| gpt-4o | ~$0.08–0.15 |
| gemini-2.0-flash | ~$0.001 |
| deepseek-chat | ~$0.002 |
| groq llama | 免费额度内 |
如果在后台启动了服务,用以下命令找到并终止进程:
# 查找进程
ps aux | grep -E "app\.py|scheduler\.py" | grep -v grep
# 按 PID 终止(把 <PID> 换成上面看到的数字)
kill <PID>
# 或者一键终止所有相关进程
pkill -f "app\.py"; pkill -f "scheduler\.py"paper-recommender/
├── app.py # Flask 网页服务 + 飞书 webhook
├── scheduler.py # 每日定时任务
├── config.py # 读取 .env 配置
├── feishu/
│ ├── bot.py # 飞书 API:发消息卡片
│ └── longconn.py # 飞书长连接:接收卡片点击
├── db/
│ ├── database.py # 所有数据库操作
│ └── schema.sql # 建表语句
├── services/
│ ├── arxiv_fetcher.py # arXiv 抓取(水印去重)
│ ├── recommender.py # Pipeline 主流程
│ ├── llm_client.py # 多 LLM 统一接口
│ ├── ml_ranker.py # TF-IDF + Ridge 偏好模型
│ └── scholar.py # Google Scholar 同步
├── templates/ # 网页模板
├── static/ # CSS / JS
└── data/ # SQLite 数据库(自动创建)
- Python 3.10+
- 至少一个 LLM API Key
- 飞书推送版额外需要:飞书账号 + 自建应用