
论文写作这件事过去半年我几乎把能踩的坑都踩了一遍。从最开始用聊天窗口一段一段地喂提示词到后来自己搭了一套基于 agent 的流水线中间经历了无数次生成的内容看着像那么回事、细看全是废话的崩溃时刻。现在回头看用 agent 写论文这件事真正的难点从来不是让模型写出字而是怎么把一篇论文拆成 agent 能稳定执行的工序以及怎么让 LaTeX 这个老古董和现代工具链和平共处。这篇内容适合两类人一类是正在写学位论文、期刊投稿想用 agent 提效但不知道怎么下手的研究生和科研人员另一类是已经会调 API、想搞清楚 agent 编排在长文档场景里到底怎么落地的开发者。我会把整套流程拆开讲包括为什么这么设计、每一步的坑在哪、LaTeX 环境怎么配才不折腾。1. 先想清楚 agent 写论文到底在写什么很多人一上来就问哪个大模型写论文最好用这个问题本身就问偏了。论文不是一篇文章它是一套有严格结构的论证系统摘要要压缩、引言要立论、相关工作要梳理脉络、方法要可复现、实验要能自证、结论要收敛。你让一个 agent 从头到尾写一篇论文它大概率会给你一篇读起来通顺、但逻辑链条断裂、引用全是编的东西。1.1 论文的可分解性决定了 agent 的编排方式我后来想明白一件事论文天然是分层的这恰好对应 agent 的分工。摘要和结论是收敛型任务需要把全文信息压缩引言和相关工作是展开型任务需要往外扩、建立上下文方法和实验是结构化任务需要严格对齐模板和真实数据。这三类任务的提示词策略、上下文长度需求、甚至适合的模型都不一样。所以我的做法是不追求一个万能 agent而是搭一条流水线每个环节一个专职 agent中间用结构化的中间产物比如 JSON 或 Markdown 大纲传递。这样做的好处是每个环节可以单独调试、单独换模型出问题能定位到具体是哪一步崩的。坏处是编排复杂度上去了但对论文这种长周期、高要求的任务来说可控性比省事重要得多。1.2 为什么不能指望 agent 一次成稿我实测过让模型一次性生成八千字的论文初稿结果是这样的前两千字质量还行中间开始重复自己后面直接开始编造实验数据和参考文献。这不是模型不行是长文本生成里注意力衰减和幻觉累积的必然结果。agent 的价值恰恰在于把长任务切成短任务每一步都在模型的舒适区内完成再用程序化的方式把结果拼起来。这里有个关键认知agent 不是更聪明的写作工具它是任务调度器 上下文管理器。真正干活的是模型agent 负责的是决定现在该让模型干什么、给它看什么、拿到结果后怎么处理。想通这一点后面的架构设计就顺了。1.3 一个反直觉的结论agent 最该帮你做的不是写是查和改写初稿其实是最容易的部分难的是改。论文的修改包括逻辑一致性检查、术语统一、引用格式对齐、图表编号核对、公式符号一致性。这些活儿人做起来极其枯燥且容易漏恰恰是 agent 最擅长的——它有无限的耐心可以逐段逐句地比对。我现在的工作流里写作 agent 只占三成工作量剩下七成是各种审稿 agent和校对 agent。这个比例是我踩了很多坑之后才调过来的一开始我也以为重点是生成。2. 搭一条能跑通的论文 agent 流水线讲完思路直接上架构。我现在的流水线分六个阶段每个阶段是一个独立的 agent 或 agent 组中间产物全部落盘成文件方便回溯和人工介入。2.1 阶段划分与每个 agent 的职责边界阶段Agent 角色输入输出关键约束1选题拆解 agent研究主题、目标期刊结构化大纲 JSON必须输出章节树和每节要点2文献梳理 agent大纲、关键词相关工作脉络 引用候选引用必须来自真实检索结果3方法撰写 agent方法要点、公式方法章节 LaTeX符号表必须先定义4实验描述 agent实验数据、图表实验章节 LaTeX数字必须来自数据文件5一致性审稿 agent全文 LaTeX问题清单只报问题不改稿6格式校对 agent全文 LaTeX修正后的 LaTeX只动格式不动内容这张表是我迭代了四五版才定下来的。早期我把阶段 3 和 4 合并成一个正文撰写 agent结果它经常把方法里的符号和实验里的变量搞混。拆开之后每个 agent 的上下文更干净出错率明显下降。2.2 中间产物为什么必须落盘我强烈建议每一步的输出都写成文件而不是在内存里传来传去。原因有三个第一出问题时你能看到是哪一步的产物坏了第二你可以手动改中间产物再喂给下一步相当于给流水线加了人工干预点第三长任务跑一半崩了不用从头再来。我的目录结构大概是这样paper_project/ outline.json # 阶段1产物 references.json # 阶段2产物 sections/ method.tex experiment.tex intro.tex review_issues.md # 阶段5产物 main.texoutline.json里我会存章节树、每节的写作要点、目标字数。references.json存的是真实检索到的文献条目包含标题、作者、年份、DOI 或 arXiv 编号。这里必须强调引用一定要来自真实检索不能让模型自己编。我吃过这个亏审稿意见里被指出三条参考文献根本不存在那种尴尬不想再经历第二次。2.3 上下文怎么喂才不浪费 token长文档场景下token 就是钱也是延迟。我的原则是每个 agent 只给它完成当前任务必需的最小上下文。写方法章节时不需要把整篇引言都塞进去只需要方法要点、符号表、以及引言的最后一段用来衔接。写实验章节时需要的是实验数据、图表说明、以及方法章节里定义的符号。具体做法是维护一个上下文选择器根据当前阶段从落盘文件里挑相关片段。这个选择器可以很简单就是按章节名和关键词做匹配不需要上向量检索。我试过用 embedding 做语义检索效果提升有限反而增加了复杂度和不确定性。对论文这种结构清晰的任务基于结构的硬匹配更可靠。3. LaTeX 环境别在配置上浪费生命agent 生成的最终产物是 LaTeX所以环境必须稳。我见过太多人卡在 LaTeX 安装和编辑器配置上还没开始写论文就先被环境劝退。这一节讲怎么用最少的时间把环境搭好。3.1 安装方式的选择逻辑Windows 上我推荐直接装 TeX Live 完整版虽然下载量大几个 G但省心宏包齐全不会出现缺个包编译不过的情况。Mac 上用 MacTeX本质也是 TeX Live。Linux 上 apt 或包管理器装 texlive-full 就行。有人会推荐在线编译平台确实省事但论文涉及未发表数据时把源文件传到第三方平台有风险而且 agent 流水线需要本地文件读写在线平台反而不好集成。所以我的建议是本地装完整版一次装好管几年。安装完之后验证一下tex --version pdflatex --version xelatex --version三个命令都能输出版本号就说明装好了。中文论文建议用 xelatex 编译配合 ctex 宏包字体问题少很多。3.2 编辑器与 agent 的协作方式编辑器我用 VS Code 配 LaTeX Workshop 插件这个组合的好处是保存即编译、错误定位准、PDF 预览方便。但更重要的是VS Code 的工作区概念和 agent 流水线的文件结构天然契合——agent 往sections/里写文件编辑器实时编译你能立刻看到效果。配置上有个小技巧在.vscode/settings.json里把编译链设成 xelatex并开启latex-workshop.latex.autoBuild.run为onSave。这样 agent 每次写完一个章节文件你切回编辑器就能看到编译结果反馈闭环非常快。注意agent 批量写文件时如果编辑器同时触发自动编译可能会因为文件写入不完整而报错。我的做法是让 agent 写完一个完整章节再触发编译而不是每写一行就编译。3.3 论文模板从哪来模板这件事不同场景来源不同。期刊投稿一般期刊官网会提供 LaTeX 模板直接下载用。学位论文用学校研究生院发的模板。会议论文用会议官方模板比如各种 IEEE、ACM 格式。数学建模类竞赛也有官方模板。拿到模板后第一件事是先用模板自带的示例内容编译一遍确认能出 PDF。这一步能排除掉 90% 的环境问题。确认没问题后再把 agent 生成的内容往模板的对应位置填。千万不要一上来就把模板改得面目全非先跑通再改。4. 让 agent 写出像论文的内容提示词与约束设计环境搭好之后核心问题来了怎么让 agent 写出来的东西不是AI 味的废话。这一节讲我总结的几条硬约束。4.1 用符号表和术语表锁死一致性论文里最容易被 agent 搞乱的就是符号和术语。同一个变量方法章节叫\alpha实验章节可能就变成a了。解决办法是在流水线开始前先让 agent 生成一份符号表和术语表落盘成文件之后每个写作 agent 都必须先读这份表。符号表大概长这样{ symbols: [ {latex: \\alpha, meaning: 学习率, first_defined: method}, {latex: \\mathcal{L}, meaning: 损失函数, first_defined: method} ], terms: [ {en: attention mechanism, zh: 注意力机制, abbr: AM} ] }每个写作 agent 的提示词里都带上严格遵守符号表不得引入未定义符号这条约束。实测下来这一条能消掉大部分一致性问题。4.2 引用必须走检索不能让模型自由发挥前面提过引用造假是 agent 写论文最大的雷。我的做法是文献梳理 agent 不直接生成引用而是先根据关键词去检索可以用学术搜索引擎的 API或者手动整理一批候选文献把真实文献的元数据存进references.json然后写作 agent 只能从这个文件里挑引用挑的时候用编号引用比如\cite{ref1}最后统一替换成 BibTeX key。这样做的代价是文献覆盖面受限于你检索到的范围但换来的是引用绝对真实。对论文来说真实性远比覆盖面重要。我宁可少引几篇也不想被审稿人抓到假引用。4.3 控制AI 味的几个具体手段AI 生成的学术文本有几个典型特征爱用值得注意的是综上所述在...的背景下这类过渡词句子长度均匀喜欢把简单的事说复杂。要压掉这些特征我在提示词里加了几条硬规则禁止使用值得注意的是综上所述总而言之等套话单句不超过 40 个词长短句交替每个论断后面必须跟具体的证据或数据不允许空泛陈述方法描述用主动语态避免被...所...的被动堆砌另外我会在流水线最后加一个去 AI 味的审稿 agent专门扫这些特征词命中就标出来让人工决定改不改。这个 agent 不自动改因为有些过渡词在特定语境下是合理的全删反而生硬。5. 一致性审稿 agent流水线里最值钱的一环前面说过agent 最该帮你做的是查和改。这一节详细讲一致性审稿 agent 怎么设计这是我认为整条流水线里价值最高的部分。5.1 审稿 agent 该查哪些维度我把审稿拆成几个独立的检查维度每个维度一个专门的 agent互不干扰逻辑一致性前后论断是否矛盾假设是否在结论里被违背符号一致性所有符号是否在符号表里是否有未定义就使用的数字一致性正文里提到的数字是否和图表、表格里的对得上引用一致性所有\cite是否在参考文献里有对应条目反之亦然格式一致性图表编号、公式编号、章节编号是否连续无跳号每个 agent 只干一件事输出一份问题清单不直接改稿。这样设计的原因是自动改稿风险太高一个误判可能把正确的内容改错。让人看着清单决定改不改安全得多。5.2 数字一致性检查的实现思路数字一致性是最容易出问题、也最容易被忽略的。论文里同一个实验结果摘要里写 95.2%正文里写 95.3%表格里又是 95.2%这种错误人眼很难发现。我的做法是让 agent 先把全文所有数字连同上下文提取出来结构化成一个列表然后按数字 语义标签分组比对。比如所有提到准确率的数字应该来自同一个数据源。实现上不需要多复杂正则提取数字再用模型判断每个数字的语义归属最后比对同组数字是否一致。# 伪代码示意 import re numbers re.findall(r\d\.?\d*%?, latex_text) # 让模型为每个数字标注语义标签 labeled label_numbers_with_llm(numbers, context) # 按标签分组检查组内是否一致 for tag, group in group_by_tag(labeled): if len(set(group)) 1: report_inconsistency(tag, group)这段逻辑不复杂但能抓到很多隐蔽错误。我实测下来一篇八千字的论文平均能查出三到五处数字不一致。5.3 审稿结果怎么呈现才不淹没重点审稿 agent 如果事无巨细地报你会被淹没。我的做法是给问题分级致命逻辑矛盾、假引用、重要符号未定义、数字不一致、次要格式小瑕疵。输出时按级别排序致命和重要的问题必须处理次要的可以批量处理。问题清单用 Markdown 表格呈现包含位置、问题描述、建议处理方式。位置要精确到行号或章节方便定位。我现在的清单大概长这样级别位置问题建议致命3.2 节引用的 ref7 在参考文献中不存在删除或替换为真实文献重要表 2正文写 95.2%表格写 95.3%核对原始数据后统一次要4.1 节公式编号跳号重新编译6. 实操中踩过的坑与应对前面讲的都是应该怎么做这一节讲实际会怎么坏。这些坑都是我真实踩过的写出来帮你省时间。6.1 agent 跑一半崩了怎么办长流水线最怕跑到一半崩。我的应对是每个阶段结束后把状态写进一个state.json记录当前进行到哪个阶段、哪些文件已生成。重跑时先读这个文件跳过已完成的阶段。这个机制看起来简单但能省大量重跑时间。另外每个 agent 的调用都要包一层重试逻辑。模型 API 偶尔超时或返回格式错误是常态重试三次基本能解决。重试时把上次的错误信息带上让模型知道要修正什么。6.2 生成内容看着对但经不起推敲这是 agent 写论文最隐蔽的坑。模型生成的方法描述可能逻辑自洽但和你实际做的方法对不上生成的实验分析可能头头是道但结论超出了数据支持的范围。这类问题审稿 agent 也难查因为它不知道你真实做了什么。唯一的解法是人工核对关键章节。我的习惯是方法和实验章节必须逐句核对确保每一句都能对应到真实的方法和数据。引言和相关工作可以放宽因为这两部分主要是组织和表达事实性要求相对低。摘要和结论必须最后写基于已核对过的正文来写不能提前生成。6.3 LaTeX 编译报错的常见原因agent 生成的 LaTeX 经常编译不过常见原因有几个特殊字符没转义比如%、、_、宏包缺失、括号不匹配、中文没放在 ctex 环境里。我的做法是在写作 agent 的提示词里明确要求转义特殊字符并且在流水线最后加一个编译验证步骤编译不过就把错误信息回喂给 agent 让它修。xelatex -interactionnonstopmode main.tex compile.log 21 if grep -q Error compile.log; then # 把错误信息提取出来回喂给修复 agent fi这个自动修复循环能解决大部分编译问题剩下解决不了的通常是模板本身的问题需要人工介入。6.4 别让 agent 碰的东西有几样东西我坚决不让 agent 自动改参考文献的 BibTeX 条目格式错一点就编译不过、图表的具体数值必须来自真实数据、作者信息和致谢涉及真实信息。这些要么人工写要么人工核对后再用。agent 适合处理的是有明确对错标准、且错了容易发现的任务涉及真实性和个人信息的任务不适合交给它。7. 关于模型选择和成本的一点经验最后聊聊模型。写论文这个场景我的体感是不同环节适合不同模型。展开型任务引言、相关工作适合表达能力强、知识面广的模型收敛型任务摘要、结论适合指令遵循好、能压缩信息的模型结构化任务方法、实验适合严谨、不爱自由发挥的模型。成本上一条完整流水线跑下来token 消耗主要在文献梳理和一致性审稿这两个环节因为它们要处理大量文本。写作环节反而消耗不大因为每次只处理一个章节。我的优化思路是审稿环节可以用便宜一点的模型做初筛把明显没问题的段落过滤掉只把可疑段落交给强模型细查。这样能省不少钱效果损失很小。至于具体用哪个模型这个领域变化太快我给不了长期有效的建议。我的原则是写作环节用当前综合能力最强的审稿环节用性价比最高的检索环节用专门的检索工具而不是通用模型。按这个原则选基本不会错。整套流水线跑顺之后我写一篇八千字论文的时间从两周压缩到了三四天而且质量更稳定——因为一致性检查是程序化做的不会像人一样疲劳漏检。但我要诚实地说agent 替代不了你对研究的理解。方法是你想的实验是你做的agent 只是帮你把这些整理成规范的表达。把它当成一个不知疲倦的科研助理而不是一个能替你思考的作者这个定位才是对的。