206 lines
6.7 KiB
Markdown
206 lines
6.7 KiB
Markdown
---
|
||
name: length-budget
|
||
description: 报告字数预算分配与执行校验。规定综述/研究/投资/管理各类型的最低字数、章节配额算法、字数自检逻辑、不足时的补写策略。dr-plan 用于 Phase 1 分配配额,dr-pm 和 dr-analyst 用于 Phase 2 执行校验。
|
||
---
|
||
|
||
# 字数预算系统(硬性 KPI)
|
||
|
||
## 一、报告类型与字数下限
|
||
|
||
| 报告类型 | 最小字数 | 建议章节数 | 典型单章字数 |
|
||
|---|---|---|---|
|
||
| 综述类(领域全景、技术综述) | **10,000** | 8-10 章 | 1,000-1,250 |
|
||
| 研究类(深度专题、竞品研究) | **30,000** | 10-12 章 | 2,500-3,000 |
|
||
| 投资报告(赛道/公司分析) | **20,000** | 10-12 章 | 1,700-2,000 |
|
||
| 管理/工艺类(运营分析、SOP) | **15,000-25,000** | 9-11 章 | 1,700-2,200 |
|
||
|
||
**总字数 = 正文字数**,不含:摘要、目录、参考文献、附录。
|
||
|
||
---
|
||
|
||
## 二、章节配额分配算法(dr-plan 用)
|
||
|
||
### Step 1:确定总字数目标
|
||
- 综述类 → 12,000 字(下限 10,000,留 20% 缓冲)
|
||
- 研究类 → 35,000 字(下限 30,000)
|
||
- 投资类 → 22,000 字
|
||
- 管理类 → 18,000 字(按选定)
|
||
|
||
### Step 2:按章节重要性分层
|
||
|
||
```
|
||
P0 章(2-3 章):核心论点章,字数配额 = 总字数 × 15-18% 每章
|
||
P1 章(3-5 章):主干证据章,字数配额 = 总字数 × 8-12% 每章
|
||
P2 章(2-3 章):辅助分析章,字数配额 = 总字数 × 5-8% 每章
|
||
引言+结论:每章 总字数 × 6-10%
|
||
```
|
||
|
||
### Step 3:验证总和
|
||
|
||
- 所有章节配额之和应等于总字数目标(±5%)
|
||
- 任意两章字数差距 **不超过 ±30%**(避免头重脚轻)
|
||
- 结论章必须 ≥ 总字数 10%
|
||
|
||
### Step 4:Section 分配
|
||
|
||
每章内:
|
||
- 每 section 最少 **800 字**(不够则合并 section)
|
||
- 章内 section 数量控制在 2-5 个
|
||
- 每个 section 下可分 sub-section(300-500 字)
|
||
|
||
### 示例(研究类 35,000 字 / 11 章)
|
||
|
||
| 章 | 定位 | 字数配额 | 占比 |
|
||
|---|---|---|---|
|
||
| 第 1 章 引言与边界 | intro | 2,100 | 6% |
|
||
| 第 2 章 核心观点(P0) | P0 | 5,250 | 15% |
|
||
| 第 3 章 机制剖析(P0) | P0 | 5,250 | 15% |
|
||
| 第 4 章 临床证据(P1) | P1 | 3,850 | 11% |
|
||
| 第 5 章 竞争格局(P1) | P1 | 3,500 | 10% |
|
||
| 第 6 章 产业链(P1) | P1 | 3,150 | 9% |
|
||
| 第 7 章 政策监管(P1) | P1 | 2,800 | 8% |
|
||
| 第 8 章 风险(P2) | P2 | 2,100 | 6% |
|
||
| 第 9 章 国际对比(P2) | P2 | 1,750 | 5% |
|
||
| 第 10 章 趋势判断 | P1 | 2,450 | 7% |
|
||
| 第 11 章 结论与建议 | conclusion | 2,800 | 8% |
|
||
| **合计** | | **35,000** | **100%** |
|
||
|
||
验证:
|
||
- ✅ 总和 = 35,000
|
||
- ✅ 最大(5,250)/ 最小(1,750)= 3 倍 → ❌ 超过 ±30% 了,需调整
|
||
- 调整:第 9 章升到 2,450(7%),从 P0 各降 400 → 验证通过
|
||
|
||
---
|
||
|
||
## 三、Phase 2 执行校验(dr-analyst/dr-pm 用)
|
||
|
||
### dr-analyst 交稿前自检
|
||
|
||
```
|
||
章节完成后,执行:
|
||
1. wc -w projects/<slug>/phase2/drafts/chXX.md
|
||
(中文字数用 Python:sum(1 for c in text if '\u4e00' <= c <= '\u9fff'))
|
||
2. 对照 framework.md 的 "字数配额":
|
||
- 实际 / 配额 < 0.7 → 不合格,继续挖掘
|
||
- 0.7 ≤ 实际 / 配额 < 0.85 → 警告,最好补足
|
||
- 0.85 ≤ 实际 / 配额 ≤ 1.3 → 合格
|
||
- 实际 / 配额 > 1.3 → 超纲,考虑拆分或精简
|
||
```
|
||
|
||
### dr-pm 汇总校验
|
||
|
||
Phase 2 结束时:
|
||
```
|
||
1. 统计全文字数:Σ(chXX.md 字数)
|
||
2. 对照 manifest.json 的 target_words:
|
||
- 如果 < 下限(10000/30000/20000/15000)→ ❌ 强制返工
|
||
- 在下限 ±5% → ⚠️ 需用户确认是否放行
|
||
- 超出下限 ≥ 10% → ✅ 合格
|
||
3. 写入 manifest.json 的 phase2.word_stats
|
||
```
|
||
|
||
### 不足时的补写策略(重要)
|
||
|
||
**不要让 analyst 为凑字数注水!** 字数不足的应对顺序:
|
||
|
||
1. **检查证据覆盖**:该章观点是否有 ≥2 独立 Tier 1-2 信源?若无 → 检索补证据
|
||
2. **展开数据细节**:把表格里的数字展开成文字分析(趋势、拐点、对比)
|
||
3. **增加案例**:用 1-2 个具体公司/产品案例佐证抽象观点
|
||
4. **补反方证据**:把反方证据段落写详细(500-800 字)
|
||
5. **延伸推论**:对核心判断做 "若成立则..." 和 "若不成立则..." 分支讨论
|
||
6. **国际对比**:若原文只讲中国,加一段国际对比
|
||
7. **实在不行**:和 dr-pm 商量是否拆/并章节
|
||
|
||
---
|
||
|
||
## 四、字数计算工具(中英混排)
|
||
|
||
```python
|
||
def count_chinese_words(text: str) -> int:
|
||
"""中英混排字数统计。中文字符 1 字,英文单词 1 字。"""
|
||
import re
|
||
chinese_count = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
|
||
# 去掉所有中文字符后,按空格切英文
|
||
text_no_cn = re.sub(r'[\u4e00-\u9fff]', ' ', text)
|
||
english_words = len(re.findall(r'[A-Za-z]+(?:[-\'][A-Za-z]+)*', text_no_cn))
|
||
return chinese_count + english_words
|
||
```
|
||
|
||
使用:
|
||
```bash
|
||
python3 -c "
|
||
import sys, re
|
||
with open(sys.argv[1]) as f:
|
||
text = f.read()
|
||
cn = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
|
||
en = len(re.findall(r'[A-Za-z]+(?:[-\'][A-Za-z]+)*', re.sub(r'[\u4e00-\u9fff]', ' ', text)))
|
||
print(f'中文字数: {cn}, 英文词数: {en}, 总计: {cn+en}')
|
||
" projects/<slug>/phase2/drafts/ch01.md
|
||
```
|
||
|
||
### 不计入字数的部分
|
||
- 代码块 ```...```
|
||
- Markdown 表格线框(|---|)
|
||
- 引用块 `> `
|
||
- 标题的 `#` 符号
|
||
- 链接的 URL(`[文字](url)` 只计文字部分)
|
||
|
||
---
|
||
|
||
## 五、manifest.json 字段规范
|
||
|
||
```json
|
||
{
|
||
"slug": "glp1-obesity-2026",
|
||
"topic": "GLP-1 减重药物竞争格局与投资机会",
|
||
"type": "研究类",
|
||
"target_words": 35000,
|
||
"min_words": 30000,
|
||
"chapters_planned": 11,
|
||
"phase1": {
|
||
"approved": true,
|
||
"approved_at": "2026-04-20T10:00:00Z",
|
||
"framework_path": "projects/glp1-obesity-2026/phase1/framework.md",
|
||
"chapter_quotas": [
|
||
{"index": 1, "title": "...", "quota": 2100, "priority": "intro"},
|
||
{"index": 2, "title": "...", "quota": 5250, "priority": "P0"},
|
||
...
|
||
]
|
||
},
|
||
"phase2": {
|
||
"started_at": "...",
|
||
"progress": "7/11",
|
||
"chapters": [
|
||
{
|
||
"index": 1,
|
||
"draft_path": "projects/.../drafts/ch01.md",
|
||
"actual_words": 2180,
|
||
"quota": 2100,
|
||
"status": "completed",
|
||
"sources_count": 12,
|
||
"tbd_claims": 0
|
||
}
|
||
],
|
||
"word_stats": {
|
||
"total": 34820,
|
||
"target": 35000,
|
||
"gap_pct": -0.5,
|
||
"verdict": "合格"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 六、硬规则总结
|
||
|
||
1. ✅ 综述 ≥10,000 字;研究 ≥30,000 字;投资 ≥20,000 字;管理 ≥15,000 字
|
||
2. ✅ 章节字数差距 ≤ ±30%
|
||
3. ✅ 每 section ≥800 字
|
||
4. ✅ 结论章 ≥ 全文 10%
|
||
5. ✅ Phase 2 每章完成自检字数
|
||
6. ✅ 不足下限强制返工
|
||
7. ❌ 禁止为凑字数注水(空洞形容词、套话、重复表述)
|
||
8. ❌ 禁止"打折"交稿
|