mcpField
C
content-refinement-agent

content-refinement-agent

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

关于 content-refinement-agent

content-refinement-agent 是 PaperOrchestra 的论文迭代评审与修订技能。它结合量规评审、证据检查和修订记录,并以确定性规则决定接受、回退或停止迭代。

主要功能

  1. 01模拟基于量规的同行评审
  2. 02核对论点与实验记录
  3. 03生成用于结构评审的反向大纲
  4. 04追踪修订与评审发现
  5. 05为草稿评分并划分决策等级
  6. 06接受、回退或停止迭代

适用场景

  1. 01通过多轮评审完善论文草稿
  2. 02标记缺乏支持的数值论断
  3. 03选定评分最高的已接受草稿版本

安装

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

$npx skills add https://github.com/ar9av/paperorchestra --skill content-refinement-agent

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

包含的文件

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

references/
ai-failure-modes.md
claim-evidence-map.md
da-reviewer.md
halt-rules.md
prompt.md
reverse-outline.md
reviewer-rubric.md
safe-revision-rules.md
writing-quality-check.md
scripts/
apply_worklog.py
concession_guard.py
decision_band.py
reverse_outline.py
score_delta.py
score_trajectory.py
snapshot.py
test_reverse_outline.py
update_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.md
  • workspace/inputs/experimental_log.md — 作为幻觉检查的事实依据
  • workspace/citation_pool.json / workspace/refs.bib — 允许使用的参考文献

输出

  • workspace/refinement/iter1/、iter2/、iter3/ — 每轮迭代的快照,包含 paper.tex、paper.pdf、review.json、score.json
  • workspace/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.md
  • experimental_log.md — 数值声明的事实依据
  • worklog.json — 之前修改的历史记录
  • citation_pool.json — 允许使用的参考文献
  • reviewer_feedback — 来自步骤 1 的 JSON

提示词要求模型处理薄弱之处、整合问题的答案,并输出两个内容块:

  1. 工作日志 JSON {addressed_weaknesses[], integrated_answers[], actions_taken[]}
  2. 完整的修订后 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. 停止规则

满足以下任一条件时,停止循环:

  1. 迭代次数达到 ITER_CAP(默认值为 3)。
  2. score_delta.py 返回退出代码 1 或 2(REVERT),或者 concession_guard.py 返回退出代码 1(尚未解决的 DA CRITICAL → 强制 REVERT)。
  3. 模拟评审者的 weaknesses 列表为空(没有可采取行动的反馈)。
  4. score_delta.py 返回退出代码 4(HALT_PLATEAU——因平台期提前停止)。
  5. 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.json
  • scripts/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 维度

评论

支持 Markdown