nsfc-schematic
npx skills add https://github.com/huangwb8/chineseresearchlatex --skill nsfc-schematic
Agent 安装分布
Skill 文档
NSFC åçå¾çæå¨
éè¦å£°æï¼é宿¹ï¼
- æ¬æè½ä» ç¨äºç§ç åä½ä¸å¯è§å表达ä¼åï¼ä¸ä»£è¡¨ä»»ä½å®æ¹è¯å®¡å£å¾æèµå©ç»è®ºã
å®å ¨ä¸éç§ï¼ç¡¬è§åï¼
- é»è®¤å°æ 书å 容è§ä¸ºææä¿¡æ¯ï¼ä» å¤çç¨æ·æç¡®æä¾çæä»¶æç®å½ã
- è¾åºå¾ä¸ä» ä¿çç§ç å¿ è¦æ¯è¯ï¼é¿å åå ¥æ å ³ä¸ªäººä¿¡æ¯ã
- é»è®¤ä¸èç½æåç´ æï¼å¦ç¨æ·è¦æ±èç½è¡¥å ï¼åºå 说æé£é©ã
è¾å ¥
ç¨æ·è³å°æä¾å ¶ä¸ï¼
spec_fileï¼ç»æåå¾è§æ ¼æä»¶ï¼æ¨èï¼æå¯æ§ï¼proposal_fileï¼å个æ 书æä»¶ï¼å¦main.texæextraTex/*.texï¼proposal_pathï¼æ 书ç®å½ï¼èªå¨æç´¢.texï¼
å¯éï¼
roundsï¼ä¼å轮次ï¼é»è®¤è§config.yaml:evaluation.max_roundsï¼output_dirï¼è¾åºç®å½ï¼å¯éï¼é»è®¤ä½¿ç¨config.yaml:output.dirnameï¼ç¸å¯¹å½åå·¥ä½ç®å½ï¼configï¼é ç½®æä»¶è·¯å¾ï¼å¯éï¼é»è®¤ä½¿ç¨æè½èªå¸¦nsfc-schematic/config.yamlï¼ç¨äºä¸ºæä¸ªé¡¹ç®åç¬è¦çoutput.hide_intermediateçåæ°ï¼contextï¼èªç¶è¯è¨æºå¶æè¿°ï¼ä» ç¨äºâè§å模å¼âï¼ç±plan_schematic.pyçæè§åèæ¡ä¸ spec èæ¡ï¼template_refï¼å¾ç±»åæ¨¡æ¿ id/familyï¼é«çº§é项ï¼é»è®¤â纯 AI è§åâä¸éè¦ä¹ä¸å»ºè®®è®¾ç½®ï¼
è¾åº
å¨ output_dir ä¸çæï¼æ¯æ¬¡è¿è¡ä¼å建é离ç run_*/round_*ï¼é¿å
å岿®çæ··å
¥ï¼ï¼
schematic.drawioï¼å¯ç¼è¾æºæä»¶schematic.svgï¼ç¢éå¾ï¼ä¼å ç¨äºææ¡£åµå ¥ï¼schematic.pngï¼é¢è§å¾schematic.pdfï¼å¯éï¼è¥å¯ç¨å¹¶æ¸²æå¨æ¯æï¼.nsfc-schematic/ï¼ä¸é´äº§ç©ç®å½ï¼é»è®¤å¼å¯éèï¼ç®å½åå¯é ç½®ï¼optimization_report.mdï¼latest ä¼åè®°å½ï¼æ¯æ¬¡è¿è¡è¦çæ´æ°ï¼spec_latest.yamlï¼latest 使ç¨ç specï¼ä¾¿äºå¤ç°/追溯ï¼config_used_best.yaml/evaluation_best.jsonï¼latest æä½³è½®æ¬¡å¤ç°è¯æ®runs/run_YYYYMMDDHHMMSS/ï¼æ¬æ¬¡è¿è¡ç®å½ï¼å«round_*ãæ¯è½®è¯ä¼°ä¸æ¸²æäº§ç©ï¼legacy/ï¼èªå¨è¿ç§»/æ¶çº³çå岿®çï¼å¦æ§çè¾åºçrun_*ãspec*.yamlãconfig_*.yamlãevaluation_*.jsonçï¼
é»è®¤æ
åµä¸ï¼output_dir æ ¹ç®å½åªä¿çäº¤ä»æä»¶ï¼drawio/svg/png/pdfï¼ä¸éèç®å½ .nsfc-schematic/ï¼é¿å
ä¸é´æä»¶æ±¡æç¨æ·å·¥ä½ç®å½ã
å ¼å®¹æ¨¡å¼ï¼
- å¦éæ¢å¤æ§è¡ä¸ºï¼ä¸é´æä»¶ä¸
run_*ç´æ¥åå¨output_diræ ¹ç®å½ï¼ï¼è®¾ç½®config.yaml:output.hide_intermediate=falseã
æ¯ä¸ª round_*/ é»è®¤ä¼çæä»¥ä¸âå¯è¿½æº¯è¯æ®âï¼å¯éè¿ config.yaml:evaluation.* å
³éï¼ï¼
evaluation.jsonï¼ä¸»è¯ä¼°å¨ç»æï¼å«score_base/score_penalty/score_totalï¼critique_structure.json / critique_visual.json / critique_readability.jsonï¼å¤ç»´åº¦æ¹å¤æ§èªæ£è¯æ®ï¼evaluation.multi_round_self_checkï¼ä» å¨å¯åå¼è¯ä¼°æ AI åéè·¯å¾ä¸çæï¼é¿å ä¸ AI å£å¾é夿£åï¼_candidates/ï¼æ¯è½®æéåé对æ¯ï¼evaluation.exploration.candidates_per_roundï¼
å½ config.yaml:evaluation.evaluation_mode=ai æ¶ï¼å¯éå¢å¼ºï¼ï¼èæ¬ä¼è¾åºç¦»çº¿åè®®æä»¶ï¼èæ¬ä¸å¨æ¬å°è°ç¨å¤é¨æ¨¡åï¼ï¼
round_*/_candidates/cand_*/ai_eval_request.md+ai_eval_response.jsonï¼AI è¯ä¼°è¯·æ±/ååºï¼ä¸»è¯ä¼°ï¼run_*/ai_tex_request.md+ai_tex_response.jsonï¼å½è¾å ¥æ¥èª TEX 䏿ªæä¾ spec_file æ¶ï¼ç¨äºâAI ç´æ¥è¯» TEX â çæ spec èæ¡âç离线请æ±/ååºï¼å¦æªååºåèªå¨é级为æ£åæ½åï¼
è§å模å¼é¢å¤äº¤ä»ï¼
schematic-plan.mdï¼è§åèæ¡ï¼åå¨å½åå·¥ä½ç®å½ï¼ä¾¿äºç¨æ·å¿«é审é ï¼å¯ç¨plan_schematic.py --no-workspace-planç¦ç¨ï¼
工使µ
读åé ç½®ï¼å¼ºå¶ï¼
å¼å§å读å config.yamlï¼ä»¥æ¤ä½ä¸ºæ§è¡åä¸çç¸æ¥æºï¼
rendererï¼ç»å¸å°ºå¯¸ãåä½ã渲æè¡ä¸ºrenderer.drawioï¼draw.io CLI 缺失æ¶çæç¤º/ï¼å¯éï¼èªå¨å®è£ çç¥layoutï¼èªå¨å¸å±åæ°layout.template_refï¼å¾ç±»å模æ¿ï¼é«çº§é项ï¼é»è®¤ä¸å¯ç¨ï¼æ¨¡åç»å»ä» ç¨äºå¦ä¹ ï¼è§references/models/templates.yamlï¼layout.titleï¼æ¯å¦å°spec.titleè½å¾ï¼ä»¥å为æ é¢é¢ççé¡¶é¨ç©ºé´ï¼é¿å æ é¢é ç½®åµå°¸åï¼layout.text_fitï¼èç¹ææ¡âèªå¨æ©å®¹âçç¥ï¼é¿å 导åºåæå溢åº/鮿¡ï¼layout.auto_expand_canvasï¼å½èç¹/åç»è¢«èªå¨æ©å®¹åï¼æ¯å¦èªå¨æ©å±ç»å¸ä»¥é¿å è¶çlayout.canvas_fitï¼ç»å¸æåçç¥ï¼å¯éæå å®¹è¾¹çæ¶ç¼©ï¼é¿å æç«¯æ¯ä¾ä¸å¤§é空ç½ï¼layout.routingï¼è·¯ç±é¿è®©åæ°ï¼æ´ä¿å®çéç¢ paddingãé¿è®©åç»æ 颿 ï¼layout.font.edge_label_sizeï¼è¿çº¿æ ç¾åå·ï¼edge label ä¸ä¼èªå¨è·énode_label_sizeï¼éåç¬é ç½®ï¼color_schemeï¼é è²æ¹æ¡evaluationï¼è¯åéå¼ã忢çç¥ï¼stop_strategyï¼ãæéä¸å¤è½®æ¢ç´¢åæ°evaluation.evaluation_modeï¼è¯ä¼°æ¨¡å¼ï¼é»è®¤heuristicï¼ai为å¯éå¢å¼ºï¼è¾åºç¦»çº¿ AI åè®®æä»¶å¹¶æ¶è´¹å®¿ä¸» AI ååºï¼æ ååºåèªå¨é级ï¼evaluation.thresholds.min_edge_font_px/warn_edge_font_pxï¼è¿çº¿æ ç¾åå·é¨ç¦éå¼ï¼å«ç¼©å°çæåå·æ£æ¥ï¼output.hide_intermediate/output.intermediate_dirï¼ä¸é´æä»¶éèçç¥ä¸ç®å½åoutput.max_history_runsï¼æå¤ä¿çæè¿ N 次run_*ï¼ä» å¨ hide_intermediate=true æ¶çæï¼planning.models_fileï¼å¾ç±»å模æ¿åºè·¯å¾ï¼é»è®¤references/models/templates.yamlï¼planning.planning_modeï¼è§å模å¼ï¼ai|templateï¼é»è®¤aiï¼çº¯ AI è§ååè®®ï¼
è§å模å¼ï¼æ¨è馿¬¡ä½¿ç¨ï¼
å½ç¨æ·é¦æ¬¡ä¸ºæ 书çæåç徿¶ï¼æ¨èå âè§å â 审é â åçæâï¼
- è°æ¥æ 书并çæâè§å请æ±åè®®âï¼èæ¬ä¼ç»¼åæåâç«é¡¹ä¾æ® + ç ç©¶å 容/ææ¯è·¯çº¿âï¼å¹¶çææ¨¡åç»å»ä¾å¦ä¹ ï¼ä¸è¦æ±é模æ¿ï¼ï¼
python3 nsfc-schematic/scripts/plan_schematic.py \
--proposal /path/to/proposal/ \
--output ./schematic_plan/
ï¼å ¼å®¹æ§æµç¨ï¼å¦éè®©èæ¬æç¡®å®æ§è§åç´æ¥çæèæ¡ï¼æ¨¡æ¿è§åï¼ï¼ä½¿ç¨ï¼
python3 nsfc-schematic/scripts/plan_schematic.py \
--mode template \
--proposal /path/to/proposal/ \
--output ./schematic_plan/
æä½¿ç¨èªç¶è¯è¨æè¿°ï¼
python3 nsfc-schematic/scripts/plan_schematic.py \
--context "ç¨ä¸å¥è¯/䏿®µè¯æè¿°æºå¶ä¸æ¨¡åå
³ç³»..." \
--output ./schematic_plan/
- 宿主 AI 纯è§åï¼æ ¹æ®
./schematic_plan/.nsfc-schematic/planning/plan_request.mdçè¦æ±ï¼ååºï¼
./schematic_plan/PLAN.md./schematic_plan/spec_draft.yaml
ï¼è§è§å¦ä¹ å¯éï¼è§åèæ¬ä¼ï¼å°½åï¼å¨ --output ç®å½ä¸çæâ模åç»å»âï¼ç¨äºå¦ä¹ ä¼ç§ç»æ/飿 ¼ï¼ï¼
./schematic_plan/.nsfc-schematic/planning/models_simple_contact_sheet.pngï¼éª¨æ¶/模å¼å¾ï¼æ¨èä¼å çï¼./schematic_plan/.nsfc-schematic/planning/models_contact_sheet.pngï¼å®æ´åèå¾ï¼ç¨äºé£æ ¼ä¸ç»èè¡¥å ¨ï¼
- 忬¡è¿è¡è§åèæ¬è¿è¡åæ³æ§æ ¡éªï¼èæ¬å°æ ¡éª spec ç»æï¼å¹¶ç»åº P0/WARN æç¤ºï¼ï¼
python3 nsfc-schematic/scripts/plan_schematic.py \
--proposal /path/to/proposal/ \
--output ./schematic_plan/
- 审é
schematic_plan/PLAN.mdä¸schematic_plan/spec_draft.yamlï¼ç¡®è®¤æ¨¡åååãèç¹æ¸ åãè¿æ¥å ³ç³»ä¸å¸å±å»ºè®®æ¯å¦åçã- å¦éæå¨èµ·èè§åèæ¡ï¼å¯åèï¼
nsfc-schematic/references/plan_template.md
- å¦éæå¨èµ·èè§åèæ¡ï¼å¯åèï¼
- ç¨
generate_schematic.pyè¿å ¥å¤è½®çæä¸ä¼åï¼
python3 nsfc-schematic/scripts/generate_schematic.py \
--spec-file ./schematic_plan/spec_draft.yaml \
--output-dir ./schematic_output/ \
--rounds 5
çææµç¨ï¼é»è®¤å ¥å£ï¼
python3 nsfc-schematic/scripts/generate_schematic.py \
--spec-file nsfc-schematic/references/spec_examples/ccs_framework.yaml \
--output-dir ./schematic_output \
--rounds 5
æµç¨æè§£ï¼
- è§£æ specï¼
spec_parser.pyï¼å¹¶èªå¨è¡¥å ¨å¸å±ã - çæ draw.io XMLï¼
schematic_writer.pyï¼ã - 颿£ï¼P0ï¼ï¼å¯¹
.drawioå XML well-formed æ ¡éªï¼å¤±è´¥åç«å³åæ¢å¹¶ç»åºå¯è¯»é误ã - 渲æ SVG/PNG/PDFï¼
render_schematic.pyï¼ã - è¯ä¼°å¾è´¨éï¼
evaluate_schematic.pyï¼ï¼å¹¶å¢å¼ºâè¿ç©ºç½æ¸²æ/å 容丢失âçè¯å«ä¸å级ã - å¤ç»´åº¦èªæ£ï¼
evaluate_dimension.pyï¼ï¼ç»æ/è§è§/å¯è¯»æ§ç¬ç«è¯æ®è½çï¼å¹¶æç¼ºé·çº¿æ§æ£åå¾å°score_totalã - è®°å½æ¯è½®ç»æå¹¶å¯¼åº best roundã
èæ¬èè´£
scripts/spec_parser.pyï¼è§£æ/æ ¡éª specï¼è¡¥å ¨èªå¨å¸å±ï¼æ ¡éªè¾¹ãscripts/schematic_writer.pyï¼å°è§èå spec 转为 draw.io XMLãscripts/render_schematic.pyï¼ä¼å draw.io CLI 渲æï¼ç¼ºå¤±æ¶å é¨å åºæ¸²æãscripts/ai_evaluate.pyï¼çæ/æ¶è´¹ AI è¯ä¼°ç¦»çº¿åè®®ï¼ai_eval_request.md / ai_eval_response.jsonï¼ï¼ä¸å¨èæ¬å è°ç¨å¤é¨æ¨¡åãscripts/ai_extract_tex.pyï¼çæ/æ¶è´¹ AI TEX æå离线åè®®ï¼ai_tex_request.md / ai_tex_response.jsonï¼ï¼ä¸å¨èæ¬å è°ç¨å¤é¨æ¨¡åãscripts/measure_schematic.pyï¼ä¸»è¯ä¼°çâ纯度éééå±âï¼å ä½/è·¯ç±/åç´ proxyï¼ï¼ä¿çç¨äºå¯åå¼è¯ä¼°ä¸é级å åºãscripts/measure_dimension.pyï¼å¤ç»´åº¦èªæ£çâ纯度éééå±âï¼structure/visual/readabilityï¼ï¼ä¿çç¨äºå¯åå¼èªæ£ä¸é级å åºãscripts/evaluate_schematic.pyï¼å¯åå¼è¯ä¼°ï¼å åºï¼ï¼å¯ç¨evaluation_mode=aiæ¶è¾åºç¦»çº¿ AI å议并æ¶è´¹å®¿ä¸» AI çè¯å®¡ååºï¼ç¼ºå¤±æ¶èªå¨åéå¯åå¼ï¼ãscripts/evaluate_dimension.pyï¼å¯åå¼å¤ç»´åº¦èªæ£ï¼ç¨äº penalty æ£åï¼å½ AI 主è¯ä¼°çææ¶é»è®¤è·³è¿ï¼é¿å å£å¾éå¤ï¼ãscripts/routing.pyï¼ç¡®å®æ§æ£äº¤è·¯ç±ï¼waypointsï¼ï¼ç¨äºæ¸²æå åºãdrawio åå ¥ä¸è¯ä¼°å£å¾å¯¹é½ãscripts/extract_from_tex.pyï¼ä» TEX æ½åæ¯è¯ç¨äºåç spec å¡«å ãscripts/generate_schematic.pyï¼ä¸é®ç¼æå¤è½®è¿ä»£ã
è¯ä¼°æ å
éç¹æ£æ¥ 6 个维度ï¼
- æåå¯è¯»æ§ï¼åå·éå¼ï¼
- èç¹éå ï¼äº¤å æ¯ä¾ï¼
- ç®å¤´å®æ´æ§ï¼ç«¯ç¹ææãäº¤åæ°éï¼
- ç»å¸æº¢åºï¼è¶ç/è´´è¾¹ï¼
- è§è§å¹³è¡¡ï¼éå¿åç§»ï¼
- æ´ä½ç¾è§ï¼åºäºæ¸²æäº§ç©çæ¬å°ä»£çè¯ä¼°ï¼
ç¡¬é¨æ§ï¼å¿ 须满足ï¼å¦åè§ä¸º P0ï¼ï¼
- æåä¸å¾æº¢åº/è¢«é®æ¡ï¼èç¹ææ¡ä¸åºè¶ åºèç¹è¾¹çï¼ä¹ä¸åºè¢«è¿çº¿è¦çï¼éè¿ draw.io å ç´ å±çº§ï¼åç»åºå±ãè¿çº¿ä¸å±ãèç¹é¡¶å± æ¥éä½é£é©ï¼ã
é¢å¤å¢å¼ºç»´åº¦ï¼æ´è´´è¿â缩å°å¯è¯»æ§/å®¡ç¨¿äººè§æâï¼ï¼
- é¿å¯¹è§çº¿è¿çº¿æ©ç½ï¼é¼å±æ´æ¸ æ°ç屿¬¡ä¸å¯¹é½ï¼
- è¿çº¿ç©¿è¶/è´´è¿èç¹æ©ç½ï¼åå°ç©¿å/è´´åé£é©ï¼
- è¿çº¿æ ç¾ç¼©å°å¯è¯»æ§é¨ç¦ï¼edge label çåå·ä¸ç¼©å°åçæåå·ï¼
- èç¹ææ¡æ¥æ¤åº¦ proxyï¼æç¤ºç¼©çææ¡æå¢å¤§èç¹ï¼
AI èªä¸»è¯ä¼°æ¨¡å¼ï¼ç¦»çº¿åè®®ï¼
- 触åï¼è®¾ç½®
config.yaml:evaluation.evaluation_mode=ai - è¡ä¸ºï¼èæ¬è¾åº
ai_eval_request.md+ai_eval_response.jsonï¼ä»¥å TEX åºæ¯ä¸çai_tex_request.md+ai_tex_response.jsonï¼æ¨¡æ¿ï¼å®¿ä¸» AI å¯åºäº spec+config+PNG/TEX åè¯ä¹å¤å®å¹¶åå responseï¼è¥ response 缺失æä¸åæ³ï¼èæ¬èªå¨åéå°å¯åå¼è¯ä¼°ï¼ä¿è¯æµç¨å¯è·éã
失败å¤ç
- draw.io CLI ä¸å¯ç¨æ¶ï¼
- é»è®¤ä½¿ç¨å 鍿¸²æå åºå¹¶ç»åºå¼ºæç¤ºï¼å 鍿¸²æå¯ç¨ï¼ä½æç»äº¤ä»è´¨éé常ä¸å¦ CLI 导åºï¼ï¼
- è¥
config.yaml:renderer.allow_internal_fallback=falseï¼åç´æ¥å¤±è´¥å¹¶æç¤ºå®è£ draw.ioã
- spec æ ¡éªå¤±è´¥æ¶ï¼ç«å³è¿åéè¯¯ï¼æåºå段路å¾ã
ç»´æ¤è èªæ£
- çæ¬å·ä»
è®°å½å¨
config.yaml:skill_info.versionã - ä¿®æ¹èæ¬åè³å°è¿è¡ 1 ç»ç¤ºä¾ï¼
references/spec_examples/*.yamlï¼ã - æ°å¢/è°æ´è¾åºå段æ¶åæ¥æ´æ° README ä¸ CHANGELOGã
交ä»ä¸èªæ£ï¼äº¤ä»åå¿ é¡»è¿ï¼
- A4/å±å¹å¯è¯»ï¼ä¸ä¾èµæ¾å¤§ï¼
- 主æµåæ¸ æ°ï¼ä¸âä¸ æ å·¦âå³ï¼
- é è² â¤ 3 ç§ä¸»è²è°ï¼å è®¸è¾ å©ç°ï¼
- èç¹å½å䏿£æä¸è´
- è¾åºå
å«
schematic.drawioä¸è³å°ä¸ç§å¯åµå ¥æ ¼å¼ï¼svg æ pngï¼ - è¿çº¿æ ç¾å¯è¯»ï¼ç¼©å°åçæåå· â¥ 10pxï¼