mcpField
S
section-writing-agent

section-writing-agent

github.com/ar9av文档处理69367 次安装2 周前更新
代码仓库

关于 section-writing-agent

section-writing-agent 是 PaperOrchestra 的一项技能,通过一次 LLM 调用撰写并编译完整的 LaTeX 研究论文。它结合大纲、研究材料、已核验引文、图像和会议规范,并保留已写好的章节。

主要功能

  1. 01撰写完整 LaTeX 论文
  2. 02依据实验数据生成表格
  3. 03纳入提供的图像与说明文字
  4. 04检查引文和 LaTeX 结构
  5. 05根据 TeX 包可用性调整写法

适用场景

  1. 01将大纲和实验日志转为论文初稿
  2. 02保留现有章节并完成整篇稿件
  3. 03在后续修订前检查引文与 LaTeX 完整性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ar9av/paperorchestra --skill section-writing-agent

安装后在 Claude Code 中输入/section-writing-agent确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
figure-integration.md
latex-table-patterns.md
prompt.md
scripts/
extract_metrics.py
latex_sanity.py
orphan_cite_gate.py
table_lint.py
test_table_lint.py

详细介绍

Section Writing Agent(步骤 4)

忠实实现 PaperOrchestra 中的 Section Writing Agent (Song 等人,2026,arXiv:2604.05018,§4 步骤 4,附录 F.1 第 47–49 页)。

成本:一次 LLM 调用(附录 B:“Section Writing Agent(1 次调用):一次全面的多模态调用,用于起草并编译完整的 LaTeX 论文”)。切勿将其拆分为按章节调用——论文明确将其设计为一次全面调用,以便模型在各章节之间保持全局连贯性。

输入

  • workspace/outline.json — 总体计划
  • workspace/inputs/idea.md — 技术细节
  • workspace/inputs/experimental_log.md — 用于表格和定性分析的原始数据
  • workspace/drafts/intro_relwork.tex — 模板,其中 引言 + 相关工作已由步骤 3 填写完毕。从此文件开始。必须原样保留导言区、宏包列表、样式以及已填写的两个章节。
  • workspace/citation_pool.json — 引文映射(每篇已验证论文对应 {key, title, abstract})
  • workspace/refs.bib — BibTeX 文件
  • workspace/inputs/conference_guidelines.md — 格式规则
  • workspace/figures/ — 步骤 2 生成的 PNG 文件(用作多模态视觉输入!)
  • workspace/figures/captions.json — 每个 figure_id 对应的标题文本
  • workspace/tex_profile.json — TeX 宏包可用性标志(由步骤 0 中的 check_tex_packages.py 写入)。**生成任何 LaTeX 之前都要先读取此文件。**它会告知你安装了哪些宏包,以便在写作前选择合适的交叉引用模式、字体宏包等,而不是等尝试编译之后再选择。

输出

  • workspace/drafts/paper.tex — 填写完所有章节的完整 LaTeX 论文。步骤 5 的 Refinement Agent 将对此文件进行迭代修改。

操作方法

0.5. 读取 tex_profile.json 并选择 LaTeX 模式

在编写提示词之前,读取 workspace/tex_profile.json,并在生成的论文中对每个 LaTeX 选择应用以下规则:

配置标志True → 使用False → 改用
use_cleveref\cref{fig:X}、\cref{tab:Y}Figure~\ref{fig:X}、Table~\ref{tab:Y}
use_nicefrac\nicefrac{a}{b}$a/b$
use_microtype\usepackage{microtype}省略此行
use_t1_fontenc\usepackage[T1]{fontenc}省略此行

如果 tex_profile.json 不存在(旧工作区),则默认使用安全回退列(不使用 cleveref、nicefrac、microtype 或 T1 fontenc)。

1. 从实验日志中预先提取指标

运行确定性辅助程序:

python skills/section-writing-agent/scripts/extract_metrics.py \
    --log workspace/inputs/experimental_log.md \
    --out workspace/metrics.json

此程序会将 ## 2. Raw Numeric Data 部分中的 Markdown 表格解析为结构化 JSON。Section Writing Agent 会使用这些数据构建 LaTeX booktabs 表格,而不必从原始文本中重新推导数值。请阅读 references/latex-table-patterns.md,了解 booktabs 规范。

2. 撰写提示词并进行一次多模态调用

加载 references/prompt.md(来自 App. F.1 的 Section Writing Agent 提示词原文)。在其前面添加 ../paper-orchestra/references/anti-leakage-prompt.md 中的 Anti-Leakage Prompt。

然后附上正在撰写的各章节的写作约束。从 skills/shared/section_rhetoric.md 中提取这些约束——全局规则,以及 Abstract、Method、Experiments 和 Conclusion 的模板(Intro 和 Related Work 已由 Step 3 撰写;不要重新打开它们)。App. F.1 提示词规定每个章节必须包含什么;修辞模板则规定段落的作用及其顺序。缺少这些模板时,模型生成的章节虽然内容齐全,但各段落采用的写作方式都相同,Step 5 的审阅者会因此降低其 Logical Flow 得分。

用户消息包含:

  • outline.json — 完整内容
  • idea.md — 完整内容
  • experimental_log.md — 完整内容(包括表格和正文)
  • intro_relwork.tex — 完整内容(将作为提示词中的 template.tex)
  • citation_pool.json — 完整内容(将成为 citation_map.json)
  • conference_guidelines.md — 完整内容
  • figures_list — 包含 {figure_id, filename, caption} 的数组,来自 captions.json 和文件列表
  • 实际的图像 PNG 文件,作为多模态图像输入,以便模型查看图像,并在正文中准确描述和引用图像。

如果你的宿主 LLM 不支持视觉输入,则退回到纯文本模式:将 captions.json 中的说明作为描述传入,并告知 Agent 它无法直接查看图像。质量会明显下降(论文指出,视觉依据能显著提升图文对应的准确性),但流程仍可完成。

3. 保存输出

Agent 的回复会用 \``latex ... ```围起来。提取 LaTeX 代码并保存到workspace/drafts/paper.tex`。

4. 运行确定性检查
# Orphan citation gate: every \cite{KEY} must exist in refs.bib
python skills/section-writing-agent/scripts/orphan_cite_gate.py \
    workspace/drafts/paper.tex workspace/refs.bib

# Latex sanity: matched braces, matched begin/end, no unescaped specials
python skills/section-writing-agent/scripts/latex_sanity.py \
    workspace/drafts/paper.tex

# Anti-leakage post-check: no author names, emails, affiliations
python skills/paper-orchestra/scripts/anti_leakage_check.py \
    workspace/drafts/paper.tex

# Table conventions: booktabs rules, caption placement, metric direction,
# decimal precision. ERRORs block; WARNs go into the re-prompt.
python skills/section-writing-agent/scripts/table_lint.py \
    workspace/drafts/paper.tex

如果任何检查失败,则重新调用撰写模型,并将检查的错误报告附加到用户消息中,要求 Agent 修复具体问题。不要尝试手动修复检查失败项——模型需要看到自己的错误。

提示词中的关键规则

以下内容摘自 references/prompt.md(附录 F.1,第 47–49 页)。宿主 Agent 在撰写调用中必须遵守:

保留已有内容
  • 不要修改 intro_relwork.tex 中已填写章节的文本、风格或内容。原样保留 Intro 和 Related Work。
  • 保持导言区(宏包、文档类、样式)完全不变。
  • 如果缺少标题,请拟定一个合适的标题。如果缺少作者姓名,请补上(但 Anti-Leakage Prompt 不允许虚构真实姓名——双盲审稿时请使用 “Anonymous Authors” 之类的占位文本)。
数据和表格
  • 为实验结果创建 LaTeX 表格。
  • 直接从 experimental_log.md 提取数值。不得臆造数字——使用日志中的准确数值。
  • 使用 booktabs 宏包格式:\toprule、\midrule、\bottomrule。
  • 除非明确放在附录中,否则所有表格都必须出现在 Conclusion 章节之前。
引用
  • outline.json 为每个子章节提供 citation_hints。对于每条提示,在 citation_pool.json 中(按标题或内容)查找匹配的键,并在 \cite{...} 中使用该键。
  • 只能使用 refs.bib 中的键。 编造或猜测键会违反 Lit Review Agent 已核验的文献池。
  • 阅读所引用论文在 citation_pool.json 中的摘要。 利用摘要内容写出有关这些工作的具体、准确的句子,不要笼统地写成“[A, B] 提出了用于 X 的方法”。
撰写内容
  • 按照 outline.json 中的 section_plan 结构,准确撰写缺失的章节。层级规则:如果存在 4.1,就必须存在 4.2。
  • 在适当且有 idea.md 或 experimental_log.md 直接支持的情况下,使用正式的数学方程、符号和定义。不要臆造数学内容。 不要为了使用复杂数学而使用复杂数学。
  • 始终提供详细的消融研究和实验结果定性分析:哪些方法有效、哪些无效,以及原因。
  • 可选:在结尾讨论局限性和未来工作。
  • 如果附录包含任何内容,附录必须置于参考文献之后,并另起新页。
图表与视觉保真度
  • 提供的图片文件就是图表的实际图片。必须忠实、准确地描述这些图片。不要臆造与图中证据相矛盾的解读。
  • 使用 figures/ 中提供的所有图表。在 \includegraphics 命令中使用包含扩展名(例如 .png)的准确文件名。
  • 不要将多个图表合并或组合到同一个图中。
  • 如果论文采用双栏格式,优先使用单栏图(\begin{figure}),除非图表非常宽。
  • 除非明确放在附录中,否则所有图表都必须出现在结论部分之前。
  • 如有必要,可改进图注,但 captions.json 中已提供图注,通常应直接使用。
  • 不要在图注文字中加入“Figure X”——LaTeX 会自动编号。
修辞结构

模板和检查清单位于 skills/shared/section_rhetoric.md。撰写时必须遵守以下约束:

  • 一段表达一个观点,并在首句点明。 如果一段到第五句才提出要点,审稿人很可能会略读过去。
  • 摘要根据贡献数量,采用以下三种模板之一:挑战→贡献、挑战→洞见→贡献,或多项贡献(每项贡献都要在同一句中说明其优势)。
  • 方法小节需包含三要素——设计(将前向过程写成 输入 → 步骤 → 步骤 → 输出),然后说明动机(因为 X 会失败,所以我们设计了 Y),再说明技术优势。只讲设计的小节读起来像系统手册;只讲动机的小节则像宣传文案。
  • 实验需回答三个问题:是否优于强基线、哪些设计选择带来了增益(通过消融研究给出差值),以及方法的泛化能力如何。引言中提出的每项贡献都必须至少对应一项实验。
  • 结论中的局限性应界定适用范围,而非承认缺陷。“我们只在短序列上进行评估”是在界定方法的适用范围;“我们没有调整学习率”则会招致否定。
  • 术语在摘要至结论之间必须保持一致。 每个概念只使用一个名称。
风格
  • 采用顶级机器学习会议论文的语气:精炼、客观、技术性强。
  • 与原始 template.tex 的缩进和间距风格保持一致。不要改变整体 LaTeX 风格。
LaTeX 完整性
  • 输出必须开箱即用,能够无误编译。
  • 所有 \begin{X} 都必须与 \end{X} 匹配(例如,\begin{figure*} 必须使用 \end{figure*} 闭合,不能用 \end{figure})。
  • 不要将 \usepackage[capitalize]{cleveref} 改成 \usepackage[capitalize]{cleverref}——不存在 cleverref.sty。
  • 务必在 \bibliographystyle{...} 前立即输出 \clearpage。 否则,LaTeX 浮动算法延后的图表可能会出现在参考文献部分内部或之后——这是一个难以察觉的版面缺陷,只有在编译后的 PDF 中才会显现。\clearpage 会强制输出所有待处理的浮动体,然后才开始排版参考文献。详情请参阅 references/latex-table-patterns.md。
  • 交叉引用:优先使用 Figure~\ref{fig:X} 和 Table~\ref{tab:Y}, 而不是单独使用 \ref{fig:X}。当 cleveref 不可用时,这样做是必要的,也能确保所有情况下的文本都易于阅读。只有在确认存在 cleveref.sty 时才使用 \cref{...}。
输出格式
  • 将完整更新后的 template.tex 包在 \``latex ... ```` 中。
  • 之前为空的章节现在必须补充完整。
  • 之前已填写的章节(Intro、Related Work)应基本保持不变;仅为保持一致性而做调整。

资源

  • references/prompt.md — App. F.1 中 Section Writing Agent 提示词的原文
  • references/latex-table-patterns.md — booktabs 规则及根据日志生成表格的示例
  • references/figure-integration.md — \includegraphics、双栏处理及图表位置
  • scripts/extract_metrics.py — 将 experimental_log 中的 Markdown 表格转换为 JSON
  • scripts/latex_sanity.py — 检查不匹配的花括号、环境及特殊字符
  • scripts/orphan_cite_gate.py — 检查每个 \cite{KEY} 是否都存在于 refs.bib 中
  • scripts/table_lint.py — 新增 booktabs 规则违规及表格可读性规范
  • skills/shared/section_rhetoric.md — 新增各章节的结构模板(摘要变体、模块三元组、实验问题)及检查清单

评论

支持 Markdown