当用户明确要求“写/生成 NSFC 预算说明书”“写预算说明”“生成 budget.tex / budget.pdf”“写国自然预算 justification”时使用。基于用户标书正文或补充材料,输出一份可提交的预算说明书 LaTeX 项目并渲染 `budget.pdf`。若用户未指定工作目录,必须暂停并先要求其指定。⚠️ 不适用:用户只是想了解预算原则;用户仅要预算表数字而不写说明书;或用户是 2026 青年 A/B/C 默认包干制且无需预算说明书的场景。
目标:基于标书正文与补充材料,写出一份“经得起财务与学术双重审视”的预算说明书,并交付可编辑 LaTeX 项目与 budget.pdf。
优先让用户按 skills/nsfc-budget/references/info_form.md 提供。最少要拿到:
general | local | youth若用户没给全,按下面规则处理:
config.yaml:defaults.total_budget_wan 取默认值。config.yaml:defaults.target_chars 推荐区间执行。config.yaml:defaults.per_section_max_chars。config.yaml:defaults.template_id。config.yaml:rules.budget_modes。config.yaml:rules.budget_scopes。<workdir>/.nsfc-budget/。<workdir>/<output_dirname>/(默认值见 config.yaml:defaults.output_dirname)。template_id、output_dirname、.template.yaml 里的 section_files/latex_entry/pdf_name 都必须是相对安全路径;不得包含绝对路径、. / .. 越界段。output_dirname 不得指向工作目录根路径,也不得与隐藏工作区 <workdir>/.nsfc-budget/ 重叠。先创建隐藏工作区与 budget_spec.json 骨架:
python3 skills/nsfc-budget/scripts/init_budget_run.py \
--workdir <workdir> \
--project-type <general|local|youth> \
--template-id 01
如用户已给材料路径,可追加多个 --material <path>。脚本会把材料快照复制到 .nsfc-budget/run_xxx/materials/。
若同秒重复初始化,脚本会自动避让目录名冲突,避免 run 目录互相污染。
读取正文与补充材料后,先在隐藏工作区内形成内部判断,再填写 budget_spec.json:
写作原则见:skills/nsfc-budget/references/budget-writing-rules.md。
budget_spec.json脚本生成的 budget_spec.json 是唯一结构化中间稿。至少补齐:
meta:项目题目、项目类型、预算模式、工作目录、输出目录、模板 ID、字数目标budget:总预算口径、直接费用总额(若已知)、设备/业务/劳务/合作转拨/其他来源金额sections:五个部分的正文段落(数组)evidence:关键测算依据、必要假设、待确认点要求:
设备费 + 业务费 + 劳务费 = 直接费用总额(若你已明确直接费用口径)budget.*_wan 与 sections.*.amount_wan 必须保持一致,避免出现两份金额源漂移。合作研究转拨资金 不能与前三项形成逻辑冲突其他来源资金 必须写明来源与用途;若无,则显式写“无”用脚本把 JSON 渲染为 LaTeX 项目,并把校验报告与编译日志留在隐藏目录:
python3 skills/nsfc-budget/scripts/render_budget_project.py \
--spec <workdir>/.nsfc-budget/run_xxx/budget_spec.json
脚本会:
<workdir>/<output_dirname>/extraTex/*.texbudget_spec.json 是否仍位于 <workdir>/.nsfc-budget/,保证隐藏工作区承诺不被破坏%、#、&、_),减少自然语言正文导致的编译失败validation_report.md/jsonvalidation_report.md 路径budget.pdf如校验失败,先修 budget_spec.json 再重新运行脚本,直到通过。
交付前必须至少复核这些点:
默认采用以下结构化策略:
最终输出必须同时包含:
<workdir>/<output_dirname>/:完整 LaTeX 项目<workdir>/<output_dirname>/budget.pdf中间过程保留在:
<workdir>/.nsfc-budget/run_xxx/skills/nsfc-budget/references/info_form.mdskills/nsfc-budget/references/budget-writing-rules.mdskills/nsfc-budget/scripts/init_budget_run.pyskills/nsfc-budget/scripts/render_budget_project.pyskills/nsfc-budget/models/01/.template.yaml