我现在怎么做科研:从文献调研、实验到论文写作
过去一段时间,我一直在调整自己的科研流程。
最开始我只是把 ChatGPT 当成写作和查资料工具。后来发现,真正拖慢科研项目的,往往不是某个问题不会,而是中间过程太容易散:论文读了但没有沉淀成实验计划,实验跑了但日志不全,结果有了但写论文时又找不到它支撑哪一句话。
所以我现在更关心一件事:怎么让科研过程尽量不断线。
我现在不再把工具分开用,而是让它们围绕同一套材料工作。
Deep Research 负责把文献和 baseline 整理出来,Codex 负责靠近实验环境去跑代码,heartbeat 负责长实验期间的定期检查,论文写作 skill 负责从 repo、结果和引用里长出初稿。中间最重要的不是某个工具,而是 experiment contract、run report 和 evidence table 这些文件。
我现在大致这样做:
- 前期用 ChatGPT Deep Research 做文献调研,重点不是“写综述”,而是整理论文表、baseline 表和实验风险。
- 调研结束后写一页 experiment contract,把研究问题、实验矩阵、smoke test、停止条件说清楚。
- 实验放到远程 GPU 服务器上跑,通过本机代理、反向隧道和容器代理环境变量解决服务器联网问题。
- 在服务器容器或宿主机里安装 Codex,让它读 repo、配环境、跑 smoke test、启动实验、整理日志。
- 长实验用 heartbeat 模式巡检,每隔几个小时看一次日志、GPU、checkpoint 和指标。
- 写论文前先做 evidence table,把每个强结论和具体实验结果对上。
- 最后用本机里的论文写作 skill,从 repo、实验结果、图表和引用出发生成初稿。
这篇文章不是想说“科研可以完全交给工具”。我的感受刚好相反:工具越能干,越要把边界写清楚。它可以帮你执行、整理和起草,但研究问题、实验协议和论文里的强结论,还是得自己负责。
一、我现在最想解决的是“科研上下文丢失”
一个机器学习项目经常不是被单个难点卡住,而是被很多小断点拖住。
比如:
- 文献调研做完了,但没有变成 baseline 矩阵。
- baseline 找到了,但没有记录代码地址、许可证、训练成本和预期指标。
- 实验能跑了,但 seed、config、commit、日志路径没有固定。
- 训练结束了,但结果散在
tmux、csv、wandb 页面和临时截图里。 - 论文写到 Introduction,才发现 claim 和实验结果对不上。
这些事情单独看都不大,但累积起来会让项目很难收束。
所以我现在会把科研项目拆成四层。
工具不是直接替我从第一层跳到第四层。它们更像在每一层之间搬运和整理材料。
真正让流程变稳的,是每一层都有明确的文件和检查点。
二、Deep Research 的结果,必须能继续往实验走
我现在用 Deep Research,不会只问:
1 | 帮我总结一下某某方向。 |
这种问法通常会得到一篇顺滑但不太能落地的综述。对科研项目来说,更有价值的是让调研结果直接服务后面的实验和论文写作。
根据 OpenAI 的帮助中心,Deep Research 可以选择数据来源、先生成 research plan、运行中跟踪进度并调整方向,最后输出带 citations 或 source links 的结构化报告。对我来说,这意味着它不只是“回答问题”,而是可以作为前期材料整理工具。
我现在的 prompt 会更具体:
1 | 请围绕 [研究问题] 做一次 Deep Research。 |
调研结束后,我会把输出拆成几个文件,而不是只留一个很长的报告。
| 文件 | 作用 | 为什么要单独留下来 |
|---|---|---|
paper_table.csv | 记录论文、代码、数据集、指标、主要结论。 | 后面写 related work 和查引用时,不需要重新翻聊天记录。 |
baseline_matrix.csv | 比较 baseline 的复现成本、代码质量和实验价值。 | 避免只因为某篇论文有名,就把它放进主实验。 |
experiment_contract.md | 把调研结果转成可执行实验说明。 | 这是从“读到了什么”走向“要验证什么”的关键文件。 |
我现在最看重的是第三个文件。调研报告回答的是“这个方向发生了什么”,实验说明回答的是“我接下来到底要验证什么”。
三、实验说明写不好,后面很容易跑偏
我以前经常犯的一个错,是太快让工具进入执行状态。比如直接说:
1 | 帮我复现这篇论文。 |
这句话看起来明确,其实很开放。它没有说:
- 复现到什么程度算过关。
- 哪个数据集是主线,哪个只是 sanity check。
- 指标差多少是实现误差,差多少说明复现失败。
- 如果环境冲突,允许修到什么程度。
- 如果代码跑起来但结果异常,要不要继续花 GPU。
- 哪些地方必须等我回来判断。
所以我现在会先写 experiment_contract.md。
1 | # Experiment Contract |
这份说明不需要很长,但要具体。
它最重要的作用,是防止“实验跑起来了,但其实已经偏离原来的问题”。
自动化实验最怕的不是报错。报错至少会停下来。真正危险的是训练脚本一直在跑,但数据、指标或协议已经悄悄变了。
四、服务器里的 Codex,要先读项目,再动项目
我的实验主要放在远程 GPU 服务器上跑。本机负责调研、编辑和判断,服务器负责训练、评测和长时间运行。
这里有一个很现实的问题:实验服务器的外部网络通常不稳定。GitHub、Hugging Face、Python 包、API、论文页面,都可能因为网络问题卡住。
我现在比较稳定的做法是:
1 | Mac 本机代理 |
脱敏后的命令形态大概是这样:
1 | ssh -N -T \ |
容器里再统一 source 一个代理脚本:
1 | export HTTP_PROXY=http://<docker_host_ip>:<host_forward_port> |
这一步最好写成脚本,而不是每次手动敲。
网络链路只存在于脑子里时,下一次断了就很难恢复。
我会先让 Codex 做 repo 勘察
Codex 进入服务器后,我不会立刻让它改代码或开训练。我会先让它读项目:
1 | 你现在是这个项目的实验执行员。 |
这一步很重要。科研 repo 往往没有产品代码那么规整,很多约定藏在路径、脚本名和 README 的一句话里。
Codex 如果没读懂项目,很容易把环境问题误判成算法问题,或者为了修一个路径问题改动核心逻辑。
五、full run 之前,我一定会先跑 smoke test
现在我不太愿意直接开完整训练。
完整训练之前,我会让 Codex 先做一个很小的 smoke test。
1 | 请先运行 smoke test: |
smoke test 不证明方法有效,只证明管线没有明显问题。
但这一步很值,因为很多错误越早发现越便宜。
如果 smoke test 失败,我会要求 Codex 只做最小修复。
这个阶段不适合重构,也不适合“顺手优化”模型代码。
六、heartbeat 的价值,是让实验别悄悄坏掉
长实验最难受的地方,是你不可能一直盯着它,但它又可能随时出问题。
我现在会让 Codex 进入 heartbeat 模式,每隔几个小时检查一次:
- GPU 是否还在跑
- 训练进程是否还活着
- 磁盘空间是否够
- 最新日志有没有 NaN、OOM、报错、卡住
- checkpoint 是否按预期生成
- metrics 是否明显异常
我会让它把每次检查归成几类:
| 状态 | 含义 | 允许动作 |
|---|---|---|
running | 训练正常进行,日志和指标没有明显异常。 | 只更新 heartbeat 记录。 |
suspicious | 仍在运行,但 loss、指标或资源状态可疑。 | 标记问题,收集证据,不直接写结论。 |
failed | 任务已经失败,能看到明确错误。 | 只允许一次低风险修复和重启。 |
converged | 实验完成或已收敛。 | 整理结果,更新 run report 和 summary 表。 |
blocked | 需要改变实验目标、协议或核心方法。 | 暂停,等我判断。 |
如果用 Codex 的非交互模式,codex exec 可以接到 cron、systemd timer 或其他定时任务里。OpenAI 官方文档也把 codex exec 作为自动化入口来描述,并提醒自动化场景要妥善管理凭证。
一个最小的 heartbeat 命令可以像这样:
1 | codex exec " |
这一步不是为了让流程看起来“全自动”。
它的价值更朴素:实验出问题时,尽量早点知道;实验没问题时,留下可回看的记录。
七、实验结果要先变成证据,再变成论文语言
我现在最看重的中间文件之一,是 evidence_table.md。
论文写作有一个很常见的问题:Introduction 里写得很强,Experiments 里支撑得不够。工具写作会放大这个问题,因为它很擅长把普通结果写得很顺。
所以我会先整理一张表:
1 | | Claim | Evidence | Experiment ID | Dataset | Metric | Figure/Table | Status | |
这张表会直接约束后面的写作:
- Abstract 里的强 claim,必须能在表里找到证据。
- Introduction 的 contribution,必须能在 Experiments 对应到实验。
- 找不到证据的 claim,要么降级,要么补实验,要么删掉。
needs rerun的结果不能写成确定结论。
先写 evidence table,再写 Abstract。不要先把故事写漂亮,再回头找实验支撑。这样很容易不自觉地夸大结果。
八、论文写作 skill 要从 repo 出发
我本机里装了几个和写作相关的 Codex skill。最常用的是:
20-ml-paper-writingresearch-paper-writingpaper-figure-polishsystematic-debuggingverification-before-completion
其中 20-ml-paper-writing 里有一条我非常认同的规则:不要凭记忆生成 citation。BibTeX 必须通过程序化方式获取和验证。
这条规则很重要。引用错误不是小问题,尤其是论文写作里,作者、年份、venue、DOI、结论归属都不能乱来。
我现在让写作 skill 工作时,会尽量给它完整上下文:
1 | repo/ |
我会让它先输出:
1 | 1. 论文主线 |
这个过程的重点不是让它一次写完,而是让它先把“故事”和“证据”对齐。
如果它写出的 contribution 找不到实验支撑,我会先改 contribution,而不是强行把文字写得更好。
九、图表分两种:数据图和概念图
我现在会把图分得很清楚。
第一类是数据图,比如:
- benchmark bar chart
- ablation table
- convergence curve
- robustness curve
- sensitivity analysis
这类图必须从真实数据生成:
1 | raw logs / csv / json |
这部分不能让图像模型“画一个差不多的”。
第二类是概念图,比如:
- pipeline figure
- method overview
- teaser figure
- 公众号封面
这类图可以先用 ChatGPT Images 生成草图,再做局部编辑。OpenAI 的 ChatGPT Images 帮助中心已经把它描述成可以创建和编辑图片的工作流。以前我会用 NanoBananaPro2,再通过 EditBanana 转成可编辑图;现在我更倾向于先在 ChatGPT 里把构图和风格试出来,再去 Figma、Illustrator 或 EditBanana 里修文字和矢量细节。
我的原则很简单:
- 数据图必须可复现。
- 概念图可以先快速试,但最终要可编辑。
- 论文图不要只追求好看,caption 和证据关系更重要。
十、我会补上的外部工具
如果只用 ChatGPT 和 Codex,已经能跑起一套流程。
但项目稍微变复杂以后,我建议补几类工具。
| 工具 | 我会用它做什么 | 适合什么时候上 |
|---|---|---|
uv | 管理 Python 环境和依赖,把环境初始化写成脚本。 | 服务器、容器、临时复现环境频繁切换时。 |
MLflow / W&B | 记录参数、代码版本、metrics、输出文件和实验对比。 | 实验矩阵开始变多,只靠本地日志容易乱时。 |
OpenAlex / Semantic Scholar API | 拉取论文、作者、venue、citation 等结构化信息。 | 需要维护长期 paper table 或验证引用时。 |
Snakemake | 把数据处理、训练、评测、画图做成可重放流程。 | 项目不再是单个 train.py,而是多阶段实验时。 |
这些工具不是一开始都要上。
我的判断标准很简单:当某件事已经重复三次,并且出错会影响论文结论,就值得把它工具化。
十一、最后压成一套 SOP
如果把整套流程压成一份简化版 SOP,我会这样写:
阶段 1:调研
- 用 Deep Research 做带来源的调研。
- 导出
paper_table.csv和baseline_matrix.csv。 - 标出主 baseline、可选 baseline 和高风险 baseline。
阶段 2:实验说明
- 写
experiment_contract.md。 - 明确 smoke test、full run、stop rules。
- 明确每次实验要记录哪些信息。
阶段 3:远程执行
- 打通本机代理到远程服务器和容器。
- 让 Codex 先读 repo,再跑 smoke test。
- smoke test 通过后再开 full run。
阶段 4:巡检
- 用 heartbeat 定期检查进程、日志、磁盘、checkpoint、metrics。
- 只允许低风险修复。
- 需要改变研究方向或实验协议时,暂停等人判断。
阶段 5:证据整理
- 每个实验写
run_report.md。 - 主要结果进入 summary 表。
- 所有强 claim 都进入
evidence_table.md。
阶段 6:写作
- 从 repo、结果、图表、引用出发写初稿。
- citation 先验证再写进 bib。
- 数据图从真实数据生成,概念图可以先用图像工具打草稿。
十二、我不会放松的几条原则
工具越能干,边界越要清楚。
我现在想要的不是“一键发论文”。更现实一点说,我只是希望把那些重复、脆弱、容易丢上下文的工作整理顺一点,把更多时间留给问题本身。
参考与延伸阅读
- OpenAI Deep Research 帮助中心:https://help.openai.com/articles/10500283
- OpenAI Deep Research 发布页:https://openai.com/index/introducing-deep-research/
- OpenAI Codex Use Cases:https://developers.openai.com/codex/use-cases
- OpenAI Codex Non-interactive Mode:https://developers.openai.com/codex/noninteractive
- OpenAI Codex Skills:https://developers.openai.com/codex/skills
- ChatGPT Images 帮助中心:https://help.openai.com/en/articles/11084440-chatgpt-images-faq
- W&B 官方文档:https://docs.wandb.ai/
- MLflow Tracking:https://www.mlflow.org/docs/latest/ml/tracking
- uv 官方文档:https://docs.astral.sh/uv/
- OpenAlex API:https://developers.openalex.org/api-reference/introduction
- Semantic Scholar API:https://www.semanticscholar.org/product/api
- Snakemake 文档:https://snakemake.readthedocs.io/en/stable/

