Skip to content

审查-修复循环token消耗优化:结构化检查清单 + 修复后自查 + commit前置自动化 + 收敛机制 #106

Description

@wandxc

问题

写章节正文时,reviewer agent被调用4次,chapter-commit被调用4次,token消耗约4倍于正常值。

根因分析:

  1. 审查一轮找不全问题 — reviewer优先报显眼问题,小问题被遮蔽,修复大问题后小问题才浮出来
  2. 修复后引入新问题 — 如修复碎片句时引入左右臂矛盾,需要额外审查轮次
  3. commit前置条件需手动处理 — disambiguation pending需手动清空、review_results需手动补充blocking_count等字段
  4. 没有收敛机制 — 流程定义中没有"最多N轮"限制,可能无限循环

建议改进

  1. 结构化检查清单(提升单次审查覆盖面)

在reviewer agent调用时,追加结构化检查清单,强制逐项输出结论:

检查清单(必须逐项输出结论,无问题也要输出pass):

  1. 设定一致性:角色状态/世界规则/物品属性是否与state.json一致
  2. 时间线:事件顺序/时间跨度是否合理
  3. 叙事连贯:视角是否统一/场景切换是否有过渡
  4. 角色一致性:对话风格/行为动机是否符合人设
  5. 逻辑:因果关系/行为后果是否合理
  6. AI味词汇层:缓缓/淡淡/微微/眸中/瞳孔密度
  7. AI味句式层:三段闭环/同构句/总结句/碎片句
  8. AI味叙事层:匀速节奏/戏剧性反讽/安全着陆
  9. AI味情感层:标签化情绪/即时切换
  10. AI味对话层:信息宣讲/书面语
  11. 项目规则合规:破折号≤20、但≤6、不是X是Y≤1、句号≤70/千字、系统【】格式

输出要求:每个维度必须输出一行结论,格式为"[维度]: pass"或"[维度]: 发现N个问题(简述)"

建议实现方式:在 reviewer.md 的第5节检查维度后增加"按清单逐项检查"指令,或在 runtime_contract_builder.py
中将检查清单注入review contract。

  1. 修复后自查(减少无效重审)

在Step 3审查后需要修复时,修复完成后先对照上次审查报告自查,只有自查通过才重新调用reviewer:

def self_check(chapter_file, review_result):
text = Path(chapter_file).read_text(encoding='utf-8')
review = json.loads(Path(review_result).read_text(encoding='utf-8'))
for issue in review.get("issues", []):
evidence = issue.get("evidence", "")
if evidence and evidence[:60] in text:
return False # 问题证据仍存在,未修复
return True # 所有evidence已不在正文中

建议实现方式:在 webnovel-write SKILL.md 的 Step 3→4 之间插入自查步骤,或在 review_pipeline.py 中增加 --self-check
模式。

  1. commit前置条件自动化

在调用chapter-commit之前,自动处理前置条件:

def prepare_commit(project_root):
# 1. disambiguation_result.json: 已有resolved_entity_id的pending项移到resolved
# 2. review_results.json: 自动补充blocking_count/high_count/medium_count/low_count/total_count

建议实现方式:在 chapter_commit_service.py 的 build_commit 方法开头增加预处理逻辑,或在 webnovel.py 的 chapter-commit
命令中增加 --prepare 步骤。

  1. 收敛机制(防止无限循环)

审查最多3轮。第3轮后仍有blocking问题,则输出问题清单给用户,询问选择:接受当前版本 / 手动修复 / 放弃。

建议实现方式:在 webnovel-write SKILL.md 的 Step 3 中增加轮次计数和收敛逻辑。

预期效果

┌──────────────────┬────────────────────────────────────┐
│ 改进项 │ 预期效果 │
├──────────────────┼────────────────────────────────────┤
│ 结构化检查清单 │ 单次审查覆盖面从60%提升到90% │
├──────────────────┼────────────────────────────────────┤
│ 修复后自查 │ 审查轮次从平均4轮降低到2轮 │
├──────────────────┼────────────────────────────────────┤
│ commit前置自动化 │ commit一次通过率提升,减少手动干预 │
├──────────────────┼────────────────────────────────────┤
│ 收敛机制 │ 避免无限循环,最多3轮审查 │
└──────────────────┴────────────────────────────────────┘

我已做的项目级临时方案

由于插件源码会被更新覆盖,我已在项目层面创建了临时脚本:

  • .scripts/self_check.py — 修复后自查
  • .scripts/pre_commit_prep.py — commit前置预处理
  • .claude/memory/review_convergence_rule.md — 收敛规则(memory层面)
  • .claude/memory/reviewer_prompt_enhancement.md — 增强prompt(memory层面)

这些临时方案需要手动调用,无法自动集成到流程中。希望插件能原生支持这些功能。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions