zcbot/skills/proposal/SKILL.md

227 lines
14 KiB
Markdown

---
name: proposal
description: 撰写中国科研项目申报书 / 课题任务书 (国家重点研发计划、国家科技重大专项、国自然面上/青年、NSFC 联合基金、省基金、横向)。当用户要写本子、立项依据、研究方案、技术路线、申报书、任务书、申请书时使用。
---
# 科研申报
把课题信息变成可提交的申报书 .docx。**先定基金类型 → 八条对齐 → 逐章起草 → 验收渲染** —— 不要一口气出全文。
## 资源
下面所有路径都相对 **`<skill_dir>`** —— `load_skill` 返回头里的 `[skill=proposal, dir=<绝对路径>]`,用这个绝对路径拼脚本/资源,不要假设 cwd。
- `<skill_dir>/references/fund_types.md` —— 6 类基金的章节骨架 + 字数预算 + 必填表格 (always read)
- `<skill_dir>/references/review_redlines.md` —— 评审雷区与不可考核词清单
- `<skill_dir>/references/citation_gbt7714.md` —— GB/T 7714 顺序编码制 + 文献真实性铁律
- `<skill_dir>/references/budget_rules.md` —— 间接费用台阶 + B1-B4 表
- `<skill_dir>/templates/spec.md` —— 阶段一八条对齐的固定字段模板 (复制到 task 级 spec 文件,文件名见下文 §阶段一)
- `<skill_dir>/templates/{key_rd,major_project,nsfc_joint_fund}.md` —— **有完整章节模板**的 3 类基金;其它 4 类 (`nsfc_general` / `nsfc_youth` / `provincial` / `enterprise`) 复用 `nsfc_joint_fund``key_rd` 骨架,差异看 `fund_types.md` § 4-6
- `<skill_dir>/scripts/render_docx.py` —— md→docx,自动加目录 / 解析 `**bold**`/`*italic*`/`` `code` `` / 列表分行 / `![](path)` 居中插图 + 图题自动编号 / 识别 mermaid 块按 caption 查 `figures/fig_<caption>.png`
- `<skill_dir>/scripts/render_diagrams.py` —— sections/*.md 里的 ```mermaid``` 块预渲染成 `<task_dir>/figures/fig_<caption>.png`(caption 必填 + 全 task 唯一,优先 `mmdc`、回退 `mermaid.ink`)
- `<skill_dir>/scripts/word_count.py` —— 章节字数 vs 预算
- `<skill_dir>/scripts/quality_check.py` —— 结构完整性 / 假大空 / 占位符 / 指南覆盖度(`--spec`)/ 插图(无 `![]()` 引用 / ASCII 字符画 / mermaid 缺 caption / caption 撞名)
## 阶段零: 摄取素材 (有 PDF/DOCX/XLSX/URL 时才走)
用户给指南 PDF / 团队介绍 DOCX / 预算 XLSX / 政策网页 URL → 先转成 `<task_dir>/source/<name>.md`,后续阶段一才能读。统一用 `markitdown` CLI,表格 / 列表 / 标题层级会自动保留:
```bash
markitdown <path>/guide.pdf -o <task_dir>/source/guide.md
markitdown <path>/team.docx -o <task_dir>/source/team.md
markitdown <path>/budget.xlsx -o <task_dir>/source/budget.md
markitdown https://example.com/x -o <task_dir>/source/policy.md
```
转完后 spec 阶段直接 `read <task_dir>/source/*.md` 拿事实,不要凭印象写。
## 阶段一: 八条对齐
产物:**task 级 spec 文件**(申报书"宪法",阶段二每章前都要重读)。文件路径按 system prompt 的《task 级「宪法」文件命名约定》:
<task_dir>/<today>-<task_short_id>-<task_name>.spec.md
`<today>` / `<task_short_id>` / `<task_name>` 用 system prompt 注入的实际值替换。
**0. 先检测已有 spec**(同 working_dir 可能已经有别的 task 的 spec,也可能本 task 之前定调过要重写):
```
glob <task_dir>/*-<task_short_id>-*.spec.md → 按文件名字典序排,取最大者作 current
```
(按 short_id 主锚,name 部分不参与匹配 — 用户改过 task name 时旧文件仍能定位)
- 若已有 current(当前 task 的 spec) → 读出展示给用户,问「**沿用此 spec 进阶段二** / **重定调**(以 today 为前缀写新版,旧版保留为历史快照)」,⛔ BLOCKING 等用户决定
- 没有当前 task 的 spec,但 working_dir 下有其它 task 的(`*-<别的 short_id>-*.spec.md`) → 仅作参考,不当 current 用;继续走下面 1-4
- 完全没有 → 直接走 1-4
1. **复制模板**: `read <skill_dir>/templates/spec.md``write <task_dir>/<today>-<task_short_id>-<task_name>.spec.md`
2. **先读 `<skill_dir>/references/fund_types.md` 选基金类型**(章节、字数、表格各不相同)
3. 按字段填,给用户预览
4.**BLOCKING:用户确认后才进阶段二**
字段清单见 `<skill_dir>/templates/spec.md` (基金类型 / 指南方向 / 关键科学技术问题 / 创新点 / 研究内容骨架 / 团队 / 考核指标矩阵 / 经费预算 / TODO 列表)。
## 阶段二: 逐章起草
每章两段式:**先列要点 → 用户确认 → 再起草 → 用户确认**。不要直接出正文。
**A. 起草前列要点** (改要点比改正文便宜):
1.**current spec**(按 §阶段一 §0 的 glob 规则拿到的字典序最大那份)与 `<skill_dir>/references/fund_types.md`,拿本章字数预算与必填要素
2. 列出 3-6 条要点骨架: 本章打算覆盖的论点 / 数据 / 表格,每条贴上对齐的指南要素与预估字数
3.**BLOCKING:用户确认要点 (改 / 加 / 删) 后才动正文**
**B. 正文起草**:
4. 复制 `<skill_dir>/templates/<fund_type>.md` 对应小节到 `<task_dir>/sections/NN_xxx.md`,按要点填
5. **关键章节一段一卡** —— 立项依据 / 研究方案 / 技术路线 / 考核指标矩阵: 写一段 → 报字数 + **预告下一段** → 等用户确认 → 写下一段
普通章节一节一卡: 整节写完再报 + **预告下一节要点**
6. 报告格式 (每次卡点都按这个出):
- **本段 (节)**: 章节名 / 实际字数 / 字数预算 / 与指南对齐情况
- **下一段 (节) 预告**: 标题 + 3-5 条要点骨架 (论点 / 数据 / 表格,每条贴对齐的指南要素与预估字数);若已是本章最后一段,改预告**下一章**首段要点
- 提问: "本段可以了吗?下一段要点要改 / 加 / 删什么?"
7.**BLOCKING:停下来等用户明确反馈** ("OK"、"下一段"、"继续") 后才动笔。"看起来不错"、沉默、追问都不算确认 —— 用户对下一段要点没异议也算默认通过,但**字数 / 与指南对齐异常**时必须主动追问
8. 用户确认了**实质改动**(改写技术路线 / 调考核指标 / 换关键引文 / 增删章节 / 改预算结构)后,追加一行到 `<task_dir>/REVISIONS.md` —— 见 §修订日志
两段式 + 段段卡 + 预告下一段是为了拦早 —— 申报书 1.5-3 万字,模型连续生成容易把错方向推到底。
**例外**: 用户**主动且明确**说"别问,直接全做"或"一气呵成" —— 才能一次跑完,跑完必须 `quality_check.py`。"太慢"/"太碎"之类抱怨**不算**例外指令,继续问。
## 阶段三: 验收 + 渲染
```bash
python <skill_dir>/scripts/word_count.py <task_dir>/sections/ --fund-type key_rd
python <skill_dir>/scripts/quality_check.py <task_dir>/sections/ --fund-type key_rd --spec <task_dir>/<today>-<task_short_id>-<task_name>.spec.md
python <skill_dir>/scripts/render_diagrams.py <task_dir>/sections/ # 章节有 ```mermaid 块就跑
python <skill_dir>/scripts/render_docx.py <task_dir>/sections/ --fund-type key_rd -o <task_dir>/<topic>.docx
```
`quality_check` 不通过的项回头 edit 章节再跑。
`render_diagrams.py` 把 ```mermaid 块预渲染成 `figures/fig_<caption>.png`(caption 取 mermaid 块首行 `%% caption:` 注释,清洗成文件名)。优先 `mmdc`、回退 `mermaid.ink`。没装也没联网时,`render_docx.py` 走 ASCII 等宽兜底(评审能看,但不漂亮)。
caption 必须写、必须全 task 唯一 —— render_diagrams / quality_check 都会拦,撞了改成更具体的题文(e.g. "训练阶段架构" / "推理阶段架构")。
## 工作目录
`<task_dir>` = system prompt 给的**绝对路径**(`…/workspace/tasks/<task_id>/`)。**所有产物都写到 task_dir 下**,不要写到 cwd / `skills/` / repo 根。
```
<task_dir>/
├── source/ # 用户给的素材 (指南 PDF / 前期成果),同 working_dir 多 task 共享
├── <today>-<task_short_id>-<task_name>.spec.md # 阶段一定调,task 级宪法;命名见 system prompt 约定;按 short_id 主锚,重定调时写新日期,旧版保留
├── sections/ # 阶段二逐章产物 (按 templates/<fund_type>.md 切的小节命名);多 task 同章节用 LLM 判断/前缀区分
├── REVISIONS.md # 修订日志:每次卡点用户确认的实质改动,见 §修订日志
└── <topic>.docx # 最终产物 (按课题命名,不要 output.docx;多 task 时主题必须不同)
```
## 修订日志 (REVISIONS.md)
`<task_dir>/REVISIONS.md` 是产物迭代过程的紧凑可读 changelog。**spec 是宪法(定调一次),REVISIONS 是实施日志(每次卡点累加)** —— 两份独立但互参,后期 review / 复盘 / 跨周回看"上周这章为啥改成这样"靠这份。
### 何时记 / 何时不记
| 情形 | 记? |
|---|---|
| 用户确认改写**技术路线 / 考核指标 / 创新点 / 课题分解** | ✅ 必记 |
| 用户确认换 / 增 / 删**关键引文 / 附图 / 章节小节** | ✅ 必记 |
| 用户确认调**预算结构 / 经费比例 / 团队组成** | ✅ 必记 |
| 用户对要点骨架的主动修改(改 / 加 / 删) | ✅ 必记 |
| 自查阶段发现术语 / 数据 / 指标不一致后的统一改 | ✅ 必记(说明触发自查项) |
| 章节首次起草(从 0 写出来) | ❌ 不记(初稿不是改动) |
| 错别字 / 标点 / 纯排版调整 | ❌ 不记 |
| 模型自己改改撤撤、用户没明确确认 | ❌ 不记 |
> 拿不准 → 倾向不记。`REVISIONS.md` 是"用户与 LLM 共同沉淀的实质决策",不是流水账(那是对话历史的事)。
### 格式
文件首次创建时写头(只写一次):
```markdown
# 修订日志
> 产物迭代过程中每次用户确认的实质改动,按时间倒序追加(最新在上)。spec 是宪法定调,本文件是实施日志。
```
每次记一笔追加在头注释之后、最新一笔的顶部(一行 = 一次改动):
```
- `<YYYY-MM-DD HH:MM>` | <文件:章节/段> | <一句话改了什么> — <为什么>
```
### 实例
```
- `2026-03-12 16:20` | sections/03_研究方案.md §技术路线第 2 段 | 加并行训练-推理共享显存设计 — 用户反馈原方案在 V100 上爆显存,需说明工程可行性
- `2026-03-12 14:05` | sections/05_考核指标.md 表 1 | 准确率指标从"≥85%"提升为"≥90%" — 指南未限上限,加码增强竞争力
- `2026-03-11 10:30` | <today>-<short>-<name>.spec.md §4 创新点 | 创新点 2 删除"基于量子计算"措辞,改为"基于异构计算" — 评审雷区,量子计算属过度承诺
```
### 操作
每次卡点用户确认后,用 `edit` 在头注释之后插入新一行(不要 append 到文件末尾 —— 倒序读才能秒看最新)。文件不存在就 `write` 创建带头注释的新文件。
## 章节骨架速查
写每章前在脑子里过一遍这 4 个 pattern:
- **立项依据三段式**: 现状 (国内外格局,40%) → 痛点 (具体到指标差距,30%) → 切入点 (本项目为什么是我们,30%)
- **研究方案四要素**: 总体目标 → 任务分解 → 关键技术路线 → 可行性论证
- **创新点三特征**: 基本形态 (新方法/模型/机制) + 前沿性 (与 SOTA 比) + 知识产权特征 (专利/标准/论文)
- **考核指标矩阵**: 指南指标(字面抄) → 本项目指标(可超出不能低于) → 立项时已有值 → 完成时值 → 考核方式(CNAS/CMA / 测试大纲专家评审 / 应用示范报告)
边界 (最容易混):
- 立项依据回答 **WHY** (背景+痛点) | 研究目标回答 **WHAT 终态** (量化指标) | 研究内容回答 **WHAT 任务** (技术清单) | 研究方法回答 **HOW 原理** (算法/模型) | 技术路线回答 **HOW 流程** (输入→处理→输出)
## 插图 (流程图 / 结构图 / 技术路线图 / 甘特图)
**所有图都要落成 png 并在 md 里 `![](...)` 引用**;ASCII 字符画 (`┌─┐│`) Word 里必错位,`quality_check.py` 会 fail。图编号 `render_docx.py` 全局自增(图 1 / 图 2 ...),**不要手写"图 2-2"**。
| 图类型 | 工具 | 怎么用 |
|---|---|---|
| 流程 / 结构 / 关系 / 技术路线 / 时序 / 甘特(也行) | **mermaid** | 直接写 ```mermaid 块,**首行必须** `%% caption: <题>`(必填 + 全 task 唯一,既是文件名也是 docx 图题),`render_diagrams.py` 渲成 `figures/fig_<caption>.png` |
| 数据图表 (柱/折/饼) / 甘特(更适合打印) | **matplotlib** | 落到 `<task_dir>/figures/<name>.png`,md 里 `![desc](figures/<name>.png)` |
| 已有 png/jpg (截图/设计稿) | 直接 | 同上 `![]()` |
mermaid 块示例:
````markdown
```mermaid
%% caption: 关键技术与研究内容映射
flowchart LR
Q1[问题1] --> T1[技术1] & T2[技术2]
T1 & T2 --> P[平台]
```
````
matplotlib 注意:中文字体 `plt.rcParams['font.sans-serif']=['SimHei','Microsoft YaHei']` + `axes.unicode_minus=False`;`figsize=(10,4)` / `dpi=150` / `bbox_inches='tight'`;颜色用 spec 主色而非默认色板;`render_docx` 自动限宽 15cm。
## 硬规则速查 (违反即扣分)
- **字体**: 标题黑体四号; 正文中文宋体小四 / 英文 Times New Roman; 行距 1.5 倍 —— `render_docx.py` 已强制
- **指南对齐**: 项目名称 / 方向 / 创新分类 / 考核指标**字面对齐**指南文本,不得改写
- **不降低指标**: 任务书内容**不得低于**申报指南和申报书,只能持平或加码
- **量化考核**: "显著提升性能"❌ ;"10000 TPS、秒级响应"✅
- **真实文献**: 不可编造作者/期刊/DOI;需要引用先要用户提供清单,详见 `citation_gbt7714.md`
- **经费比例**: 间接费用 ≤500 万部分 ≤30% / 500-1000 万 ≤25% / >1000 万 ≤20%
- **限项**: 在研重点研发/重大专项/农业核心技术 ≤2 项;同年同人不重复申请
- **不堆形容词**: "首次提出""填补空白""国际领先"一律不用,除非用户明确要
## 反模式
- 未 spec 就硬编正文 / 一次性出全文 / 跳过"列要点"直接写正文
- 关键章节(立项依据/研究方案/技术路线/考核指标)整章一次出 —— 必须段段卡
- **基于"通用模板"自行套基金类型** —— 重大专项 vs 国自然结构完全不同,先查 `fund_types.md`
- **自己造数据/指标/单位/经费** —— 不知道就 `<TODO 待用户提供>`
- 引文写"[Smith et al., 2023]" 但其实没这篇文献
- 不跑 `quality_check.py` 就交付 / 文件名 `output.docx` / `申报书.docx`(按主题命名)
- 插图相关(`quality_check.py` 会拦):ASCII 字符画当图、`[图 2-2 xxx]` 裸占位、手写图编号、mermaid 块缺 caption、caption 撞名
## 输出
完成后给用户:
- 文件路径
- 各章节字数 vs 预算
- 与指南考核指标的逐项对齐表
- `<TODO>` 待补项清单