这份指南面向没有服务器、也不想自己配 Python 运行环境的用户。
目标很简单:
- fork 仓库
- 配好 GitHub Actions Secrets
- 手动跑通一次
- 之后每天自动生成报告并发邮件
对应工作流文件:
.github/workflows/scheduled-report-email.yml
这个工作流当前默认行为是:
- 在 GitHub Hosted Runner 上运行
- 只发送一封跨源汇总报告邮件
- 不发送每个 source 的单独邮件
- 默认源是
github arxiv semanticscholar huggingface rss - 默认时间是
UTC 00:00,也就是北京时间08:00 - 会把
history/reports/和运行日志上传成 artifact
- 打开 iDeer 仓库主页。
- 点击右上角
Fork。 - 选择你自己的 GitHub 账号。
- 保持默认选项,完成 fork。
完成后,你会得到自己的仓库副本,例如:
https://github.com/<your-name>/iDeer
后续所有 GitHub Actions 配置,都在你自己的 fork 仓库里做。
第一次 fork 后,GitHub 有时会默认禁用 workflow。
你需要在自己的 fork 仓库里:
- 打开
Actions标签页。 - 如果看到
I understand my workflows, go ahead and enable them之类的按钮,先点开。 - 确认仓库的 Actions 已经启用。
如果 Actions 没启用,后面的定时任务不会运行。
仓库里已经带好了工作流:
Scheduled Report Email
路径是:
.github/workflows/scheduled-report-email.yml
你可以在自己的 fork 仓库中这样找到它:
- 打开
Actions - 左侧找到
Scheduled Report Email
这条工作流至少需要两类外部能力:
- 一个可用的 LLM API
- 一个可用的 SMTP 发信邮箱
也就是说,GitHub Actions 虽然省掉了服务器和 Python 环境,但不会替你提供:
- 大模型 API Key
- 邮箱 SMTP 账号
所以你至少要先准备:
- 一个兼容 OpenAI API 的模型服务
- 一个能通过 SMTP 发邮件的邮箱
进入路径:
- 打开你自己的 fork 仓库
Settings- 左侧
Secrets and variables Actions- 点击
New repository secret
下面这些 Secrets 是最重要的。
| Secret | 说明 | 示例 |
|---|---|---|
IDEER_MODEL_NAME |
模型名 | gpt-4o-mini |
IDEER_BASE_URL |
模型 API 地址 | https://api.openai.com/v1 |
IDEER_API_KEY |
模型 API Key | 你的模型服务密钥 |
IDEER_SMTP_SERVER |
SMTP 服务器 | smtp.gmail.com |
IDEER_SMTP_PORT |
SMTP 端口 | 465 |
IDEER_SMTP_SENDER |
发件邮箱 | yourbot@gmail.com |
IDEER_SMTP_RECEIVER |
收件邮箱 | yourname@example.com |
IDEER_SMTP_PASSWORD |
SMTP 密码或应用专用密码 | 邮箱后台生成 |
IDEER_DESCRIPTION_TEXT |
你的研究兴趣描述 | 见下方示例 |
IDEER_DESCRIPTION_TEXT 示例:
I care about LLM agents, AI infra, open-source model releases, evaluation, safety, and developer tools.
| Secret | 是否推荐 | 默认值 | 用途 |
|---|---|---|---|
IDEER_PROVIDER |
推荐 | openai |
API provider 名称 |
IDEER_TEMPERATURE |
推荐 | 0.5 |
采样温度 |
IDEER_DAILY_SOURCES |
推荐 | github arxiv semanticscholar huggingface rss |
选择跑哪些源 |
IDEER_REPORT_TITLE |
推荐 | Daily Personal Briefing |
报告邮件标题 |
IDEER_RESEARCHER_PROFILE_TEXT |
可选但推荐 | 空 | 更长的研究者画像 |
IDEER_NUM_WORKERS |
可选 | 6 |
并发 worker 数 |
如果你启用了某个源,就只需要配它相关的 Secret。
| Secret | 何时需要 |
|---|---|
IDEER_ARXIV_CATEGORIES |
你启用了 arxiv |
IDEER_ARXIV_MAX_ENTRIES |
你启用了 arxiv |
IDEER_ARXIV_MAX_PAPERS |
你启用了 arxiv |
IDEER_GH_LANGUAGES |
你启用了 github |
IDEER_GH_SINCE |
你启用了 github |
IDEER_GH_MAX_REPOS |
你启用了 github |
IDEER_HF_CONTENT_TYPES |
你启用了 huggingface |
IDEER_HF_MAX_PAPERS |
你启用了 huggingface |
IDEER_HF_MAX_MODELS |
你启用了 huggingface |
IDEER_RSS_URLS |
你启用了 rss,默认 Juya AI Daily |
IDEER_RSS_MAX_ITEMS |
你启用了 rss |
IDEER_SS_QUERIES |
你启用了 semanticscholar 并想手工指定 query |
IDEER_SS_MAX_RESULTS |
你启用了 semanticscholar |
IDEER_SS_MAX_PAPERS |
你启用了 semanticscholar |
IDEER_SS_YEAR |
你启用了 semanticscholar |
IDEER_SS_FIELDS_OF_STUDY |
你启用了 semanticscholar |
IDEER_SS_API_KEY |
你有 Semantic Scholar API Key |
IDEER_X_RAPIDAPI_KEY |
你启用了 twitter |
IDEER_X_RAPIDAPI_HOST |
你启用了 twitter |
IDEER_X_ACCOUNTS |
你启用了 twitter 且想固定账号池 |
IDEER_X_DISCOVER_ACCOUNTS |
你启用了 twitter 且想自动发现账号 |
IDEER_X_MERGE_STATIC_ACCOUNTS |
你启用了 twitter 且同时使用静态账号和自动发现 |
IDEER_X_USE_PERSISTED_ACCOUNTS |
你启用了 twitter 且想复用历史发现结果 |
IDEER_X_SKIP_DISCOVERY_IF_PERSISTED |
你启用了 twitter 且已有持久化账号 |
IDEER_X_DISCOVERY_PERSIST_FILE |
你启用了 twitter 且要自定义持久化文件路径 |
通过 IDEER_DAILY_SOURCES 这个 Secret 配置,格式是空格分隔。
示例:
github arxiv semanticscholar huggingface rss
其他常见组合:
github arxiv
github huggingface semanticscholar
arxiv semanticscholar huggingface rss twitter
注意:
- 你写了哪个源,运行时就会尝试跑哪个源
- 如果某个源缺必需配置,workflow 会失败
twitter源不是默认源,启用它通常还需要额外 API
如果你想先最小成本跑通,建议先用这些默认源:
github arxiv semanticscholar huggingface rss
最低只需要这些 Secrets:
IDEER_MODEL_NAME
IDEER_BASE_URL
IDEER_API_KEY
IDEER_SMTP_SERVER
IDEER_SMTP_PORT
IDEER_SMTP_SENDER
IDEER_SMTP_RECEIVER
IDEER_SMTP_PASSWORD
IDEER_DESCRIPTION_TEXT
再加一个推荐项:
IDEER_DAILY_SOURCES=github arxiv semanticscholar huggingface rss
不要一上来就等定时任务。先手动跑一次,把配置问题一次看清。
步骤:
- 打开
Actions - 进入
Scheduled Report Email - 点击右侧
Run workflow - 保持默认分支是你 fork 的
main - 可选地手动填:
sourcesreport_titlereceiversend_email
- 点击确认运行
建议第一次这样填:
sources: 留空,走IDEER_DAILY_SOURCESreport_title: 留空receiver: 留空send_email:true
这样更接近后续每天自动跑的真实行为。
运行成功后,你应该看到:
- GitHub Actions job 变成绿色
- 收件邮箱收到一封跨源报告邮件
- 当前 workflow 页面下方出现 artifact
artifact 里通常会包含:
report-run.loghistory/reports/...- 各 source 的
history/...输出
如果邮件没收到,先去看 artifact 里的 report-run.log。
时间在工作流文件里:
.github/workflows/scheduled-report-email.yml
默认是:
schedule:
- cron: "0 0 * * *"这表示每天 UTC 00:00,也就是北京时间 08:00。
如果你想改成北京时间每天 09:30,对应 UTC 是 01:30,可以改成:
schedule:
- cron: "30 1 * * *"修改后:
- 提交到你 fork 的默认分支
- GitHub 会自动按新的 cron 生效
常见原因:
- 你的 fork 仓库 Actions 没启用
- 默认分支不是 workflow 所在分支
- cron 刚改完,GitHub 还没到下一次调度窗口
- 仓库长时间没有活动,GitHub 对 schedule 有时会暂停
建议先手动 Run workflow 验证。
仓库里有一个预处理脚本会在运行前检查关键 Secrets。
如果缺:
IDEER_MODEL_NAMEIDEER_BASE_URLIDEER_API_KEYIDEER_SMTP_SERVERIDEER_SMTP_PORTIDEER_SMTP_SENDERIDEER_SMTP_RECEIVERIDEER_SMTP_PASSWORDIDEER_DESCRIPTION_TEXT
workflow 会直接失败,这是故意的。这样比“带着半残配置继续跑”更安全。
优先检查:
IDEER_SMTP_SENDER是否真的能发信IDEER_SMTP_PASSWORD是否是正确的 SMTP 密码或应用专用密码IDEER_SMTP_PORT和IDEER_SMTP_SERVER是否匹配- 是否被邮箱服务商拦截或进入垃圾箱
先看你有没有启用这个源,再看它的必需配置有没有填。
例如:
- 启用
twitter但没填IDEER_X_RAPIDAPI_KEY - 启用
semanticscholar的某些高级配置但 query 不合法
最稳的做法是:
- 先只跑默认 4 源
- 跑通后再逐个加新源
这是当前 workflow 的设计。
GitHub Actions 这条路径默认只发:
- 一封跨源汇总报告
不会发:
- GitHub 单独一封
- arXiv 单独一封
- HuggingFace 单独一封
这样更适合“零服务器、低维护”的使用方式。
为了少踩坑,建议按这个顺序做:
- fork 仓库
- 启用 Actions
- 只填必填 Secrets
- 把
IDEER_DAILY_SOURCES先设成默认 4 源 - 手动跑一次 workflow
- 确认邮件和 artifact 都正常
- 再补充高级 Secrets
- 再考虑启用
twitter等额外源 - 最后再去改 cron
适合:
- 没有服务器
- 不想自己装 Python 环境
- 只想每天定时收一封汇总邮件
不适合:
- 想做长期在线 Web 服务
- 想做多用户系统
- 想跑高频、大并发的任务
这些场景还是应该上你自己的后端。