文献调研这件事,最耗时间的地方不一定是“读论文”,而是持续追踪:这一周有没有新文章?哪些值得看?哪些只是关键词碰巧命中?哪些应该下载全文?看完之后又放到哪里?

如果每周都手动做一遍,很容易变成三种情况:

  1. 忙的时候忘了查;
  2. 查到了但没整理;
  3. 整理了但下周找不到上次看过什么。

所以我现在把一部分文献调研做成了 Codex 自动化。它不是替代完整阅读,而是先完成“定期检索、筛选、摘要级判断、生成周报、保存到 Obsidian 和网页展示”这一套流程。

这篇主要介绍流程设计。具体 prompt 不逐字贴出来,因为实际配置里有很多路径、边界条件和失败处理,直接照抄意义不大。

我现在启用的两条自动化

目前有两条正在运行的文献追踪任务:

自动化主题
o3-weekly对流层 O3 污染、防治、前体物、化学传输模型、气象影响等
ai-weeklyAI / 深度学习用于气象、降尺度、超分辨率、空气污染变量建模等

两条任务的定位不太一样。

o3-weekly 是“期刊论文摘要扫描”。它从公开索引和期刊页面里找过去 7 天新发表、online first、accepted 或新索引的论文,只基于标题、作者、期刊、日期、DOI、摘要等信息做判断,不下载全文,不做 PDF 深读

ai-weekly 是“arXiv 新论文周报”。它只追踪过去 7 天 arXiv 新增或更新的论文。筛完之后,会对最相关的 1-3 篇尽量做正文级深读,但仍然严格限制在这 7 天窗口内,不为了凑数量去翻更早的论文。

这两个任务一个偏大气化学,一个偏 AI+ 气象降尺度,刚好覆盖我现在最需要持续跟踪的两个方向。

在测试流程时我生成了过去一年的 AI 降尺度主题报告,并且生成 HTML 版方便我查看,先给大家看下效果

如果你也觉得很酷、更有读文献的动力了,那么继续看下去吧!

自动化不是“让 AI 随便搜”

我一开始最担心的问题是:如果只是写一句“帮我找最近的文献并总结”,模型很容易做出看起来完整、实际上不可靠的结果。

所以现在的自动化不是开放式搜索,而是把流程严格限制,后续可以根据实践不断调整:

  • 固定时间窗口;
  • 固定主题边界;
  • 固定检索源;
  • 固定筛选和排除规则;
  • 固定输出结构;
  • 固定文件命名方式;
  • 固定空窗处理;
  • 固定写入 memory,方便下次接着跑。

整体流程

现在每次自动化触发后,大致会走下面这条流程:

定时触发

读取上次 memory

计算本次 7 天检索窗口

并发检索多个来源

去重、日期过滤、主题过滤

候选文献打分和聚类

生成 Markdown 周报

转换为 HTML 展示页

写入 memory,记录本次结果和下次注意事项

这里的关键不是某一个工具,而是把每一步都固定下来。这样每周得到的结果才可比较,也方便发现自动化本身哪里需要改。

第一步:读取 memory

每次运行前,自动化会先读取自己的 memory。

memory 里主要记录这些内容:

  • 上次检索的时间窗口;
  • 上次入选了哪些 DOI 或标题;
  • 哪些是噪声类别;
  • 上次生成的 Markdown 和 HTML 路径;
  • HTML 转换是否失败;
  • 下次应该优先复核什么。

这一步的价值是避免“每周都像第一次运行”。例如上周已经入选过的论文,本周如果又被数据库更新了一次,就不能无脑重复分析;如果上次 HTML 转换失败,下次就要优先注意这部分。

第二步:固定时间窗口

两个自动化都强制使用“触发时刻往前 7 天”作为检索窗口。

我没有让它自由决定“最近”是什么意思,因为这个词太模糊了。不同数据库里的日期也不一样,有的是 online date,有的是 indexed date,有的是 updated date。

所以配置里会明确要求:

  • 报告使用 Asia/Shanghai 时区的运行日;
  • 文件名也使用运行日;
  • 检索范围只看过去 7 天;
  • 日期字段不一致时,在报告里说明采用的是哪类日期;
  • 不允许私自扩大时间范围。

这一步看起来很死板,但对周报类自动化很有必要。

第三步:并发检索

不同主题用的检索源不一样。

O3 周报

O3 方向优先使用公开索引和期刊/数据库来源,例如:

  • OpenAlex;
  • Crossref;
  • Semantic Scholar;
  • Europe PMC;
  • PubMed;
  • 期刊 RSS 或 TOC 页面;
  • 出版社开放摘要页。

这些来源覆盖不完全一致,所以不能只依赖一个数据库。多源检索后再统一去重和打分。

AI 周报

AI 方向主要盯 arXiv。

它会同时跑多组关键词,并检查相关分类最近几条更新记录,例如:

  • cs.LG
  • stat.ML
  • cs.AI
  • physics.ao-ph
  • physics.geo-ph
  • eess.SP
  • cs.CV

这些分类更新记录相当于“哨兵”。如果相关分类最近都没有新更新,那么就没必要在一堆关键词上继续耗太多时间。

第四步:过滤噪声

文献检索里最烦的是关键词误伤。

比如 O3 方向搜 ozone,很容易搜到:

  • 医疗臭氧;
  • 牙科治疗;
  • 水处理和废水臭氧氧化;
  • 材料加工;
  • 臭氧层恢复;
  • 传感器器件;
  • 消毒灭菌。

这些文章可能也叫 ozone,但不是我关心的“对流层空气污染 O3”。

所以自动化里有一层硬过滤,先把明显不相关的主题排掉。之后再根据题名、摘要、期刊、关键词、区域、方法相关性打分。

AI 周报也类似。不是所有 machine learning + weather 的论文都值得放进来,重点还是看它是否和气象数据、降尺度、超分辨率、时空插值、偏差订正、污染物估计等主题真正相关。

第五步:打分、聚类和选文献

过滤之后,自动化不会按检索来源机械排序,而是按主题价值选文献。

O3 周报一般选 5-10 篇,按主题聚类。例如:

  • O3 前体物和敏感性;
  • 区域输送;
  • 气象过程影响;
  • 化学传输模型;
  • O3 与 PM2.5 协同控制。

AI 周报一般选 3-8 篇。如果不足 3 篇,就按实际数量写;如果 0 篇,就不生成空报告。

每篇入选文献都会记录:

  • 标题、作者、机构;
  • 来源、DOI 或 arXiv 链接;
  • 日期;
  • 相关性等级;
  • 主题标签;
  • 主要问题;
  • 方法概要;
  • 关键数据或任务;
  • 主要结论;
  • 局限性;
  • 后续可跟进方向。

这样做的目标不是把摘要翻译一遍,而是尽量回答一个更实际的问题:这篇值不值得我接下来花时间看全文?

第六步:重点文献和 hit/key 标记

每次周报生成文件名时,会带一个状态:

YYYY-MM-DD-hitN.md
YYYY-MM-DD-keyN.md

其中 N 是本次入选文献数量。

hit 表示有命中文献,但没有特别需要马上关注的重点。

key 表示至少有一篇文献值得优先看。例如:

  • 相关性非常高;
  • 来自重要期刊;
  • 方法和当前课题高度相关;
  • 可能影响后续实验设计;
  • 虽然只能看到摘要,但值得主动下载全文。

这个小标记很有用。之后在 Obsidian 里看文件名,就能大致知道那一周有没有重点内容。

第七步:Markdown 写入 Obsidian

自动化的第一份正式产物是 Markdown。

我把它保存到 Obsidian 文献库对应主题下,例如:

Literature/Topics/<topic>/AutoReview/

周报的结构不是传统论文综述,而是更偏“快速判断”:

  1. 本周结论速览;
  2. 值得优先看;
  3. 文献清单;
  4. 核心论文分析;
  5. 横向主题趋势;
  6. 可跟进问题或实验建议;
  7. 检索与生成记录。

方法信息统一放在最后。这样打开文档时,先看到的是判断,而不是一大段检索说明。

另外,输出会尽量使用 Obsidian 友好的格式,例如 callout、高亮、任务标记和表格。这样后续不管是在 Obsidian 里阅读,还是转成网页,都比较舒服。

Markdown 效果如下:

第八步:转换成 HTML

Markdown 生成成功后,会再转换成 HTML。

我现在使用的是本地的 html-anything 项目,把 Markdown 转成一个更适合浏览和分享的页面。模板固定为 deck-blueprint,转换时使用 Codex agent。1

这里有一个经验:HTML 转换有时会跑几分钟,不能看到一段时间没有输出就认为卡死。后来我给转换工具加了更长的 timeout 和实时日志,方便判断到底是正常生成,还是确实失败。

如果 HTML 转换失败,规则也很明确:

  • 不删除已经生成的 Markdown;
  • 在自动化结果里说明 HTML 失败原因;
  • 把失败情况写入 memory;
  • 下次优先复核。

也就是说,Markdown 是主产物,HTML 是展示产物。展示失败不能影响原始记录。

空窗处理

我特意给自动化写了空窗规则。

如果过去 7 天内没有合适文献:

  • 不创建 Markdown;
  • 不转换 HTML;
  • 不生成 PDF;
  • 只在自动化结果中说明没有找到;
  • 在 memory 里记录检索窗口、复核方式和空窗原因。

这个规则比想象中重要。很多自动化报告最大的问题就是“无论如何都要生成一份东西”。结果就是内容越来越水,后面自己也不想看。

我宁愿它告诉我“本周没有”,也不希望它为了完整性硬写一篇。

两条自动化的差异

虽然整体流程类似,但两条任务的边界不一样。

项目O3 周报AI 周报
数据源多个公开索引、期刊页面、数据库arXiv
阅读深度摘要级,不下载全文可对 1-3 篇做正文级深读
目标追踪空气污染 O3 研究进展追踪 AI+ 气象/污染建模新方法
输出期刊论文摘要周报arXiv 新论文周报
风险控制防止 ozone 关键词误伤防止泛 AI 论文偏题

这种差异化很重要。不同主题不应该套同一个流程。

O3 方向更看重期刊来源、摘要判断和噪声过滤;AI 方向则更看重 arXiv 更新、方法新意和是否值得快速跟进。

它解决了什么,没解决什么

这套自动化解决的是:

  • 每周定期追踪;
  • 初步筛选;
  • 摘要级判断;
  • 重点文献提醒;
  • Obsidian 存档;
  • HTML 展示;
  • 上下周连续记录。

它没有解决的是:

  • 替你真正读完所有论文;
  • 判断每个实验细节是否可靠;
  • 自动复现论文方法;
  • 替代系统综述;
  • 替代领域专家判断。

我更愿意把它理解成“文献雷达”。它负责持续扫描,把可能有价值的东西推到面前。至于哪些要精读、哪些要复现、哪些要写进论文,还是要自己判断。

总结

文献调研自动化的重点不是让 AI 写一篇很长的综述,而是建立一个稳定流程:

  1. 固定主题;
  2. 固定时间窗口;
  3. 多源检索;
  4. 去重和过滤;
  5. 相关性打分;
  6. 输出 Obsidian 友好的 Markdown;
  7. 转成 HTML;
  8. 写入 memory,方便下次接着跑。

这套流程跑起来之后,每周至少能保证一件事:我不会完全错过自己关心方向的新文献。

它不完美,但很实用。尤其是当研究方向同时横跨大气化学、数值模式、机器学习和空气污染时,先有一个稳定的自动扫描流程,比每次临时想起来再搜要可靠得多。

相关阅读

Footnotes

  1. html-anything/README.zh-CN.md at main · nexu-io/html-anything