nsfc-qc
npx skills add https://github.com/huangwb8/chineseresearchlatex --skill nsfc-qc
Agent 安装分布
Skill 文档
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.texthreadsï¼é»è®¤ 5executionï¼é»è®¤serialï¼ä¸²èï¼ï¼ç¨æ·æç¡®è¦æ±å¹¶è¡æ¶ææ¹paralleldeliver_dirï¼æ¨èæä¾ï¼ä¾å¦.../QC/vYYYYMMDDHHMMSSï¼ï¼ç¨äºâå®ä¾é离â
åæ°é»è®¤å¼è§ config.yamlã
硬约æï¼å¿ é¡»éµå®ï¼
- ç¦æ¢åå
¥æ ä¹¦æºæä»¶ï¼å
æ¬ä½ä¸éäº
*.tex/*.bib/*.cls/*.styã - ç¦æ¢â为äºä¼åèç´æ¥æ¹æâï¼æ¬æè½åªäº§åº QC æ¥åä¸å¯æ§è¡å»ºè®®ï¼åç»æ¯å¦ä¿®æ¹ç±äººå·¥å¤æ ¸æå ¶å®åä½ç±» skill æ§è¡ã
- ä¸ç¼é å¼ç¨ï¼ä»»ä½âå¼ç¨ç伪/æ¯å¦éå¼âçç»è®ºï¼å¿ é¡»ç»åºè¯æ®é¾ï¼bib æ¡ç®ã论æé¢ç®/DOIãæ¥æºé¾æ¥ææ£ç´¢å¤±è´¥è¯´æï¼ï¼ä¸ç¡®å®æ¶æ 记为âéäººå·¥å¤æ ¸ï¼uncertainï¼âã
工使µï¼å¼ºå¶ï¼
0) å®ä½è¾å ¥ä¸ run ç®å½
- æ ¡éª
project_rootåå¨ï¼main_texé»è®¤main.texï¼è¥ä¸åå¨åå¨project_rootä¸ä¼å æ¢æµmain.texï¼å¦åååºåé*.texå¹¶è®©ç¨æ·ç¡®è®¤ã - çæ
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ï¼å°½æå¤§åªåè·åè®ºææ é¢/æè¦ï¼å¯éè·å OA PDF å¹¶æ½åæ£æçæ®µï¼ï¼å¹¶åæ¶æåæ ä¹¦å çå¼ç¨ä¸ä¸æï¼ä¾åç» AI åè¯ä¹å¤æï¼ä¸ç¡®å®å°±æ uncertainï¼
- ç« è/æä»¶çº§ç¯å¹ åå¸ï¼å符æ°/ç²ç¥åæ°ï¼
- 䏿æçæé项ï¼ç¡®å®æ§ï¼ï¼æ£æµç´å¼å·
"å ç«æ¯è§"è¿ç±»åæ³ï¼å¹¶ç»åºæ¿æ¢å»ºè®®ï¼æ¨è 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/terminology_issues.csv.../artifacts/terminology_issues_summary.json.../artifacts/reference_evidence.jsonl.../artifacts/reference_evidence_summary.json
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/è¯æ®å ï¼
- æ¯ä¸ª thread ç workspace 齿¯ snapshot çç¬ç«æ·è´ï¼snapshot 为âæå°å坿¬âï¼é常ä»
å¹¶è¡çç¥ï¼
- é»è®¤
serialï¼ä¸²èæ§è¡ threadsï¼ - ç¨æ·æç¡®è¦æ±âå¹¶è¡è·âæ¶æå¯ç¨
--parallel --max-parallel <k>
Thread ç»ä¸ä»»å¡ï¼æ¯ä¸ª thread ååæ ·ç QCï¼
æ¯ä¸ª thread ç RESULT.md å¿
é¡»è¦çåä¸ä»½æ£æ¥æ¸
åï¼å
许åç°ç¹ä¸åï¼ï¼è³å°å
æ¬ï¼
- æé£ä¸å¯è¯»æ§ï¼ç硬å¥ãå£è¯/å ç ãAI å³/模æ¿å³ãåé¿å¥ï¼ç»âæå°æ¹å建议âï¼åªå建议ï¼ä¸æ¹æä»¶ï¼ã
- å¼ç¨ç伪ä¸éå¼é£é©ï¼
- P0ï¼å¼ç¨ key ç¼ºå¤±ãææ¾èææ¡ç®ï¼æ æ³æ£ç´¢ä¸ bib ä¿¡æ¯å¼å¸¸ï¼
- P1ï¼å¯è½éå¼ï¼æ£ææè¨ä¸è®ºæé¢ç®/æè¦æ¹åææ¾ä¸ç¬¦ï¼ãå ä¿¡æ¯çç¹ï¼å¹´ä»½/æå/ä½è å¼å¸¸ï¼
- éæ¡ç»åºè¯æ®éç¹ï¼
bibkeyãæå¨å¥åï¼åæç段 ⤠50 åï¼ãbib æ¡ç®ã坿 ¸éªé¾æ¥/æ£ç´¢å ³é®è¯
- ç¯å¹
ä¸ç»æåå¸ï¼
- æ»ä½æ¯å¦è¿ç/è¿é¿ï¼ç¨å符æ°ä¸ç« èåå¸åè¿ä¼¼å¤æï¼
- åç« èæ¯ä¾æ¯å¦åçï¼ä¾å¦ï¼ç«é¡¹ä¾æ®/ç ç©¶å 容/ç ç©¶åºç¡çåé æ¯å¦å¤±è¡¡ï¼
- é»è¾ä¸è®ºè¯ï¼è®ºè¯é¾æ¯å¦éåï¼ç§å¦é®é¢âå说âç®æ âæ¹æ³âéªè¯â颿ï¼ï¼æ¯å¦åå¨è·³æ¥ãæ§ä¹ãæ¦å¿µå·æ¢ãç¼ºå¯¹ç §/ç¼ºææ ã
- 缩ç¥è¯è§èï¼
- 读å颿£äº§ç©
abbreviation_issues.csvï¼æabbreviation_issues_summary.jsonï¼ä½ä¸ºèµ·ç¹ - å¯¹æ¯æ¡ P1 é®é¢ï¼
bare_first_use/missing_english_fullï¼åè¯ä¹å¤æï¼- 确认æ¯å¦ä¸ºçæ£çâéè¦ä¸ä¸æ¯è¯âï¼é¢å常è¯è¯å¦ DNA/RNA å¯è±å ï¼
- ç¡®è®¤é¦æ¬¡åºç°ä½ç½®æ¯å¦ç¡®å®ç¼ºå°âä¸æå ¨ç§°ï¼English Full Name, ABBRï¼âæ ¼å¼
- 对 P2 é®é¢ï¼
missing_chinese_full/repeated_expansionï¼ï¼ç¡®è®¤æ¯å¦ç¡®å®ç¼ºä¸æå ¨ç§°/æ¯å¦çç夿¬¡éå¤å±å¼ - è¿æ»¤è¯¯æ¥ï¼LaTeX æ ç¾ãå¾è¡¨ç¼å·ãæ°å¦åéç䏿¯ç¼©å
- è¾åºï¼ææä»¶/è¡å·å®ä½ç坿§è¡å»ºè®®ï¼åªå建议ï¼ä¸æ¹æä»¶ï¼
- 读å颿£äº§ç©
- æ¯è¯ä¸è´æ§ï¼
- 读å颿£äº§ç©
terminology_issues_summary.json/terminology_issues.csvä½ä¸ºèµ·ç¹ - æ¯æ¡
term_varianté®é¢ååºäºå䏿¦å¿µçå¤ç§è±æåæ³ï¼å¤§å°å/è¿å符差å¼ï¼ï¼éæ¡å¤æï¼- æ¯å¦ä¸ºçæ£çä¸ä¸è´ï¼èéåçåä½ï¼å¦ âT cellâ vs âT-cellâ å¨ä¸åè¯å¢ä¸å坿¥åï¼
- 建议ç»ä¸ä½¿ç¨åªç§å½¢å¼ï¼é常éåºç°æ¬¡æ°æå¤çï¼
- è¿æ»¤è¯¯æ¥ï¼å¥é¦å¤§åã䏿åè¯çåçç大å°åå·®å¼ä¸ç®ä¸ä¸è´
- è¾åºï¼ææä»¶/è¡å·å®ä½ç坿§è¡å»ºè®®ï¼åªå建议ï¼ä¸æ¹æä»¶ï¼
- 读å颿£äº§ç©
- å ¶å® 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ï¼
æ¥åå¿ é¡»å å«ä»¥ä¸åºå®ç« èï¼æ é¢åä¿æä¸è´ï¼ï¼
æ§è¡æè¦èå´ä¸åªè¯»å£°æç¡¬æ§é®é¢ï¼P0ï¼éè¦å»ºè®®ï¼P1ï¼å¯éä¼åï¼P2ï¼å¼ç¨æ ¸æ¥æ¸ åç¯å¹ ä¸ç»æåå¸å»ºè®®çæå°ä¿®æ¹è·¯çº¿å¾éå½ï¼å¤ç°ä¿¡æ¯ï¼å½ä»¤/è·¯å¾/产ç©ç´¢å¼ï¼
åæ¶è¾åºä¸¤ä»½ JSONï¼ç¨äºåç»äººå·¥å¤æ ¸/èªå¨åå¤çï¼ï¼
nsfc-qc_metrics.jsonï¼å符æ°ãç« èåå¸ãå¼ç¨æ°éã缺失å¼ç¨æ°éã颿£ä¿¡å·èåçnsfc-qc_findings.jsonï¼ç»æåé®é¢å表ï¼id/severity/location/evidence/recommendation/statusï¼
ä½ å¯ä»¥ä½¿ç¨ templates/ ä¸çæ¨¡æ¿æä»¶ï¼å¯éï¼ä½æ¨èï¼ï¼
templates/REPORT_TEMPLATE.mdtemplates/FINDINGS_SCHEMA.json
5) éç®æ ï¼ç¼è¯æ£æ¥
nsfc-qc çå®ä½æ¯âå
容质é QCâï¼æ 书å徿乿 ·ï¼ãPDF è½å¦ç¼è¯æåå±äºç¯å¢/å·¥ç¨è´¨éï¼ä¸å¨æ¬æè½èå´å
ï¼è¯·ä½ å¨èªå·±ç TeX/Overleaf ç¯å¢èªè¡éªè¯ã
å¿«æ·èæ¬ï¼å¯éï¼ä½æ¨èï¼
è¥å¸æå¯è¿½æº¯ä¸å°åºéï¼æ¨èä¼å 使ç¨âä¸é®å®ä¾é离âèæ¬ï¼
- ä¸é®è¿è¡ï¼æ¨èï¼äº¤ä»ç®å½ + sidecar å·¥ä½åºï¼
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/ï¼ï¼
- 颿£ï¼å¼ç¨/ç¯å¹ /ç« èåå¸ + å¼ç¨è¯æ®å ï¼
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
- çæ parallel-vibe plan å¹¶è¿è¡ï¼é»è®¤ä¸²è 5 threadsï¼
python3 skills/nsfc-qc/scripts/run_parallel_qc.py \
--project-root projects/NSFC_Young \
--run-id vYYYYMMDDHHMMSS \
--threads 5 \
--execution serial
- çææ åå final è¾åºéª¨æ¶ï¼å³ä½¿ threads å°æªè¿è¡ä¹å¯æ§è¡ï¼
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 çåå ä¸ç¯å¢éå¶