Codex SDK 自动论文速读 GitHub Action 实施方案
Codex SDK 自动论文速读 GitHub Action 实施方案
当前实现
这个仓库已经按本方案落地了一个 MVP:GitHub Action 每天北京时间 08:00 运行一次,调用 Codex SDK,让 Codex 搜索、细读并生成一组可以直接发布的 Paper Radar 论文速读博客。每期输出英文和中文两个独立 Markdown,Paper Radar 页面默认展示英文入口。
实现文件:
.github/workflows/codex_paper_digest.yml
.github/codex/prompts/paper_digest.md
.agents/skills/paper-search/SKILL.md
.agents/skills/paper-reading/SKILL.md
.agents/skills/research-memory/SKILL.md
.agents/skills/blog-writing/SKILL.md
_pages/paper-radar.html
scripts/codex-paper-digest.mjs
scripts/check-paper-digest-config.py
_data/paper_digest_seen.json
_data/paper_digest_memory.json
目标
Action 调用 Codex SDK,让 Codex 自动完成以下工作:
- Recall 历史论文速读、主题偏好、未完成问题、质量反馈和演化日志。
- 基于过去推送做自进化分析,把历史反馈转化成本次搜索、筛选、图表和写作策略。
- 搜索近期论文。
- 筛选最值得关注的论文。
- 对确定要汇报的论文获取可合法访问的原文或全文页面,并进行细读。
- 生成英文版和中文版两个独立 Jekyll Markdown 博客,标题用本期主题,不用时间命名。
- 更新去重记录、长期研究记忆、质量反馈和下一轮自进化提示。
- 自动提交到仓库。
每次运行开始时,Codex 还会先检查 SkillHub CLI 是否可用;如果没有安装,会按 SkillHub 官方 CLI-only 安装方式安装 CLI,然后安装 multi-search-engine、arxiv、humanizer、pdf 四个技能。这个步骤失败时不阻断 Paper Radar,会回退到仓库内置 skills。
理想输出示例:
_posts/2026-05-04-0617-paper-radar-en.md
_posts/2026-05-04-0617-paper-radar-zh.md
运行频率与模型
当前 workflow 使用:
schedule:
- cron: "0 0 * * *"
这表示 UTC 每天 00:00 运行一次,对应北京时间每天 08:00。
默认模型配置:
CODEX_MODEL=gpt-5.5
CODEX_REASONING_EFFORT=xhigh
CODEX_SANDBOX_MODE=danger-full-access
说明:GitHub hosted runner 对 Codex 默认的 bubblewrap sandbox 有内核权限限制,可能出现 bwrap: setting up uid map: Permission denied。因此 CI 中使用 danger-full-access,但 workflow 最后只提交 _posts、_data 和 images/paper-radar,不会自动提交其他文件。
Secret 配置
需要在 GitHub 仓库 Settings 中配置两个 secret:
OPENAI_API_KEY
OPENAI_BASE_URL
注意:
- API key 只能放在 GitHub Secrets 或本地环境变量中。
- 不要把 API key 写入仓库、文档、prompt、日志或 commit message。
OPENAI_BASE_URL用来配置自定义 OpenAI-compatible endpoint。
GitHub 设置路径:
Settings -> Secrets and variables -> Actions -> New repository secret
主题范围
当前搜索主题聚焦:
agentic trainingworld modelslarge model mechanisms / 大模型机理document intelligence / 文档智能data agents / data agent
搜索优先级:
- 最近 24 小时内的新内容。
- 若不足,扩展到最近 3 天。
- 若仍不足,扩展到最近 7 天。
Paper Radar 页面
导航栏新增:
Paper Radar -> /paper-radar/
页面文件:
_pages/paper-radar.html
_includes/archive-single-paper-radar.html
这个页面用兼容 GitHub Pages/Jekyll 的 Liquid 循环,只聚合带有 paper-digest 标签且 lang != zh 的文章,因此优先展示英文版。每篇英文文章提供两个入口:
English -> English post permalink
中文 -> English post front matter 中的 translation_url
因此每组自动生成的博客必须包含:
lang: en
translation_url: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-zh/
以及中文对应文章:
lang: zh
translation_url: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-en/
技能设计
这套方案把 Codex 当成一个定期运行的研究助理。它拥有四个可版本化技能,主版本存放在官方推荐的 .agents/skills/<skill>/SKILL.md;.github/codex/skills/*.md 只是兼容副本。
运行时还会尝试通过 SkillHub 安装四个外部技能:
command -v skillhub
curl -fsSL https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/install/install.sh | bash -s -- --cli-only
skillhub install multi-search-engine
skillhub install arxiv
skillhub install humanizer
skillhub install pdf
要求:
- 只安装 SkillHub CLI,不安装默认技能包。
- 不提交 SkillHub 安装产物、缓存或新装技能文件。
- 若安装失败,继续使用仓库内置 skills。
paper_search
职责:
- 搜索候选论文。
- 判断来源可靠性。
- 根据
_data/paper_digest_seen.json和历史_posts去重。 - 记录作者、机构、日期、链接和主题相关性。
- 初筛 8 到 15 篇候选论文。
- 选出 3 到 5 篇最值得汇报的论文。
优先来源:
arXiv
Semantic Scholar
OpenReview
Papers with Code
Hugging Face papers
会议官网
作者主页
大学或实验室页面
paper_reading
职责:
- 对最终入选论文获取可合法访问的原文。
- 阅读 abstract、introduction、method、experiments/results、limitations 或 discussion。
- 提取核心问题、方法、证据、贡献、局限和研究关联。
- 查找机构信息。
- 尝试提取 1 到 3 个核心图表候选,包括主图、方法框架图、关键实验表格或重要曲线。
- 如果关键图表对理解论文十分重要,可以渲染开放 PDF/HTML、模拟截图或截取页面局部来辅助细读,并把重要截图保存到
images/paper-radar/YYYY-MM-DD-HHMM/。 - 为每篇论文形成足够写成 mini explainer 的内部笔记:一句话核心 idea、为什么重要、方法拆解、关键证据、图表支撑的 claim、局限和下一步问题。
约束:
- 不绕过 paywall。
- 不使用盗版论文站点。
- 不把 PDF 保存到仓库。
- 不把无关截图或大图片保存到仓库。
- 关键截图必须按期号组织在
images/paper-radar/YYYY-MM-DD-HHMM/,文件名使用小写英文和短横线。 - 最终博客可以引用本地截图路径或远程图片链接;没有可靠图片时写准确的 Figure/Table 指针和图表解读。
- 不复制长段原文。
- 不能假装读过无法访问的全文。
- 读取状态只作为内部判断,不在最终博客里显示
fulltext_read等字段。
research_memory
职责:
- 每次运行开始前读取
_data/paper_digest_memory.json。 - Recall 历史 digest、topic threads、open questions、quality feedback 和 evolution log。
- 搜索前做自进化分析:识别重复选题、过浅解读、图表使用不足、来源缺口和中英文写作问题。
- 将自进化分析转化成本次搜索优先级、筛选 rubric、深读目标、图表目标和写作注意事项。
- 在本次搜索和写作中延续值得追踪的问题。
- 运行结束后更新长期记忆、质量反馈和演化日志。
记忆文件只保存短摘要、稳定 ID、主题标签、质量反馈和判断,不保存论文全文。自进化只用于提升研究和写作策略,不能降低安全要求、来源要求、secret 处理或 workflow 权限约束。
blog_writing
职责:
- 生成可以直接发布的 Jekyll Markdown。
- 英文版和中文版分别生成独立 Markdown。
- 每篇论文包含机构、核心图表或图表线索、方法和证据、局限或疑问。
- 文章标题使用本期主题,不用时间。
- 文章风格清晰、克制、具体,有真人研究笔记感。
- 每篇论文写成有深度的 mini explainer:先让读者快速抓住 idea,再用方法拆解和关键证据提供深度。
- 每张核心图或每个 Figure/Table 指针后,都要解释它说明了什么、支撑了哪个 claim、需要谨慎解读什么。
文件名格式:
_posts/YYYY-MM-DD-HHMM-paper-radar-en.md
_posts/YYYY-MM-DD-HHMM-paper-radar-zh.md
英文 front matter:
---
title: "A thematic English title, not a date"
date: YYYY-MM-DD HH:MM:SS +0800
permalink: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-en/
lang: en
translation_url: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-zh/
tags:
- paper-digest
- paper-radar
- AI
- agents
- research
---
中文 front matter:
---
title: "中文主题标题,不要用日期"
date: YYYY-MM-DD HH:MM:SS +0800
permalink: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-zh/
lang: zh
translation_url: /posts/YYYY/MM/paper-radar-YYYY-MM-DD-HHMM-en/
tags:
- paper-digest
- paper-radar
- AI
- agents
- research
---
总体流程
GitHub schedule / 手动触发
-> checkout 仓库
-> 安装 Node.js 和 Codex SDK
-> 运行 scripts/codex-paper-digest.mjs
-> SDK 读取主 prompt + 四个 skills
-> Codex recall 历史记忆和已推送论文
-> Codex 可并行启动多个子任务/subagent,从论文源、中文科技媒体、X 大博主、研究者博客和实验室博客收集热点线索;subagent 优先使用 gpt-5.5 + xhigh
-> Codex 联网搜索候选论文
-> Codex 对入选论文获取可合法访问的原文并细读
-> Codex 写英文和中文两个独立 Markdown 并更新记忆文件
-> git add _posts _data images/paper-radar
-> commit + push
Workflow
当前 workflow:
name: Codex Paper Digest
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
permissions:
contents: write
concurrency:
group: codex-paper-digest
cancel-in-progress: false
jobs:
digest:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Check digest configuration
run: python3 scripts/check-paper-digest-config.py
- name: Install Codex SDK
run: npm install --no-save @openai/codex-sdk @openai/codex
- name: Run Codex paper digest
env:
OPENAI_API_KEY: $
OPENAI_BASE_URL: $
CODEX_MODEL: gpt-5.5
CODEX_REASONING_EFFORT: xhigh
CODEX_SANDBOX_MODE: danger-full-access
run: node scripts/codex-paper-digest.mjs
- name: Commit generated digest
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add _posts _data images/paper-radar
git commit -m "Add automated paper digest" || echo "No changes to commit"
git push
数据文件
去重记录
_data/paper_digest_seen.json
初始内容:
{
"papers": []
}
长期记忆
_data/paper_digest_memory.json
初始内容:
{
"version": 1,
"last_updated": null,
"research_profile": {
"core_interests": [
"agentic training",
"world models",
"large model mechanisms",
"document intelligence",
"data agents"
],
"style_preference": "英文和中文分别成文;克制、具体、有判断力,避免新闻稿式写作"
},
"topic_threads": [],
"open_questions": [],
"recent_digests": [],
"quality_feedback": [],
"evolution_log": []
}
本地测试
当前本地环境没有 Node.js / npm,因此无法在本机实际运行 SDK。可以做的本地检查:
python3 scripts/check-paper-digest-config.py
python3 -m json.tool _data/paper_digest_seen.json
python3 -m json.tool _data/paper_digest_memory.json
如果本地安装了 Node.js,并配置了环境变量,可以运行:
export OPENAI_API_KEY="..."
export OPENAI_BASE_URL="..."
export CODEX_MODEL="gpt-5.5"
export CODEX_REASONING_EFFORT="xhigh"
node scripts/codex-paper-digest.mjs
运行后检查:
git diff
如果 Ruby / Jekyll 环境可用,再运行:
bundle exec jekyll build
Review Checklist
每次首次运行后重点检查:
- 是否只修改了
_posts/和_data/。 - Markdown front matter 是否有效。
- 是否生成英文和中文两个独立 Markdown,且 Paper Radar 默认展示英文。
- 链接是否真实可打开。
- 是否出现重复论文。
- 最终博客是否没有展示
原文读取状态:fulltext_read等内部字段。 - 每篇论文是否展示机构;查不到时是否明确写“未注明”。
- 每篇论文是否有核心图表远程图片或可靠图表线索。
- 博客标题是否是主题化标题,而不是日期。
_data/paper_digest_memory.json是否更新了主题线索、open questions 和最近 digest 记录。_data/paper_digest_memory.json是否更新了 quality_feedback 和 evolution_log。- 本期是否明显吸收了过去推送的质量反馈,而不是机械重复上一期结构和选题。
- 中文和英文摘要是否具体、可信、不过度发挥。
- 每篇论文是否像 mini explainer,而不是摘要改写:有核心 idea、方法拆解、关键证据和作者自己的判断。
- 每张图或每个 Figure/Table 指针是否有解释,而不是只贴图。
- 是否没有泄露任何 API key、token 或 secret。
风险与控制
搜索结果不稳定
控制方式:
- 把搜索策略固化进
paper_search.md。 - 限制主题范围。
- 每次运行前通过
research_memory.mdrecall 历史主题。 - 要求每篇论文至少有稳定来源链接。
Prompt Injection
控制方式:
- 主 prompt 明确网页内容是不可信数据。
- skill 中明确网页指令不能覆盖仓库任务。
- workflow 不接受 issue、PR 评论或外部用户文本触发。
版权风险
控制方式:
- 只读取可合法访问的原文或全文页面。
- 不绕过 paywall,不使用盗版论文站点。
- 不把 PDF 保存进仓库。
- 不把截图或大图片保存进仓库。
- 只使用公开可访问的远程图片 URL,或写图表线索。
- 不复制长段摘要或原文。
成本风险
控制方式:
- 每次最终细读 3 到 5 篇论文。
- prompt 和 skills 保持简洁。
- 如果每日频率成本偏高,可改成隔日或每周固定日期运行。
长期记忆膨胀
控制方式:
research_memory.md只保存短摘要、主题线索、open questions 和稳定 ID。- 定期压缩旧记忆,保留长期有用的判断。
- 不保存论文全文、长摘要或大段引用。
细读失败
控制方式:
- 如果开放全文不可访问,标记为
metadata_only。 - 如果只读到部分页面,标记为
partial_read。 - 博客中不能把
metadata_only论文写成已经细读。 - 细读失败的论文可以降级为“候选关注”,不进入本期重点解读。
后续增强
- 增加
paper_sources.yml,配置固定关键词、会议、作者或研究机构。 - 增加确定性候选抓取脚本,把候选论文写成 JSON。
- 增加 PDF / HTML 原文解析脚本,把开放全文转成临时文本供 Codex 细读,但不提交全文。
- 增加
paper_scoring.mdskill,让 Codex 按固定 rubric 打分。 - 增加 dry-run 模式,只生成 diff,不自动 commit。
- 增加 GitHub Issue 报告模式,把候选论文先发到 issue,再人工确认发布。
完成标准
实现完成后,应该满足:
- GitHub Action 可以手动触发。
- 定时任务可以每天北京时间 08:00 自动运行。
- Codex 能读取
paper_search、paper_reading、research_memory和blog_writing四个技能。 - Codex 能生成一组有效的英文/中文 Jekyll 博客。
- Paper Radar 导航页可以访问
/paper-radar/。 - 最终博客不展示
fulltext_read等内部状态字段。 - 每篇论文包含机构信息。
- 每篇论文包含核心图表远程图片或图表线索。
- 博客标题是主题化标题。
- 每篇论文的讲解能让读者快速抓住 idea,并看到方法机制、关键证据和谨慎判断。
- 每张主图、方法图或关键结果图都有具体解读。
_data/paper_digest_seen.json能记录已收录论文。_data/paper_digest_memory.json能在每次运行前被 recall,并在运行后更新。- workflow 能自动 commit 并 push。
- Jekyll 网站可以正常构建。
- 生成内容有真实链接、没有明显重复、没有无来源编造。
- 不泄露任何 API key、token 或 secret。
