From webnovel-writer
外部模型审查Agent,调用外部API对章节进行13维度独立审查(11 工艺 + naturalness + reader_critic · Round 13 v2 · 含 reader_flow),输出结构化报告
How this agent operates — its isolation, permissions, and tool access model
Agent reference
webnovel-writer:agents/external-review-agentinheritThe summary Claude sees when deciding whether to delegate to this agent
> **职责**: 读取完整项目上下文,构建 13 维度审查prompt(含 reader_flow 读者视角流畅度),调用外部模型API获取独立审查意见,交叉验证后输出结构化报告。 > **输出格式**: 遵循 `${CLAUDE_PLUGIN_ROOT}/references/checker-output-schema.md` 统一 JSON Schema > > **重要**: Prompt 模板、输出 JSON Schema、供应商配置、fallback 链、路由验证规则以 `${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write/references/step-3.5-external-review.md` 为准(优先于本文件中的旧示例)。若 workspace 存在 `.cursor/rules/external-review-spec.m...职责: 读取完整项目上下文,构建 13 维度审查prompt(含 reader_flow 读者视角流畅度),调用外部模型API获取独立审查意见,交叉验证后输出结构化报告。
输出格式: 遵循
${CLAUDE_PLUGIN_ROOT}/references/checker-output-schema.md统一 JSON Schema重要: Prompt 模板、输出 JSON Schema、供应商配置、fallback 链、路由验证规则以
${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write/references/step-3.5-external-review.md为准(优先于本文件中的旧示例)。若 workspace 存在.cursor/rules/external-review-spec.mdc,以其为最高优先级。
{
"chapter": 11,
"chapter_file": "正文/第0011章-猎人公会.md",
"project_root": "{PROJECT_ROOT}",
"model_key": "qwen3.6-plus|gpt-5.4|gemini-3.1-pro|doubao-pro|doubao-seed-2.0-lite|glm-5|glm-5.1|glm-4.7|mimo-v2-pro|minimax-m2.7-hs|minimax-m2.5|deepseek-v3.2-thinking|kimi-k2.5|kimi-k2.6|all",
"scripts_dir": "{SCRIPTS_DIR}"
}
model_key 说明(十四模型共识架构 · Round 14+ ark-coding 并入):
thinking={"type":"enabled"}(火山原生)reasoning_effort/thinking_budget/enable_thinkingdeepseek-v3.2 / kimi-k2.5 限 32768;其他全部 65536qwen3.6-plus(国产旗舰,文学细致度最高)gpt-5.4(OpenAI 系,西方叙事视角,最快 2s)gemini-3.1-pro(谷歌系,画面感审视)doubao-pro(主 = ark-coding doubao-seed-2.0-pro,备 = openclawroot;结构审查严苛)doubao-seed-2.0-lite ⭐(ark-coding;豆包轻量 thinking)glm-5 / glm-4.7(openclawroot;中文编辑 / 文学质感)glm-5.1 ⭐(ark-coding;GLM 5.1 增量)mimo-v2-pro(openclawroot;小米推理)minimax-m2.7-hs(openclawroot;2.7 高速对话情感推理)minimax-m2.5 ⭐(ark-coding;交错 thinking)deepseek-v3.2-thinking(主 = ark-coding deepseek-v3.2 mt=32768,备 = openclawroot/siliconflow;技术考据)kimi-k2.5 ⭐(ark-coding mt=32768;Moonshot K2.5 thinking)kimi-k2.6 ⭐(ark-coding mt=65536;Moonshot K2.6 旗舰)⭐ = Round 14 新增
--model-key all 自动遍历全部 14 模型qwen-plus/kimi/glm/qwen/deepseek/minimax/doubao/glm4/minimax-m2.7/doubao-lite 自动映射到新 key(见 MODEL_ALIASES);kimi 现在指向 kimi-k2.6并行读取:
chapter_file){project_root}/.webnovel/state.json(主角状态、chapter_meta){project_root}/设定集/世界观.md{project_root}/设定集/主角卡.md{project_root}/设定集/力量体系.md{project_root}/大纲/第{volume_id}卷-详细大纲.md(当前章节对应的大纲段落;volume_id 从 state.json 当前卷信息获取,缺失时从 大纲/总纲.md 的章节范围反推){project_root}/正文/第{N-1:04d}章*.md、第{N-2:04d}章*.md、第{N-3:04d}章*.md(正文文件缺失时退化为摘要)python -X utf8 "${scripts_dir}/external_review.py" \
--project-root "${project_root}" \
--chapter {chapter} \
--model-key all \
--mode dimensions
脚本会自动从 {project_root}/.webnovel/tmp/external_context_ch{NNNN}.json 加载上下文。调用前,agent必须先将收集到的上下文写入该文件:
cat > "${project_root}/.webnovel/tmp/external_context_ch{NNNN}.json" << 'EOF'
{
"outline_excerpt": "本章大纲段落...",
"protagonist_card": "主角卡全文...",
"golden_finger_card": "金手指设计全文...",
"female_lead_card": "女主卡全文...",
"villain_design": "反派设计全文...",
"power_system": "力量体系全文...",
"world_settings": "世界观全文...",
"protagonist_state": { ... },
"prev_chapters_text": "前3章正文(正文缺失时用摘要替代)..."
}
EOF
注意:脚本对每个字段有磁盘 fallback——如果 JSON 中某字段缺失或为空,会自动从
设定集/、正文/、.webnovel/目录读取。但 agent 应尽量填充完整以减少磁盘 I/O。
脚本会对 13 个维度(11 工艺维度 + naturalness + reader_critic · Round 13 v2 · 含 reader_flow)并发调用外部模型API,返回 13 份维度报告合并为每模型一个 JSON。Round 14+ 下 ark-coding 和 openclawroot 两个主 provider 并行工作,ProviderRateLimiter 自动控制 RPM。
此步骤为必做步骤。脚本层面的
cross_validation.dismissed始终为 0(脚本无法访问项目上下文),必须由 Agent 在此步骤中完成项目数据对比验证。
对脚本返回的每个issue,agent用自己读到的项目上下文做快速验证:
verified:issue 提到的事实与 state.json/设定集/前章正文的数据一致(确认为真问题)unverified:无法从已有数据确认或否认dismissed:issue 提到的"错误"实际上在项目数据中有依据支持(误报),标注 reason: "项目数据支持: {具体依据}"验证完成后,更新 cross_validation 统计,将 dismissed 数量更新为非零值(如有误报)。
输出统一格式JSON,agent名称为 external-{model_key}:
{
"agent": "external-qwen3.6-plus",
"chapter": 11,
"model_key": "qwen3.6-plus",
"model_requested": "qwen3.6-plus",
"model_actual": "qwen3.6-plus",
"provider": "openclawroot",
"routing_verified": true,
"overall_score": 88,
"pass": true,
"dimension_reports": [
{
"dimension": "consistency",
"name": "设定一致性",
"status": "ok",
"score": 90,
"issues": [...],
"summary": "...",
"model": "Qwen3.6-Plus",
"model_actual": "qwen3.6-plus",
"provider": "openclawroot",
"routing_verified": true,
"elapsed_ms": 8500
}
],
"issues": [ ... ],
"cross_validation": { "verified": 3, "unverified": 1, "dismissed": 2 },
"provider_chain": [ ... ],
"api_meta": {
"final_provider": "ark-coding",
"elapsed_ms": 25000,
"prompt_tokens": 5000,
"completion_tokens": 3000,
"attempts_total": 10
},
"metrics": {
"dimensions_ok": 11,
"dimensions_failed": 0,
"dimensions_skipped": 0
}
}
reader_flow vs reader_pull 互补性:两者视角不同——
reader_pull查"作者工艺是否到位"(钩子强度/微兑现达标),reader_flow查"读者能否读懂、不卡顿"(失忆裸读解码成本)。Ch4 实测两者呈反相(flow 高/pull 低),证明真正互补。Step 4 润色优先级:reader_flow共识 high/medium >reader_pullissues。
"status": "failed""status": "failed", "error": "phantom_success_score0_empty"threading.Event,跳过剩余排队维度("status": "skipped", "error": "early_stop_skipped")"pass": false, "error": "all_dimensions_failed""status": "failed", "error": "json_parse_failed"npx claudepluginhub xuanranl/webnovelwriter --plugin webnovel-writer小说复核文件处理器,自主扫描小说目录、解析章节范围、分批派发子代理执行各项检查。当用户提供小说目录路径或章节编号时,由 command 路由到此 agent。 <example> Context: 用户指定了小说目录和检查项 user: "小说复核 ./我的小说/ --角色" assistant: "我来调用 novel-review agent 扫描目录并检查角色一致性。" <commentary> 用户提供了路径和检查项,command 路由到 agent,agent 扫描目录、定位相关文件、派发角色一致性检查子代理。 </commentary> </example> <example> Context: 用户指定了章节范围,全面检查 user: "帮我复核 ./我的小说/ 第5-10章" assistant: "我来调用 novel-review agent 扫描目录,分批检查第5-10章的所有维度。" <commentary> 指定章节范围时,agent 扫描目录定位章节文件,分批派发子代理执行全部检查项。 </commentary> </example>
MLOps engineer for designing ML infrastructure, CI/CD pipelines for models, model versioning, experiment tracking, automated training pipelines, GPU orchestration, and operational monitoring.