nsfc-qc

当用户明确要求"标书QC/质量控制/润色前质检/引用真伪核查/篇幅与结构检查"时使用。对 NSFC 标书进行只读质量控制:并行多线程独立检查文风生硬、引用假引/错引风险、篇幅与章节分布、逻辑清晰度等,最终输出标准化 QC 报告;中间文件默认归档到“交付目录内的隐藏工作区(.nsfc-qc/)”,并兼容 legacy `.nsfc-qc/`。

157 stars

Best use case

nsfc-qc is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

当用户明确要求"标书QC/质量控制/润色前质检/引用真伪核查/篇幅与结构检查"时使用。对 NSFC 标书进行只读质量控制:并行多线程独立检查文风生硬、引用假引/错引风险、篇幅与章节分布、逻辑清晰度等,最终输出标准化 QC 报告;中间文件默认归档到“交付目录内的隐藏工作区(.nsfc-qc/)”,并兼容 legacy `.nsfc-qc/`。

Teams using nsfc-qc should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/nsfc-qc/SKILL.md --create-dirs "https://raw.githubusercontent.com/InternScience/DrClaw/main/drclaw/agent_hub/templates/proposal-writing/skills/nsfc-qc/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/nsfc-qc/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How nsfc-qc Compares

Feature / Agentnsfc-qcStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

当用户明确要求"标书QC/质量控制/润色前质检/引用真伪核查/篇幅与结构检查"时使用。对 NSFC 标书进行只读质量控制:并行多线程独立检查文风生硬、引用假引/错引风险、篇幅与章节分布、逻辑清晰度等,最终输出标准化 QC 报告;中间文件默认归档到“交付目录内的隐藏工作区(.nsfc-qc/)”,并兼容 legacy `.nsfc-qc/`。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# NSFC 标书质量控制(nsfc-qc)

## 目标输出(契约)

- **只读**:对标书内容完全只读(不修改任何 `.tex/.bib/.cls/.sty`)。
- **隔离(推荐)**:使用“交付目录 + sidecar 工作区”组织产物,默认不污染标书根目录:
  - 交付目录(面向人读):`{deliver_dir}/`
  - 工作区(面向复现/归档):`{deliver_dir}/.nsfc-qc/`(包含 runs/snapshot/.parallel_vibe/artifacts/final)
- **兼容(legacy)**:仍支持把工作区写入 `project_root/.nsfc-qc/`(旧用法)。
- **交付物(标准化)**:
  - `{run_dir}/final/nsfc-qc_report.md`
  - `{run_dir}/final/nsfc-qc_metrics.json`
  - `{run_dir}/final/nsfc-qc_findings.json`
  - `{run_dir}/final/validation.json`(结构一致性校验结果)

## 输入参数(建议显式提供)

最少必须给:
- `project_root`:如 `projects/NSFC_Young`

建议同时给:
- `main_tex`:默认 `main.tex`
- `threads`:默认 5
- `execution`:默认 `serial`(串联);用户明确要求并行时才改 `parallel`
- `deliver_dir`:推荐提供(例如 `.../QC/vYYYYMMDDHHMMSS`),用于“实例隔离”

参数默认值见 `config.yaml`。

## 硬约束(必须遵守)

- **禁止写入标书源文件**:包括但不限于 `*.tex/*.bib/*.cls/*.sty`。
- **禁止”为了优化而直接改文”**:本技能只产出 QC 报告与可执行建议;后续是否修改由人工复核或其它写作类 skill 执行。
- **不编造引用**:任何”引用真伪/是否错引”的结论,必须给出证据链(bib 条目、论文题目/DOI、来源链接或检索失败说明);不确定时标记为”需人工复核(uncertain)”。
- **元数据获取为必选项**:文献真实性检查是 QC 的核心功能,必须通过联网获取并比对元数据(title/abstract/URL 可访问性);预检脚本会自动执行,无需手动启用。

## 工作流(强制)

### 0) 定位输入与 run 目录

1. 校验 `project_root` 存在;`main_tex` 默认 `main.tex`。若该文件不存在,应优先在项目根目录自动探测主 tex(优先含 `\documentclass` / `\begin{document}` 的根目录文件,避免误选 `extraTex/` 子文件)。
2. 生成 `run_id = vYYYYMMDDHHMMSS`(本地时间),并优先采用“实例隔离”布局:
   - `deliver_dir = project_root/QC/{run_id}/`(可由用户显式提供)
   - `workspace_dir = {deliver_dir}/.nsfc-qc/`
   - `run_dir = {workspace_dir}/runs/{run_id}/`

> 若用户明确要求 legacy(或不方便创建交付目录),才使用 `project_root/.nsfc-qc/runs/{run_id}/`。

> 可选:运行 `scripts/nsfc_qc_precheck.py` 生成确定性“预检指标”,供多线程 QC 参考。

### 1) 只读预检(确定性)

目标:先用脚本完成”不会错”的检查,减少 AI 幻觉与漏检。

最小预检清单:
- 引用 key 是否都能在 `.bib` 中找到(缺失即 P0)
- `.bib` 条目是否明显不完整(缺 title/author/year 等,或占位符,标 P1)
- **引用真伪/错引的”证据包”(硬编码抓取,必选项)**:
  - 对每个被引用的 bibkey,通过 Crossref/arXiv/Unpaywall API 获取论文真实 metadata(title/abstract)
  - 检查 `.bib` 中 `url` 字段的可访问性(HTTP HEAD 请求)
  - 自动比对 bib title 与 API title(exact/fuzzy/mismatch)
  - 提取标书内的引用上下文,供后续 AI 做语义判断
  - 并发控制:每批次最多 `max_concurrent` 个并发请求(默认 5,可在 config.yaml 配置)
- 章节/文件级篇幅分布(字符数/粗略字数)
- 中文排版易错项(确定性):检测直引号 `”免疫景观”` 这类写法,并给出替换建议(推荐 TeX 引号 ``免疫景观'')

产物落点(示例):
- `.../artifacts/precheck.json`
- `.../artifacts/citations_index.csv`
- `.../artifacts/tex_lengths.csv`
- `.../artifacts/quote_issues.csv`
- `.../artifacts/abbreviation_issues.csv`
- `.../artifacts/abbreviation_issues_summary.json`
- `.../artifacts/abbreviation_registry.json`
- `.../artifacts/abbreviation_render_stream.jsonl`
- `.../artifacts/terminology_issues.csv`
- `.../artifacts/terminology_issues_summary.json`
- `.../artifacts/reference_evidence.jsonl`(包含 url_check 和 title_comparison 字段)
- `.../artifacts/reference_evidence_summary.json`(包含 url_checked/url_accessible/title_match_exact/title_match_fuzzy/title_mismatch 统计)

### 2) 多线程独立 QC(parallel-vibe;默认 5 threads;默认串联)

你必须使用 `parallel-vibe` 来“多线程独立 QC”,但为了满足“所有中间文件都在 `.nsfc-qc/`”的约束:

- `parallel-vibe --out-dir {run_dir}/`
  - 这样 `.parallel_vibe/` 会被创建在 run 内部(无论 legacy 还是 workspace 模式)
- `parallel-vibe --src-dir {run_dir}/snapshot/`
  - 每个 thread 的 workspace 都是 snapshot 的**独立拷贝**;snapshot 为“最小化副本”(通常仅 `*.tex/*.bib` + `./.nsfc-qc/input/` 证据包)

并行策略:
- 默认 `serial`(串联执行 threads)
- 用户明确要求“并行跑”时才启用 `--parallel --max-parallel <k>`

#### Thread 统一任务(每个 thread 做同样的 QC)

每个 thread 的 `RESULT.md` 必须覆盖同一份检查清单(允许发现点不同),至少包括:
1. **文风与可读性**:生硬句、口语/堆砌、AI 味/模板味、冗长句;给”最小改写建议”(只写建议,不改文件)。
2. **引用真伪与错引风险**:
   - P0:引用 key 缺失、明显虚构条目(无法检索且 bib 信息异常)、bib URL 不可访问(HTTP 4xx/5xx)
   - P1:可能错引(正文断言与论文题目/摘要方向明显不符)、元信息疑点(年份/期刊/作者异常)、title 不匹配(bib title 与 API title 相似度低)
   - 逐条给出证据锚点:`bibkey`、所在句子(原文片段 ≤ 50 字)、bib 条目、API 返回的 title/abstract、URL 检查结果、title 比对结果、可核验链接/检索关键词
   - 必须使用预检产物 `reference_evidence.jsonl` 中的 `url_check` 和 `title_comparison` 字段作为判断依据
3. **篇幅与结构分布**:
   - 总体是否过短/过长(用字符数与章节分布做近似判断)
   - 各章节比例是否合理(例如:立项依据/研究内容/研究基础的分配是否失衡)
4. **逻辑与论证**:论证链是否闭合(科学问题→假说→目标→方法→验证→预期),是否存在跳步、歧义、概念偷换、缺对照/缺指标。
5. **缩略语规范**:
   - 读取预检产物 `abbreviation_issues.csv` / `abbreviation_issues_summary.json` / `abbreviation_registry.json` 作为起点
   - 首次出现必须按 `abbreviation_render_stream.jsonl` 的真实渲染顺序理解,不得自行按文件名/目录顺序重排
   - 对每条 P1 问题(`bare_first_use` / `late_definition` / `missing_english_full` / `conflicting_english_full_name` / `conflicting_chinese_full`)做语义判断:
     - 确认是否为真正的”重要专业术语”(领域常识词如 DNA/RNA 可豁免)
     - 确认首次出现位置是否确实缺少”中文全称(English Full Name, ABBR)”格式
     - 若为 `late_definition`:确认定义是否确实晚于首次出现
     - 若为 `conflicting_*`:确认全文是否真的存在不同英文全称/中文解释
   - 对 P2 问题(`missing_chinese_full` / `repeated_same_definition`):确认是否确实缺中文全称/是否真的重复同一定义
   - 过滤误报:LaTeX 标签、图表编号、数学变量等不是缩写
   - 输出:按文件/行号定位的可执行建议(只写建议,不改文件)
6. **术语一致性**:
   - 读取预检产物 `terminology_issues_summary.json`/`terminology_issues.csv` 作为起点
   - 每条 `term_variant` 问题列出了同一概念的多种英文写法(大小写/连字符差异),逐条判断:
     - 是否为真正的不一致(而非合理变体,如 “T cell” vs “T-cell” 在不同语境下均可接受)
     - 建议统一使用哪种形式(通常选出现次数最多的)
   - 过滤误报:句首大写、专有名词等合理的大小写差异不算不一致
   - 输出:按文件/行号定位的可执行建议(只写建议,不改文件)
7. **其它 QC**(至少 2 项):例如图表/公式编号与引用、风险与备选方案、创新点可验证性、夸大措辞等。

> 注意:thread 工作区内也**禁止修改**任何标书源文件;如需记录建议,写在 `RESULT.md` 或 thread 内新增的 `notes/*.md`(不改原文件)。

### 3) 汇总聚合(主线程)

你需要把 5 个 threads 的 `RESULT.md` 汇总为**一份**最终 QC 报告,并确保:
- 去重合并:同类问题合并,证据保留最强的 1-2 条
- 冲突处理:如果 threads 结论冲突,报告中明确指出并给出“为何选择/为何不确定”
- 优先级分级:P0(必须修复)/ P1(重要建议)/ P2(可选优化)
- 输出“可执行修改建议清单”:按文件/章节定位 + 建议改法 + 预计收益

### 4) 输出标准化报告(强制格式)

最终报告写入:
- `{run_dir}/final/nsfc-qc_report.md`(脚本会生成“底线版”报告骨架 + 确定性 findings)

报告必须包含以下固定章节(标题名保持一致):
1. `执行摘要`
2. `范围与只读声明`
3. `硬性问题(P0)`
4. `重要建议(P1)`
5. `可选优化(P2)`
6. `引用核查清单`
7. `篇幅与结构分布`
8. `建议的最小修改路线图`
9. `附录:复现信息(命令/路径/产物索引)`

同时输出两份 JSON(用于后续人工复核/自动化处理):
- `nsfc-qc_metrics.json`:字符数、章节分布、引用数量、缺失引用数量、预检信号聚合等
- `nsfc-qc_findings.json`:结构化问题列表(id/severity/location/evidence/recommendation/status)

你可以使用 `templates/` 下的模板文件(可选,但推荐):
- `templates/REPORT_TEMPLATE.md`
- `templates/FINDINGS_SCHEMA.json`

### 5) 非目标:编译检查

`nsfc-qc` 的定位是“内容质量 QC”(标书写得怎么样)。PDF 能否编译成功属于环境/工程质量,不在本技能范围内;请你在自己的 TeX/Overleaf 环境自行验证。

## 快捷脚本(可选,但推荐)

若希望可追溯与少出错,推荐优先使用“一键实例隔离”脚本:

0) 一键运行(推荐:交付目录 + sidecar 工作区)

```bash
python3 skills/nsfc-qc/scripts/nsfc_qc_run.py \
  --project-root projects/NSFC_Young \
  --main-tex main.tex \
  --deliver-dir projects/NSFC_Young/QC/vYYYYMMDDHHMMSS \
  --threads 5 \
  --execution serial
```

> 输出:交付目录内会有 `nsfc-qc_report.md/nsfc-qc_metrics.json/nsfc-qc_findings.json/validation.json` + `artifacts/`(选取的确定性证据)。

也支持 legacy/拆分式调用(只写入 `project_root/.nsfc-qc/`):

1) 预检(引用/篇幅/章节分布 + 引用证据包)

```bash
python3 skills/nsfc-qc/scripts/nsfc_qc_precheck.py \
  --project-root projects/NSFC_Young \
  --main-tex main.tex \
  --out projects/NSFC_Young/.nsfc-qc/runs/vYYYYMMDDHHMMSS/artifacts \
  --resolve-refs
```

2) 生成 parallel-vibe plan 并运行(默认串联 5 threads)

```bash
python3 skills/nsfc-qc/scripts/run_parallel_qc.py \
  --project-root projects/NSFC_Young \
  --run-id vYYYYMMDDHHMMSS \
  --threads 5 \
  --execution serial
```

3) 生成标准化 final 输出骨架(即使 threads 尚未运行也可执行)

```bash
python3 skills/nsfc-qc/scripts/materialize_final_outputs.py \
  --project-root projects/NSFC_Young \
  --run-id vYYYYMMDDHHMMSS
```

## 降级策略(必须提供)

若 `parallel-vibe` 不可用(脚本缺失或 runner CLI 不可用),仍需完成 QC:
- 用单线程完成同一份 QC 清单
- 仍然输出同样的标准化报告与 JSON
- 并在 `附录:复现信息` 中写明:未启用 parallel-vibe 的原因与环境限制

Related Skills

nsfc-roadmap

157
from InternScience/DrClaw

当用户明确要求"生成 NSFC 技术路线图/技术路线图绘制/roadmap/flowchart"或需要把标书研究内容转成"可打印、A4 可读"的技术路线图时使用。默认输出可编辑源文件(`.drawio`)与可嵌入文档的渲染结果(`.svg`/`.png`/`.pdf`);当用户主动提及 Nano Banana/Gemini 图片模型时,可切换为 PNG-only 模式。⚠️ 不适用:用户只是想修改某张已有图片的格式/尺寸(应使用图片处理技能)、只是想润色技术路线文字描述(应直接改写正文)。

nsfc-reviewers

157
from InternScience/DrClaw

当用户明确要求"评审国自然标书"、"模拟专家评审"、"审阅 NSFC 申请书"时使用。模拟领域专家视角对 NSFC 标书进行多维度评审,输出分级问题与可执行修改建议。⚠️ 不适用:用户只是想写/改标书某个章节(应使用 nsfc-*-writer 系列技能)、只是想了解评审标准(应直接回答)、没有明确"评审/审阅"意图。

nsfc-research-foundation-writer

157
from InternScience/DrClaw

当用户明确要求"写/改研究基础""研究基础+工作条件+风险应对编排"时使用。为 NSFC 正文"(三)研究基础"写作/重构,并同步编排"工作条件"和"研究风险应对",用证据链证明项目可行、资源条件对位研究内容、风险预案可执行。

nsfc-research-content-writer

157
from InternScience/DrClaw

当用户明确要求"写/改研究内容""研究内容+创新+年度计划编排"时使用。为 NSFC 正文"(二)研究内容"写作/重构,并同步编排"特色与创新"和"三年年度研究计划",输出可直接落到 LaTeX 模板的三个 extraTex 文件。

nsfc-ref-alignment

157
from InternScience/DrClaw

检查 NSFC 标书正文引用与参考文献的一致性与真实性风险(只读):核查 bibkey 是否存在、BibTeX 字段与 DOI 等格式问题,并生成结构化输入供宿主 AI 逐条评估“正文表述是否真的在引用该文献”;默认仅输出审核报告,不直接修改标书或 .bib(除非用户明确要求)。

nsfc-length-aligner

157
from InternScience/DrClaw

基于国自然标书篇幅预算标准;检查目标标书篇幅并总结差距;给出针对性优化建议;在尽量不改变原意的前提下扩写/压缩到达标。

nsfc-justification-writer

157
from InternScience/DrClaw

当用户明确要求"写/改 NSFC 立项依据""立项依据写作/重构"时使用。基于最小信息表输出价值与必要性、现状不足、科学问题/假说与项目切入点,并保持模板结构不被破坏。适用于 NSFC 及各类科研基金申请书的立项依据写作场景。

nsfc-humanization

157
from InternScience/DrClaw

去除 NSFC 标书中的 AI 机器味,使文本读起来像资深领域专家亲笔撰写(不适用:非标书内容/需修改格式/需补充新内容)

nsfc-code

157
from InternScience/DrClaw

根据 NSFC 标书正文内容,结合申请代码推荐库,为你给出 5 组申请代码1/2(主/次)推荐与理由;输出到 NSFC-CODE-vYYYYMMDDHHmm.md(只读,不修改标书)

nsfc-budget

157
from InternScience/DrClaw

当用户明确要求“写/生成 NSFC 预算说明书”“写预算说明”“生成 budget.tex / budget.pdf”“写国自然预算 justification”时使用。基于用户标书正文或补充材料,输出一份可提交的预算说明书 LaTeX 项目并渲染 `budget.pdf`。若用户未指定工作目录,必须暂停并先要求其指定。⚠️ 不适用:用户只是想了解预算原则;用户仅要预算表数字而不写说明书;或用户是 2026 青年 A/B/C 默认包干制且无需预算说明书的场景。

nsfc-abstract

157
from InternScience/DrClaw

当用户明确要求"写/润色 NSFC 标书摘要""生成中文摘要和英文摘要""把中文摘要翻译成英文摘要"时使用。输出中文、英文两个版本(英文必须是中文的忠实翻译版),同时输出标题建议(1个推荐标题+5个候选标题及理由)。中文摘要默认≤400字符,英文摘要默认≤4000字符。输出方式:将结果写入工作目录下的 `NSFC-ABSTRACTS.md`。⚠️ 不适用:用户只想翻译一段与标书无关的通用文本(应直接翻译);用户只想写立项依据/研究内容/研究基础正文(应使用对应 nsfc 系列 skill)。

nsfc-schematic

154
from InternScience/DrClaw

当用户明确要求"生成 NSFC 原理图/机制图/schematic diagram/mechanism diagram"或需要把标书中的研究机制、算法架构、模块关系转成"可编辑 + 可嵌入文档"的图示时使用。默认输出可编辑源文件(`.drawio`)与渲染文件(`.pdf`/`.svg`/`.png`);当用户主动提及 Nano Banana/Gemini 图片模型时,可切换为 PNG-only 模式。⚠️ 不适用:用户只是想润色正文文本(应直接改写文本)、只是想改已有图片格式/尺寸(应使用图片处理技能)、没有明确"原理图/机制图"意图。