关于 content-refinement-agent
content-refinement-agent 是 PaperOrchestra 的论文迭代评审与修订技能。它结合量规评审、证据检查和修订记录,并以确定性规则决定接受、回退或停止迭代。
主要功能
- 01模拟基于量规的同行评审
- 02核对论点与实验记录
- 03生成用于结构评审的反向大纲
- 04追踪修订与评审发现
- 05为草稿评分并划分决策等级
- 06接受、回退或停止迭代
适用场景
- 01通过多轮评审完善论文草稿
- 02标记缺乏支持的数值论断
- 03选定评分最高的已接受草稿版本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ar9av/ paperorchestra --skill content-refinement-agent安装后在 Claude Code 中输入/content-refinement-agent确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai-failure-modes.mdclaim-evidence-map.mdda-reviewer.mdhalt-rules.mdprompt.mdreverse-outline.mdreviewer-rubric.mdsafe-revision-rules.mdwriting-quality-check.mdscripts/apply_worklog.pyconcession_guard.pydecision_band.pyreverse_outline.pyscore_delta.pyscore_trajectory.pysnapshot.pytest_reverse_outline.pyupdate_critique_memory.py详细介绍
内容精修 Agent(步骤 5)
忠实实现 PaperOrchestra 中的内容精修 Agent (Song 等人,2026,arXiv:2604.05018,§4 步骤 5,附录 F.1,第 49–51 页)。
成本:约 5–7 次 LLM 调用(附录 B),通常约进行 3 轮精修,每轮 包括一次审阅调用和一次修订调用。
论文指出,此步骤是提升整体质量的最大贡献因素之一:仅精修一项就使录用率绝对提升了 +19%(CVPR)和 +22%(ICLR)(图 4)。务必做好此步骤。
输入
workspace/drafts/paper.tex— 步骤 4 的输出workspace/inputs/conference_guidelines.mdworkspace/inputs/experimental_log.md— 作为幻觉检查的事实依据workspace/citation_pool.json/workspace/refs.bib— 允许使用的参考文献
输出
workspace/refinement/iter1/、iter2/、iter3/— 每轮迭代的快照,包含paper.tex、paper.pdf、review.json、score.jsonworkspace/refinement/worklog.json— 仅追加的决策历史记录workspace/final/paper.tex和workspace/final/paper.pdf— 最佳已接受快照的副本
精修循环
prev_score = score(paper.tex) # baseline from initial draft
snapshot iter0/
for iter in 1..ITER_CAP (default 3):
1. simulate_review(paper.tex) → review.json
(uses `references/reviewer-rubric.md` rubric)
2. apply_revision(paper.tex, review.json) → new_paper.tex
(uses verbatim Refinement Agent prompt at `references/prompt.md`)
3. snapshot iter<N>/ with new_paper.tex, review.json
latexmk -pdf new_paper.tex → iter<N>/paper.pdf
4. score(new_paper.tex) → curr_score
5. decide via score_delta.py:
- if curr.overall > prev.overall: ACCEPT
- elif curr.overall == prev.overall and net_subaxis ≥0: ACCEPT
- else: REVERT
6. apply_worklog.py to append the decision
7. if REVERT or no actionable weaknesses or iter == ITER_CAP: HALT
paper.tex ← new_paper.tex (only on ACCEPT)
prev_score ← curr_score
cp <best iter>/paper.tex → workspace/final/paper.tex
HALT 时的“最佳”快照,是整体得分最高且已接受的快照。若因 REVERT 而停止,则最佳快照为回退前紧邻的上一轮迭代。
步骤说明
0. 精修前完整性关卡
在对初稿进行快照或评分之前,按顺序运行两个关卡:
关卡 A — AI 失败模式(加载 references/ai-failure-modes.md,只运行一次):
加载 references/ai-failure-modes.md(其中指向 skills/shared/ai_failure_modes.md)。
对草稿和输入运行全部 7 项检查。此关卡只在第 1 轮迭代开始时运行一次。
- 已确认的失败 → 在 worklog.json 中写入 HALT 条目,向用户报告,然后停止。
- 疑似失败 → 在 paper.tex 中添加 WARNING 注释,在 worklog.json 中记录,然后继续。
- 未发现失败 → 继续。
关卡 B — 主张与证据溯源(运行一次,WARN 关卡):
python skills/paper-orchestra/scripts/claim_evidence_gate.py \
--paper workspace/drafts/paper.tex \
--log workspace/inputs/experimental_log.md \
--out workspace/claim_evidence_report.json \
--out-md workspace/claim_evidence_map.md
此关卡会将草稿中的每个数字归类为 supported(该值出现在 experimental_log.md 中)、attributed(句子带有引文或先前工作提示语)或 needs evidence(两者都不满足)。只有第三类才算发现。请参阅 references/claim-evidence-map.md。
退出码为 0 → PASS,正常继续。
退出码为 1 → WARN:发现缺乏支持的数字主张。按以下格式记录到 worklog.json:
{gate: "claim_evidence", status: "WARN", unsupported_count: N, report: "workspace/claim_evidence_report.json"}
将 workspace/claim_evidence_map.md 中 needs evidence 类别的行作为额外指示传给第 3 步的修订 Agent:“以下数值出现在论文中,但无法通过 experimental_log.md 中的记录佐证,且没有引文——请根据记录的数值重新表述、注明来源,或删除该主张。不要为了让数字显得合理而把句子改得含糊不清。”如果某一行在两轮迭代后仍未解决,应将其删除,而不是再次改写。
不要因关卡 B 的警告而停止;修订 Agent 会处理这些问题。
关卡 C — 反向大纲(运行一次,供参考):
python skills/content-refinement-agent/scripts/reverse_outline.py \
--paper workspace/drafts/paper.tex \
--out workspace/reverse_outline.md \
--json workspace/reverse_outline.json
将草稿精简为每段一行,即主题句,并标记没有主题句、包含两个主旨或引文堆砌的段落。在首次调用审稿人之前,阅读 workspace/reverse_outline.md,并将其作为 Logical Flow 维度的输入传入审稿调用。结构性发现应作为 重排 / 合并 / 拆分 / 删除 指示加入修订议程;句子层面的改写无法解决顺序问题,而花在润色顺序错误章节上的迭代仍计入预算。请参阅 references/reverse-outline.md。
关卡 D — 阅读研究简报(每次运行,无退出码):
如果 workspace/research_brief.md 存在,请在所有审稿调用之前阅读。将第 4 节“证据薄弱的章节”列表作为额外背景信息传给 Devil's Advocate 审稿人。这有助于找出需要进行 CRITICAL 级审查的高风险章节。
0b. 对初稿进行快照
python skills/content-refinement-agent/scripts/snapshot.py \
--src workspace/drafts/paper.tex \
--dst workspace/refinement/iter0/
这会创建 iter0/paper.tex。然后编译为 iter0/paper.pdf:
cd workspace/refinement/iter0/ && latexmk -pdf -interaction=nonstopmode paper.tex
为其评分(参见下方的第 1 步)→ iter0/score.json。
1. 模拟同行评审
对于从 1 开始的每一轮 N:
写作质量预检查(每轮开始时执行): 加载
references/writing-quality-check.md,并根据当前草稿运行 5 类检查清单
(类别 A–E)。记录违规项,并将其加入修订议程。
在调用评审者之前更新批评记忆(仅限第 N ≥ 2 轮——第 1 轮跳过):
python skills/content-refinement-agent/scripts/update_critique_memory.py \
--worklog workspace/refinement/worklog.json \
--review workspace/refinement/iter<N-1>/review.json \
--iter <N> \
--out workspace/refinement/critique_memory.json
这会生成 critique_memory.json,其中包含 focus_on(持续未解决的问题)
和 do_not_reflag(已解决的问题)。将这两个列表原样注入评审者系统提示词:
CRITIQUE MEMORY — you must honour this before reviewing:
FOCUS ON (flagged in prior iterations, not yet resolved — prioritise these):
<critique_memory.focus_on items, one per line>
DO NOT RE-FLAG (already addressed in prior iterations):
<critique_memory.do_not_reflag items, one per line>
这样可以防止评审者重复发现已修复的问题,也避免其漏掉确实陷入僵局的问题。
为当前草稿重新生成反向大纲(reverse_outline.py,Gate C),并在评审者的用户消息中附上 workspace/reverse_outline.md。评审者会根据主题句序列而非对行文的整体印象来评定 Logical Flow,这使该维度的变化源于结构,而非风格。
将 references/reviewer-rubric.md 加载为模拟评审者调用的系统提示词。评审者会阅读 iter<N-1>/paper.pdf(如果你的宿主 LLM 不支持输入 PDF,则阅读 paper.tex),并生成一份包含优点、缺点、问题和各维度评分的 JSON。
该评分标准旨在模拟 AgentReview(Jin et al., 2024)——本文选用的评估器。我们在 references 目录中提供了忠实的评分标准;实际评审由宿主 Agent 的大模型完成。
唱反调的评审者: 按照 references/da-reviewer.md,必须指定一名模拟评审者担任 DA。DA 会从第一性原理质疑核心主张(因果关系夸大、消融覆盖范围、基线公平性、泛化主张、新颖性夸大),而非关注表面润色。如果 DA 提出了一项在所有评审者给出意见后仍未解决的 CRITICAL 发现,则无论评分标准得分如何,该发现都会阻止作出“接受改进”的决定。在 worklog.json 中记录 DA 的 CRITICAL 发现:{da_critical: true, finding: "..."}。
在 workspace/refinement/da_concessions.json 中记录 DA 每轮的发现和让步决定(模式见 references/da-reviewer.md),并确定性地执行让步阈值协议——这可以防止模拟 DA 轻易屈服:
python skills/content-refinement-agent/scripts/concession_guard.py \
--log workspace/refinement/da_concessions.json \
--out workspace/refinement/iter<N>/da_guard.json
# exit 0 = clear; exit 1 = standing CRITICAL → force REVERT this iteration;
# exit 2 = a concession was rejected (caving/consecutive) → DA must restate;
# exit 3 = schema error.
该防护机制会拒绝任何在 rebuttal_score < 4 时作出或紧接上一轮让步后作出的让步,并将受影响的发现恢复为“待处理”。仍处于待处理状态的 CRITICAL(退出码 1)会将 ACCEPT 覆盖为 REVERT。
保存到 workspace/refinement/iter<N>/review.json。
2. 为草稿评分
评审者调用会同时生成定性反馈和各维度评分:
{
"axis_scores": {
"scientific_depth": {"score": 65, "justification": "..."},
"technical_execution": {"score": 70, "justification": "..."},
"logical_flow": {"score": 60, "justification": "..."},
"writing_clarity": {"score": 55, "justification": "..."},
"evidence_presentation":{"score": 72, "justification": "..."},
"academic_style": {"score": 68, "justification": "..."}
},
"overall_score": 64.5,
"decision_band": "Major Revision",
"strengths": [...],
"weaknesses": [...],
"questions": [...]
}
保存到 iter<N>/score.json。(如果你的宿主环境输出一份文档,则与 review.json 合并;两者的模式有重叠。)
decision_band 根据 overall_score 确定性推导得出——Accept(≥80)/ Minor Revision(65–79)/ Major Revision(50–64)/ Reject(<50)。请使用 python skills/content-refinement-agent/scripts/decision_band.py --score-json iter<N>/score.json 填写,而不要手动填写,以确保其与分数始终一致。这些等级会影响第 5 步中是否因达到目标而停止。
3. 应用修订
加载 references/prompt.md 中未经改动的内容润色 Agent 提示词。
前置 Anti-Leakage Prompt。输入:
paper.tex— 当前草稿paper.pdf— 编译后的 PDF(如可用,则作为多模态上下文)conference_guidelines.mdexperimental_log.md— 数值声明的事实依据worklog.json— 之前修改的历史记录citation_pool.json— 允许使用的参考文献reviewer_feedback— 来自步骤 1 的 JSON
提示词要求模型处理薄弱之处、整合问题的答案,并输出两个内容块:
- 工作日志 JSON
{addressed_weaknesses[], integrated_answers[], actions_taken[]} - 完整的修订后 LaTeX 代码
将修订后的 LaTeX 保存为 iter<N>/paper.tex。使用 apply_worklog.py 将工作日志 JSON 追加到
workspace/refinement/worklog.json。
4. 编译并重新评分
cd workspace/refinement/iter<N>/ && latexmk -pdf -interaction=nonstopmode paper.tex
然后对新草稿重新运行模拟评审 → 为新一轮更新 score.json。(这是“修订后重新评分”调用。)
5. 应用接受/回退决策
调用循环必须跟踪 CONSECUTIVE_SMALL(初始值为 0),并在每次调用时传入,以便 score_delta.py 检测平台期:
python skills/content-refinement-agent/scripts/score_delta.py \
--prev workspace/refinement/iter<N-1>/score.json \
--curr workspace/refinement/iter<N>/score.json \
--plateau-threshold 1.0 \
--plateau-streak 3 \
--accept-threshold 80 \
--consecutive-small $CONSECUTIVE_SMALL \
> workspace/refinement/iter<N>/delta.json
EXIT=$?
# Update streak for next iteration:
CONSECUTIVE_SMALL=$(python3 -c "
import json
d = json.load(open('workspace/refinement/iter<N>/delta.json'))
print(d['consecutive_small'])
")
退出代码:
0— ACCEPT(总体评分提高或持平,子轴净变化非负,低于 Accept 档位,且未进入平台期)1— REVERT(总体评分下降)2— REVERT(总体评分持平,但子轴净变化为负)4— HALT_PLATEAU(已接受,但连续 N 轮低于阈值——提前停止)5— HALT_TARGET_MET(已接受且达到 Accept 档位,总体评分 ≥ 80——停止)
行为:
- ACCEPT(退出代码 0):将
iter<N>/paper.tex保留为新的最佳版本。继续到 iter N+1。 - REVERT(退出代码 1 或 2):将
iter<N-1>/paper.tex复制回作为规范版本,然后停止。 - HALT_PLATEAU(退出代码 4):保留当前版本(已接受),但停止——后续迭代不太可能带来有意义的提升。实际中,约 85% 的润色收益来自第 1 轮;若后续迭代连续 3 轮每轮提升不足 1 分,则触发平台期停止。
- HALT_TARGET_MET(退出代码 5):保留当前版本(已接受),但停止——论文已达到 Accept 档位(总体评分 ≥ 80),因此没有理由继续迭代并冒回退风险。
delta.json中的decision_band_prev/decision_band_curr会用于运行报告。
覆盖规则——DA CRITICAL。 如果 concession_guard.py(步骤 1)在本轮返回退出代码 1,即使 score_delta.py 判定为 ACCEPT,也必须将结果视为 REVERT:回退到 iter<N-1>/paper.tex,并要求下一次修订处理尚未解决的 CRITICAL 发现。
始终使用 apply_worklog.py --decision ... 记录决策。
6. 停止规则
满足以下任一条件时,停止循环:
- 迭代次数达到
ITER_CAP(默认值为 3)。 score_delta.py返回退出代码 1 或 2(REVERT),或者concession_guard.py返回退出代码 1(尚未解决的 DA CRITICAL → 强制 REVERT)。- 模拟评审者的
weaknesses列表为空(没有可采取行动的反馈)。 score_delta.py返回退出代码 4(HALT_PLATEAU——因平台期提前停止)。score_delta.py返回退出代码 5(HALT_TARGET_MET——达到 Accept 档位,总体评分 ≥ 80;提升当前草稿)。
7. 提升最佳快照
找出 overall_score 最高的已接受轮次(可能是最新的已接受轮次,也可能是后续轮次被回退时更早的轮次)。复制:
cp workspace/refinement/iter<best>/paper.tex workspace/final/paper.tex
cp workspace/refinement/iter<best>/paper.pdf workspace/final/paper.pdf
然后在最终报告中告知用户:
- 运行了多少轮
- 最终总体评分及其决策档位(Accept / Minor / Major / Reject)
- 评分轨迹及档位(例如:“iter0 58.0 Major → iter1 67.3 Minor(accept)→ iter2 81.0 Accept(停止:已达到目标)”)
- 提升了哪一轮,以及停止原因(revert / plateau / target met / iter cap / DA critical)
关键安全约束(附录 F.1,第 50–51 页)
论文明确指出,早期版本的 Refinement Agent“通过表面上将缺失的基线列为局限,利用自动审稿器的评分函数人为提高接收分数”。逐字提示词明确禁止这种做法。你必须遵守:
- [IRON RULE] 分数回退时立即停止。 如果
score_delta.py返回退出代码 1 或 2(REVERT),立即回退到上一个快照并停止。分数回退后不得再尝试修改。 - [IRON RULE] 修改时不得开展新实验。 忽略审稿人提出的新实验、消融实验或基线要求。Refinement Agent 的职责是改进呈现方式,而不是开展新科学研究。如果审稿人要求补充缺失数据,直接跳过这些意见——切勿添加伪造的实验,也不要添加承诺开展这些实验的“未来工作”条目。
- [IRON RULE] 所有数值声明都必须与 experimental_log.md 一致。 Agent 不得引入新数字,只能重新呈现已有数字。修改后的论文中任何未出现在 experimental_log.md 中的数字都属于幻觉。
- 不得明确陈述局限。 禁止使用“我们承认这是一个局限……”这类表述。模型可以通过更清晰的解释来应对不足,但不得通过防御性地罗列不足来操纵评估器。
这些规则可以防止奖励作弊,确保修改循环诚实可靠。
资源
references/prompt.md— 附录 F.1 中 Content Refinement Agent 提示词的逐字版本references/reviewer-rubric.md— AgentReview 风格的评分标准(6 个维度)references/halt-rules.md— 以形式化伪代码表示的接受/回退/停止逻辑references/safe-revision-rules.md— 防止奖励作弊的约束references/writing-quality-check.md— 5 类反 AI 文风检查清单(指向共享文件)references/ai-failure-modes.md— 首次迭代前运行的 7 类完整性检查(指向共享文件)references/da-reviewer.md— Devil's Advocate 审稿协议与让步规则references/claim-evidence-map.md— 新增三种声明状态,以及修改议程如何使用这些状态references/reverse-outline.md— 新增段落标记的含义,以及如何阅读反向大纲scripts/score_delta.py— 根据两份评分 JSON 作出接受/回退/停止决策;输出决策区间和目标达成停止信号(退出代码 5)scripts/decision_band.py— 将总体分数映射到规范的决策区间(Accept/Minor/Major/Reject)scripts/concession_guard.py— 执行 DA 让步阈值协议;存在未解决的 CRITICAL 时阻止接受scripts/score_trajectory.py— 按维度记录分数历史,并检测回退和停滞scripts/reverse_outline.py— 新增主题句大纲和结构性段落标记scripts/apply_worklog.py— 将迭代条目追加到 worklog.jsonscripts/snapshot.py— 将 paper.tex/paper.pdf 复制到 iter/,用于回退scripts/update_critique_memory.py— 新增根据 worklog + review 构建/更新 critique_memory.json(受 AutoSci 启发的审稿人记忆)skills/shared/writing_quality_check.md— 完整的反 AI 文风检查清单(5 类)skills/shared/ai_failure_modes.md— 完整的 AI 研究失效模式检查(7 类)skills/shared/handoff_schemas.md— 定义所有流水线步骤之间正式数据契约skills/shared/research_brief_template.md— 新增研究简报架构(首次调用审稿人前阅读 §1–§4)skills/shared/section_rhetoric.md— 新增各章节的结构模板;各章节检查清单会影响审稿人的 Logical Flow 维度