当用户明确要求"评审国自然标书"、"模拟专家评审"、"审阅 NSFC 申请书"时使用。模拟领域专家视角对 NSFC 标书进行多维度评审,输出分级问题与可执行修改建议。⚠️ 不适用:用户只是想写/改标书某个章节(应使用 nsfc-*-writer 系列技能)、只是想了解评审标准(应直接回答)、没有明确"评审/审阅"意图。
parallel-vibe 技能。parallel-vibe 不可用、被禁用,或 panel_count == 1,自动退化为单组模式(仍包含 7 位专家)。references/expert_*.md,聚合规则位于 references/aggregation_rules.md。用户至少提供其一:
proposal_path:标书目录(推荐,包含多份 .tex)proposal_file:单个 .tex 主文件(如用户只有一个文件)proposal_zip:压缩包(若用户提供,先解压到临时目录再评审,并在报告中记录解压位置)
../);避免覆盖用户已有文件;必要时先让用户确认解压位置。可选补充(用户未给时不要强行假设):
focus:优先关注某一维度(如“创新性/可行性/研究基础”)output_path:输出文件路径(默认见“输出”)style:口吻偏好(如“严格/温和/非常具体”)grant_type:项目类型(如“青年基金/面上项目”)funding_amount:项目总经费(若用户明确给出,以用户信息为准)panel_count:评审组数量(每组固定 7 位专家)
config.yaml:parallel_review.default_panel_countconfig.yaml:parallel_review.max_panel_countconfig.yaml:output_settings.default_filename,默认写入标书目录下:./{default_filename}。output_path,以用户为准;但当路径不可写/目录不存在时应 fail-fast 并提示用户更换路径。./{panel_dir}/G{组号}.md(panel_dir 见 config.yaml:output_settings.panel_dir)。config.yaml:output_settings.intermediate_dir(默认 .nsfc-reviewers/),避免根目录出现大量计划/日志/并行运行环境。开始前先读取本技能目录下的 config.yaml,并将以下配置作为执行时的单一真相来源:
review_dimensions:评审维度、权重、要点与常见问题(作为检查清单)severity_levels:P0/P1/P2 分级口径(用于分级)review_grades:等级与建议(仅在用户需要时输出)stage_assessment:函评/会评阶段判断的输出开关、二元标签与判断口径funding_context:青年/面上等常见资助额度区间,以及“资助受限妥协”如何写入报告proposal_files.patterns/exclude:标书文件识别规则output_settings:输出文件名、面板目录、中间过程隐藏策略与章节开关parallel_review:并行评审开关、专家画像、聚合策略proposal_files 规则筛选出待读文件列表。.tex 文件数量为 0:直接报错并请求用户提供正确路径/文件。推荐的确定性做法(避免“漏扫子目录 / 误扫中间目录 / 扫到交付产物”):
# 列出将被纳入评审的 .tex 文件(递归扫描,并自动跳过 panels/、.nsfc-reviewers/、.parallel_vibe/)
python3 <nsfc_reviewers_path>/scripts/list_proposal_files.py --proposal-path <proposal_root>
# 可选:限制最大文件数(超限退出码=3)
python3 <nsfc_reviewers_path>/scripts/list_proposal_files.py --proposal-path <proposal_root> --max-files 200
grant_type / funding_amount;否则再从目录名、标题页、正文中谨慎识别“青年/面上”等类型。config.yaml:funding_context 中的常见额度区间辅助判断;若无法确认项目类型,不得硬套“青年 30–40w / 面上 50–60w”。effective_panel_count:优先用户输入 panel_count,否则使用 parallel_review.default_panel_count。effective_panel_count 限制在 [1, parallel_review.max_panel_count]。parallel_review.enabled == falseeffective_panel_count == 1parallel-vibe 脚本按顺序查找以下路径,命中即使用:
~/.claude/skills/parallel-vibe/scripts/parallel_vibe.py~/.codex/skills/parallel-vibe/scripts/parallel_vibe.py<当前仓库>/parallel-vibe/scripts/parallel_vibe.py若全部不存在:记录警告并退化为串行模式,不中断整体评审。
mkdir -p <proposal_root>/<intermediate_dir>/{logs/plans,snapshot}
<intermediate_dir> 对应 config.yaml:output_settings.intermediate_dir(默认 .nsfc-reviewers)。references/expert_*.md 读取 7 位专家画像(对应 config.yaml:parallel_review.reviewer_personas[*].prompt_file)references/master_prompt_template.md 读取 master prompt 模板workspace/ 根目录下的 config.yaml:parallel_review.panel_output_filename{panel_output_filename} 替换为 config.yaml:parallel_review.panel_output_filename<proposal_root>/<intermediate_dir>/logs/ 下,便于追溯且不污染根目录),记为 <master_prompt_path>parallel-vibe --prompt 的自动拆分逻辑(本技能需要“同一 master prompt 在 N 个独立工作区重复执行”)。python3 <nsfc_reviewers_path>/scripts/build_parallel_vibe_plan.py \
--panel-count <effective_panel_count> \
--master-prompt-file <master_prompt_path> \
--out <plan_json_path>
plan.json(最小结构):{
"plan_version": 1,
"prompt": "nsfc-reviewers parallel panels",
"threads": [
{
"thread_id": "001",
"title": "Panel G001",
"runner": { "type": "<config:parallel_review.runner>", "profile": "<config:parallel_review.runner_profile>", "model": "", "args": [] },
"prompt": "<master_prompt>"
}
],
"synthesis": { "enabled": false }
}
<proposal_root>/<intermediate_dir>/snapshot/ 下准备一份标书快照(如 proposal_snapshot/),并将其作为 --src-dir,以避免把 .nsfc-reviewers/、panels/ 等中间/交付目录再次复制进各 thread 的 workspace/。snapshot/ 下,并排除中间/交付目录(具体命令依平台工具而定;原则是:快照目录应只包含标书源文件)。python3 <parallel_vibe_path> \
--plan-file <plan_json_path> \
--src-dir <proposal_snapshot_root_or_proposal_root> \
--out-dir <proposal_root>/<intermediate_dir> \
--timeout-seconds <config:parallel_review.timeout_seconds> \
--no-synthesize
workspace/ 中读取 panel_output_filename<proposal_root>/<intermediate_dir>/.parallel_vibe/<project_id>/<thread_id>/workspace/<panel_output_filename><proposal_root>/<intermediate_dir>/parallel-vibe/<project_id>/...parallel-vibe 会在 stdout 打印本次 project_root 路径;优先以该路径为准<proposal_root>/{panel_dir}/G{thread_id}.mdreferences/expert_*.md 获取 7 位专家画像(创新/方法/基础/严格/建设性/科学意义/清晰度)panel_output_filenamereferences/aggregation_rules.md 读取跨组聚合规则。panel_review.md,识别同一问题的不同表述。ceil(N * consensus_threshold) 组指出 → 跨组共识(阈值见 config.yaml:parallel_review.aggregation.consensus_threshold)。keep_individual_reviews == true,附录保留各组原始评审报告。输出“修改建议汇总”,按 P0→P1→P2 排序,并给出最小可行修改序列。
当你评审“研究内容设计偏弱 / 研究方法验证链条偏短 / 样本规模偏小 / 平台建设不完整 / 仅做到最小可行验证”这类问题时,必须先判断它是否与项目资助额度约束有关。
硬规则:
你必须在最终 report 中新增“阶段判断(基于当前版本直接送审)”章节;除非用户明确要求省略,否则默认输出。
硬规则:
给过 或 不给过;不允许只写“边缘”“不好说”“看情况”。判断把握:高/中/低,但不能替代二元结论。给过 / 不给过 结论。建议判断口径:
不给过。若用户还要求“综合评分/资助建议”,可额外输出;但不能替代“函评/会评给不过”判断章节。
重要性:本阶段是确保输出可追溯的关键步骤,不可跳过。当 config.yaml:output_settings.enforce_output_finalization == true 时,你不得在未完成本阶段的情况下结束评审。
目标:最终交付清晰可见;中间过程统一托管到 config.yaml:output_settings.intermediate_dir(默认 .nsfc-reviewers/),避免根目录出现计划/日志/并行环境等杂项。
effective_panel_count(见阶段三)。effective_panel_count > 1 且你实际调用了 parallel-vibe(或发现 .parallel_vibe/ 运行环境)→ 视为“并行模式”python3 <nsfc_reviewers_path>/scripts/finalize_output.py \
--review-path <proposal_root> \
--panel-count <effective_panel_count> \
--intermediate-dir <config:output_settings.intermediate_dir> \
--apply
不加
--apply为 DRY-RUN:只打印将执行的动作,不会改动文件。
并行/串行都必须至少创建最小目录结构:
mkdir -p <proposal_root>/<intermediate_dir>/{parallel-vibe,logs/plans,snapshot}
并行模式:将 .parallel_vibe/ 的 项目目录迁移到 <intermediate_dir>/parallel-vibe/(兼容两种来源位置):
# 1) 优先从 <proposal_root>/<intermediate_dir>/.parallel_vibe/ 迁移(parallel-vibe --out-dir 指向 intermediate_dir 时常见)
if [ -d "<proposal_root>/<intermediate_dir>/.parallel_vibe" ]; then
mv "<proposal_root>/<intermediate_dir>/.parallel_vibe/"* "<proposal_root>/<intermediate_dir>/parallel-vibe/" 2>/dev/null || true
rmdir "<proposal_root>/<intermediate_dir>/.parallel_vibe" 2>/dev/null || true
fi
# 2) 兼容旧实例:从根目录 .parallel_vibe/ 迁移
if [ -d "<proposal_root>/.parallel_vibe" ]; then
mv "<proposal_root>/.parallel_vibe/"* "<proposal_root>/<intermediate_dir>/parallel-vibe/" 2>/dev/null || true
rmdir "<proposal_root>/.parallel_vibe" 2>/dev/null || true
fi
迁移日志与计划文件(仅在存在时执行):
mv "<proposal_root>/master_prompt.txt" "<proposal_root>/<intermediate_dir>/logs/" 2>/dev/null || true
mv "<proposal_root>"/plan*.json "<proposal_root>/<intermediate_dir>/logs/plans/" 2>/dev/null || true
mv "<proposal_root>/proposal_snapshot" "<proposal_root>/<intermediate_dir>/snapshot/" 2>/dev/null || true
<proposal_root>/<intermediate_dir>/ 已创建,且至少包含 logs/ 与 logs/plans/<proposal_root>/<intermediate_dir>/parallel-vibe/ 下可看到 <project_id>/... 运行环境master_prompt.txt(或其副本)可在 <proposal_root>/<intermediate_dir>/logs/ 中找到{default_filename} 与 {panel_dir}/G*.md(无关中间文件不应散落在根目录)对每条 P0/P1 问题,必须包含至少一个“证据锚点”:
证据锚点:文件名 + 章节标题/关键句(可选行号)现象:为什么这是问题(不要空泛)影响:会如何影响评审判断/可行性/说服力建议:可执行的修改方案(优先给“怎么改”和“改到什么程度算够”)验证:改完如何自检(例如“补一张路线图”“补一段对照坐标系”“补一条预实验证据链”)若该问题与资助额度约束明显相关,还必须额外补充:
资助约束说明:说明这是青年/面上等有限资助框架下的现实妥协,而非纯粹的思路错误完整设计参考:说明若资助不受限,一个更完整的研究设计应补哪些关键实验、样本、队列、平台或验证层级并行模式建议结构:
# 国自然标书评审意见(N 组独立专家)
## 评审配置
- 评审组数:N 组
- 每组专家:7 位
- 总专家人次:N×7 人次
## 阶段判断(基于当前版本直接送审)
### 函评
- 结论:给过 / 不给过
- 判断把握:高 / 中 / 低
- 评审组倾向:X/N 组判给过,Y/N 组判不给过
- 主要依据:...
- 翻盘关键(仅在不给过时必写):...
### 会评
- 结论:给过 / 不给过
- 判断把握:高 / 中 / 低
- 评审组倾向:X/N 组判给过,Y/N 组判不给过
- 主要依据:...
- 翻盘关键(仅在不给过时必写):...
## 跨组共识(多组一致指出)
### P0 级
## 独立观点(单一组提出)
### 来自 组 G001
## 修改建议汇总
## 附录:各组原始评审报告(可选)
若某条问题属于“受资助额度限制的设计妥协”,应在对应问题下显式写出“资助约束说明 / 完整设计参考”,而不是只笼统批评“方案偏弱”。
用户输入:
请评审 /path/to/nsfc_proposal 这个国自然标书,并把意见保存到 /path/to/output.md
详见 config.yaml:
review_dimensions:评审维度配置(权重/要点/常见问题)severity_levels:问题严重程度定义review_grades:评审等级与建议(可选输出)funding_context:资助额度约束识别规则(青年/面上常见额度区间、报告写法与归因边界)proposal_files:标书文件识别规则output_settings:输出设置(默认文件名/面板目录/中间目录/章节开关;以及输出整理校验:enforce_output_finalization / warn_missing_intermediate / validation_level)parallel_review:并行多组评审配置(开关/组数/专家画像引用/跨组聚合策略)