AB
AiBoss
Tutorials

用 AI 辅助完成博士论文:文献引用、代码整合与事实核查的实操方法

Tutorials

用 AI 辅助完成博士论文:文献引用、代码整合与事实核查的实操方法

博士论文写作的难点往往不在写作本身,而在于如何把四年间散落在无数仓库、论文和笔记里的工作重新组织成一条自洽的论证线。本文整理了一套用 AI 工具辅助论文收尾的具体做法,涵盖按 BibTeX 键检索引用、把多个实验仓库整合成可复现的单一代码库,以及逐条核对引用与原文是否一致。每个环节都给出可直接套用的提示词与脚本思路,并说明为什么这些做法不能替代研究者本人的判断。

博士论文的写作阶段,本质上是一次信息整合:四年里读过的几百篇论文、散落在无数仓库里的代码、被放弃的设想、以及那些早已记不清细节的实验,都要被重新组织成一条自洽的论证线。这件事的难点通常不在「写」,而在于「找」——找到那句话该引哪篇文献,找到那段代码当时是怎么跑的,找到自己写下的结论是否真的和原文一致。本文整理一套用 AI 工具辅助完成这些收尾工作的具体做法,包括按 BibTeX 键检索引用、把多个实验仓库整合成可复现的单一代码库、以及逐条核对引用与原文是否一致。它适合已经完成主体研究、进入论文撰写与校对阶段的硕博研究生,也适合任何需要产出复杂长文并保证引用准确的人。

需要先说明一个前提:这些做法不是把思考外包给 AI。它们的目标不是让 AI 替你写论文,而是让你在有限的时间里产出一份比独自完成时更好的作品。在某些环节,它们甚至会显著增加你的工作量——因为核对、比对、重跑实验本身就要花时间。如果指望把一堆论文丢给模型让它生成综述,那得到的只会是学术垃圾,这一点在下面每个环节里都会反复出现。

准备工作

在开始之前,需要把几样东西准备好。这些准备工作决定了后面每一步能不能顺利进行。

文献库与 BibTeX 文件

如果你用 LaTeX 写作,最终一定会有一个包含数百条条目的 .bib 文件。每条条目长这样:

@article{sun2023coastline,
  title={Coastline extraction using remote sensing: A review},
  author={Sun, Weiwei and Chen, Chao and Liu, Weiwei and Yang, Gang and Meng, Xiangchao and Wang, Lihua and Ren, Kai},
  journal={GIScience \& Remote Sensing},
  volume={60},
  number={1},
  pages={2243671},
  year={2023},
  publisher={Taylor \& Francis}
}

其中 sun2023coastline 是引用键(citation key)。正文里通过 \cite{sun2023coastline} 这样的命令来引用它。这个键是后面所有自动化流程的锚点,务必保证它在整个文献库中唯一且稳定。

论文 PDF 的命名规范

把下载的论文 PDF 按「引用键 + 连字符 + 论文标题片段」重命名,例如:

sun2023coastline - Coastline extraction using remote sensing.pdf

这个习惯在平时看不出价值,但在做事实核查时会变得极其有用:它让你可以写脚本,根据一段正文里出现的引用键,自动把对应的论文文件挑出来归到同一个文件夹里。

把 PDF 转成纯文本

这一步是可选的,但强烈建议做。AI 工具的上下文窗口是有限的,一篇排版密集的长论文可能就占掉大半。用一个 Python 脚本把 PDF 里的文字抽出来存成 .txt,例如把 sun2023coastline.pdf 转成 sun2023coastline.txt,同样的上下文窗口就能装下更多篇论文。常用的抽取库包括 pypdfpdfplumber 等,具体选哪个取决于你的 PDF 是否含扫描页、公式和双栏排版。

工具与订阅

下面提到的做法都可以用主流 AI 公司的基础订阅完成,不需要额外的企业级方案。具体支持哪些功能、上下文窗口多大、每月额度多少,各家的政策变动频繁,请以官网当前信息为准。代码相关的操作需要一个支持读取本地仓库的编辑器或命令行代理环境。

操作步骤

第一步:搭建引用检索助手

论文写到后期,你往往能凭直觉写出一句正确的判断,也大致知道该引哪一批文献,但具体是哪一篇、哪一页,已经记不清了。三四年前读的论文,当时没有做摘要,现在要翻回去找那句话,成本极高。这个场景本质上是一个检索增强生成(RAG)任务,恰好是语言模型擅长的。

做法是建立一个项目,把 BibTeX 文件放进去,再放入背景章节里最可能被反复引用的那些重要论文。然后写一段系统指令,明确它的角色和输出格式:

You are my research assistant for my PhD thesis.
My topic is on applying deep learning for coastal erosion monitoring
in the context of the Irish coastline.

Your primary role is to find passages from research papers that I can
cite in my thesis.

If you cannot find a relevant paper in the current set of papers,
then search the internet for appropriate papers.

Important: Always provide the following when giving a citation:
1) The citation string from the bibtex.txt file
2) The name of the paper
3) Page number
4) The relevant text from the paper

使用时,把你写好的句子连同留空的引用位置一起贴进去。例如:

A key limitation of deterministic methods, like spectral indices,
is that they are susceptible to noise in satellite imagery caused by
atmospheric conditions like clouds and shadows~\cite{}, and other
factors like tidal~\cite{}, and seasonal variation~\cite{} or land
development~\cite{}.

模型会返回候选的引用键、论文名、页码和原文片段。要求它给出页码和原文片段,是整个设计里最关键的一环——它让你有能力去核对,而不是只能选择相信。

第二步:逐条核对,而不是批量信任

拿到建议的引用之后,必须回到原始论文,把那段文字放回上下文中读一遍,确认它确实支持你写下的判断。这一步不能省。把一批论文丢给模型让它生成摘要,然后直接把摘要当成文献综述,是近年来一些论文里非常明显的问题,这种做法几乎必然引入错误。更隐蔽的是,错误引用是一种不太被讨论的学术不端形式:你并没有抄别人的句子,但你归因错了。

这套流程之所以有效,前提是你对研究领域本身有足够理解,正文是你自己写的,模型只负责在你已经筛选过的文献集合里做检索。换句话说,把它当搜索工具用,而不是当摘要工具用。下面几个环节都遵循同样的原则。

第三步:整合分散的实验代码

博士期间的代码通常有几个特征:以 Python 为主,用于构建数据集、训练和评估模型,而不是跑生产环境;写的时候以能出结果为目标,整洁度有限;并且散落在很多个仓库里。到了写论文的阶段,你需要把它们整合成一个可以复现任意一个模型的仓库。

整合的流程可以拆成下面几步:

  1. 让代理读取所有包含建模代码的仓库,总结出各个实验分别做了什么。
  2. 让它给出一个整合方案,并列出所有可调超参数——也就是那些你在建模时做过的、可以改变的决定。
  3. 这些超参数应当能通过命令行参数在运行时调整。
  4. 你手动修正方案,重点检查超参数列表是否完整、是否有多余项。
  5. 让它按修正后的方案执行整合。

最终得到的应该是一个单一仓库,能够重新训练论文该章节里的任意一个模型。这能省下大量原本要花在复制粘贴和调试上的时间。

但同样地,这套做法只有在你对被整合的代码足够熟悉时才成立。你需要能读懂整合后的仓库,判断代理是否改错了地方、是否引入了意料之外的行为。最后一道检查是:用新仓库重新训练关键模型,把评估结果和原论文里的数字对比。如果对不上,说明整合过程中出了问题。

反过来说,如果你从零开始,让代理替你写出这一长串实验的全部代码,出错的概率很高;即使没出错,你也无法确信自己对方法的理解与代码实际做的事情一致——这在学术上是明确的不良实践。

第四步:把论文切块,准备事实核查

一篇两百页、两百多条引用的论文,真正会读它的人可能只有两三个,而真正在意其中细节的只有你自己。这意味着错误很难被发现:你必须极其细致地重读自己的文字,逐条核对引用、图表和指标,即便如此也几乎一定会漏掉东西。

事实核查的目标,是把「我引用的信息」和「原文实际说的内容」逐条比对。做法分四步。

第一步,用引用键重命名所有被引论文。如果你在博士期间就按「引用键 - 标题片段」的格式命名了 PDF,这一步已经完成了。它让后面的自动化切分成为可能。

第二步,把所有论文转成 .txt这一步是可选的,但能显著提高单次核查能覆盖的论文数量,原因前面已经说过:上下文窗口有限,纯文本比 PDF 省得多。

第三步,把论文正文切块,并按引用键归组论文。把论文按章节或小节切成独立的文本文件,例如背景章节的四个小节各存一个文件。然后写一个 Python 脚本,扫描每个文本块里出现的所有引用键,为每个块创建一个文件夹,把对应的论文文件复制进去。这样每次核查运行时,需要上传的材料就是现成的。

第四步,运行核查。把切好的正文块和对应的论文文本一起提交,让模型逐条比对:正文里的每个论断,是否真的能在所引论文中找到支持,页码和原文片段是什么。核查结果里凡是模型标出的可疑项,都要你自己回到原文确认一遍。

第五步:把 AI 用在其他校对任务上

除了引用核查,还有几类校对工作也适合交给模型处理:

  • 考虑上下文的拼写与用词检查,比普通拼写检查器更能识别同音词误用和术语不一致。
  • 交叉核对从大表格中派生出来的各项指标,确认正文里引用的数字与表格中的原始数值一致。
  • 基于你自己的论文内容,生成答辩可能被问到的问题,用来做答辩准备。

这些任务的共同点是:它们都要求模型基于你已经写好的材料工作,而不是替你生成内容。

一个完整示例

下面把引用核查这条链路串起来,走一遍最小可用的流程。假设你正在写背景章节的一个小节,文件名为 background_2.txt,内容里包含若干 \cite{} 命令。

先写一个脚本,扫描文本块中的引用键,并把对应的论文归集到独立目录:

import os
import re
import shutil

PAPER_DIR = "papers"          # 存放 sun2023coastline - xxx.pdf 的目录
CHUNK_FILE = "background_2.txt"
OUT_DIR = "factcheck/background_2"

os.makedirs(OUT_DIR, exist_ok=True)

text = open(CHUNK_FILE, encoding="utf-8").read()
keys = set(re.findall(r"\\cite\{([^}]+)\}", text))

for key in keys:
    for name in os.listdir(PAPER_DIR):
        if name.startswith(key):
            shutil.copy(os.path.join(PAPER_DIR, name), OUT_DIR)
            break

print(f"collected {len(keys)} citation keys into {OUT_DIR}")

运行之后,factcheck/background_2 目录里就只包含这一小节实际引用到的论文。接着把 background_2.txt 和这个目录里的论文文本一起提交,使用下面这段指令:

Below is a section of my PhD thesis, followed by the full text of the
papers it cites.

For every citation in the section:
1) Quote the sentence in my thesis that makes the claim.
2) Quote the passage in the cited paper that supports it.
3) Give the page number of that passage.
4) State clearly whether the passage supports the claim, partially
   supports it, or does not support it.

Do not summarise the papers. Only verify the specific claims.

输出会是一张逐条对照的清单。对每一条标记为「部分支持」或「不支持」的,回到原文确认,然后修改正文或更换引用。全部处理完之后,再进入下一个小节。

代码整合那条链路的结构类似:先让代理读取所有相关仓库并输出实验清单,再让它给出整合方案和超参数列表,你修正后执行,最后用新仓库重训关键模型并与原论文的评估数字对比。两条链路的共同点是,中间都有人工确认的环节,而且确认环节不是走过场。

注意事项

  • 不要盲目信任模型给出的引用。要求它输出页码和原文片段,就是为了让你能核对。跳过核对,错误引用就会进入论文,而这是一种不易被察觉的学术不端。
  • 不要让模型替你生成文献综述。把一批论文丢进去要求产出摘要,几乎必然产生错误,而且会跳过理解文献之间联系的过程——而这个过程本身正是形成你自己研究想法的途径。
  • 代码整合的前提是你熟悉原代码。如果你无法判断代理是否改错了地方,整合结果就不可信。最后必须用重训结果与原论文数字对比来验证。
  • 逐行手写代码有其价值。自动补全式的逐行编写能让你真正理解代码在做什么;完全交给代理生成,在论文截止日期和惰性的双重作用下,很容易变成不加验证地信任输出,最终得到一堆难以理解的复杂代码。
  • 这些做法会增加工作量,而不是减少。事实核查、重跑实验、逐条比对都要花时间。它们换来的是更可靠的作品,不是更轻松的流程。
  • 上下文窗口是实际约束。把 PDF 转成纯文本、把论文按章节切块,都是为了在有限窗口内塞进更多有效材料。
  • 工具的功能、额度与订阅政策会变。本文提到的能力范围请以各家官网当前信息为准。