v0.5: deep quality refactor (P0+P1+P2)

- Split dr-chief-editor (Phase 3 read-only) vs new dr-editor-in-chief (Opus, Phase 4 lead)
- New dr-translator (en->zh) and new humanizer-cn / output-hygiene / en-zh-translation skills
- Switch to English working language (Phase 2-3), final Chinese translation (Phase 4)
- /dr-init: add report title proposals + word budget mode
- /dr-frame: bilingual framework
- /dr-finalize: new chain editor->translator->polisher->reporter
- report-template.py: widows/orphans/keepWithNext, 3-color hierarchy, confidentiality banner
- dr-reporter: mandatory citations backfill + output hygiene check
- dr-pm: batch-level context compression via manifest.batches_summary
- mckinsey-method: SCQA only for Executive Summary + chapter intros (no explicit labels)
- length-budget: 4 word-budget modes + en/zh 1:1.4 ratio
This commit is contained in:
kai
2026-04-21 13:02:54 +08:00
parent 4a38f6bed1
commit a092af4398
20 changed files with 3376 additions and 1246 deletions
+120 -153
View File
@@ -1,205 +1,172 @@
---
name: length-budget
description: 报告字数预算分配与执行校验。规定综述/研究/投资/管理各类型的最低字数、章节配额算法、字数自检逻辑、不足时的补写策略。dr-plan 用于 Phase 1 分配配额,dr-pm 和 dr-analyst 用于 Phase 2 执行校验
description: 报告字数预算分配与执行校验。支持 4 种字数模式(自动/简明/详细/深度),英中互换规则(英文词数 ≈ 中文字数 × 0.7),章节配额算法与补写策略。Phase 1 用于设定预算,Phase 2/4 用于自检
---
# 字数预算系统(硬性 KPI
# 字数预算系统
## 一、报告类型与字数下限
## 一、四种字数模式(Phase 1 访谈时选择)
| 报告类型 | 最小字数 | 建议章节数 | 典型单章字数 |
用户在 /dr-init 访谈时选定其中一种,写入 manifest.word_budget_mode
| 模式 | 中文字数目标 | 英文词数目标 | 章节数 | 适用场景 |
|---|---|---|---|---|
| `auto` | 按类型默认 | 按类型默认 | 8-12 | 不明确时默认 |
| `concise` | 8,000-12,000 | 5,600-8,400 | 6-8 | 高管一阅即过 |
| `detailed` | 20,000-35,000 | 14,000-24,500 | 10-12 | 标准专业报告 |
| `deep` | 50,000-80,000 | 35,000-56,000 | 12-15 | 深度研究/行业专著 |
**auto 模式的默认字数**(按报告类型):
| 报告类型 | 中文字数 | 英文词数 | 章节数 |
|---|---|---|---|
| 综述类(领域全景、技术综述) | **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 |
| 综述 | 12,000 | 8,400 | 8-10 |
| 研究 | 35,000 | 24,500 | 10-12 |
| 投资 | 22,000 | 15,400 | 10-12 |
| 管理/工艺 | 18,000 | 12,600 | 9-11 |
**字数 = 正文字数**,不含:摘要、目录、参考文献、附录
**字数只是参考,以把问题讲清楚为第一优先**。过少则内容单薄,过多则注水。目标区间±20% 内都可接受
---
## 二、章节配额分配算法(dr-plan 用)
## 二、英文-中文字数换算
### Step 1:确定总字数目标
- 综述类 → 12,000 字(下限 10,000,留 20% 缓冲)
- 研究类 → 35,000 字(下限 30,000
- 投资类 → 22,000 字
- 管理类 → 18,000 字(按选定)
**核心换算率**:1 个英文词 ≈ 1.4-1.5 个中文字
### Step 2:按章节重要性分层
Phase 2 产出英文,Phase 4 翻译为中文后字数会自然膨胀约 40%。预算时:
- Phase 2 英文稿:按英文词数目标 × 1.0 写
- Phase 4 中文稿:英文词数 × 1.4 应落在中文字数目标的 ±15% 内
```
P0 章(2-3 章):核心论点章,字数配额 = 总字数 × 15-18% 每章
P1 章(3-5 章):主干证据章,字数配额 = 总字数 × 8-12% 每章
P2 章(2-3 章):辅助分析章,字数配额 = 总字数 × 5-8% 每章
引言+结论:每章 总字数 × 6-10%
自动换算工具:
```python
def en_words_to_zh_chars(en_words: int) -> int:
return int(en_words * 1.4)
def zh_chars_to_en_words(zh_chars: int) -> int:
return int(zh_chars / 1.4)
```
### Step 3:验证总和
---
- 所有章节配额之和应等于总字数目标(±5%
- 任意两章字数差距 **不超过 ±30%**(避免头重脚轻)
- 结论章必须 ≥ 总字数 10%
## 三、章节配额分配(dr-plan 在 Phase 1 用
### Step 4Section 分配
### 三层优先级
每章内:
- 每 section 最少 **800 字**(不够则合并 section
- 章内 section 数量控制在 2-5 个
- 每个 section 下可分 sub-section300-500 字)
```
P0(核心章,2-3 章):每章 = 总字数 × 13-16%
P1(主干章,3-5 章):每章 = 总字数 × 8-11%
P2(辅助章,2-3 章):每章 = 总字数 × 5-7%
引言 / 结论章:各 = 总字数 × 6-8%
```
### 示例(研究类 35,000 字 / 11 章)
### 约束
| | 定位 | 字数配额 | 占比 |
-节字数差距 ≤ ±30%(防止头重脚轻)
- 结论章 ≥ 总字数 × 10%
- 每节 ≥ 600 字(英文 ≥ 420 词),不足则合并节
### 示例:30,000 字研究报告分配
| 章 | 定位 | 中文配额 | 英文配额 |
|---|---|---|---|
| 第 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 → 验证通过
| 第 1 章 引言 | intro | 1,800 | 1,260 |
| 第 2 章 核心论点 | P0 | 4,500 | 3,150 |
| 第 3 章 机制剖析 | P0 | 4,500 | 3,150 |
| 第 4 章 临床证据 | P1 | 3,300 | 2,310 |
| 第 5 章 竞争格局 | P1 | 3,000 | 2,100 |
| 第 6 章 产业链 | P1 | 2,700 | 1,890 |
| 第 7 章 政策监管 | P1 | 2,400 | 1,680 |
| 第 8 章 风险 | P2 | 1,800 | 1,260 |
| 第 9 章 国际对比 | P2 | 1,500 | 1,050 |
| 第 10 章 趋势判断 | P1 | 2,100 | 1,470 |
| 第 11 章 结论与建议 | conclusion | 2,400 | 1,680 |
| **合计** | | **30,000** | **21,000** |
---
## 、Phase 2 执行校验dr-analyst/dr-pm 用)
## 、Phase 2 执行校验
### dr-analyst 交稿前自检
dr-analyst 每章交稿前自检dr-pm 每批校验。
```
章节完成后,执行:
1. wc -w projects/<slug>/phase2/drafts/chXX.md
(中文字数用 Pythonsum(1 for c in text if '\u4e00' <= c <= '\u9fff')
2. 对照 framework.md 的 "字数配额"
- 实际 / 配额 < 0.7 → 不合格,继续挖掘
- 0.7 ≤ 实际 / 配额 < 0.85 → 警告,最好补足
- 0.85 ≤ 实际 / 配额 ≤ 1.3 → 合格
- 实际 / 配额 > 1.3 → 超纲,考虑拆分或精简
### 英文字数统计
```bash
# 英文词数
wc -w projects/<slug>/phase2/drafts/chXX.md
```
### dr-pm 汇总校验
### 中文字数统计(未来用)
Phase 2 结束时:
```
1. 统计全文字数:Σ(chXX.md 字数)
2. 对照 manifest.json 的 target_words
- 如果 < 下限(10000/30000/20000/15000)→ ❌ 强制返工
- 在下限 ±5% → ⚠️ 需用户确认是否放行
- 超出下限 ≥ 10% → ✅ 合格
3. 写入 manifest.json 的 phase2.word_stats
```python
def count_chinese_words(text: str) -> int:
import re
cn = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
text_no_cn = re.sub(r'[\u4e00-\u9fff]', ' ', text)
en = len(re.findall(r"[A-Za-z]+(?:[-'][A-Za-z]+)*", text_no_cn))
return cn + en
```
### 不足时的补写策略(重要)
### 校验逻辑
**不要让 analyst 为凑字数注水!** 字数不足的应对顺序:
```
1. 读 chXX.md 统计英文词数
2. 对照 framework 中该章配额
3. 判断:
实际/配额 < 0.7 → 不合格,继续挖掘证据补写
0.7 ≤ 比值 < 0.85 → 警告,建议补足
0.85 ≤ 比值 ≤ 1.3 → 合格
比值 > 1.3 → 超纲,考虑精简或拆分
```
---
## 五、字数不足的正确补救路径
**绝对禁止为凑数注水**"在此背景下"、"随着...的不断发展"等空话)。字数不足的应对顺序:
1. **检查证据覆盖**:该章观点是否有 ≥2 独立 Tier 1-2 信源?若无 → 检索补证据
2. **展开数据细节**:把表格里的数字展开成文字分析(趋势、拐点、对比)
3. **增加案例**:用 1-2 个具体公司/产品案例佐证抽象观点
4. **补反方证据**:把反方证据段落写详细(500-800 字)
5. **延伸推论**:对核心判断做 "若成立则...""若不成立则..." 分支讨论
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 字段规范
## 六、manifest 字段规范
```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": "合格"
}
}
"word_budget_mode": "detailed",
"target_words_zh": 30000,
"target_words_en": 21000,
"min_words_zh": 24000,
"chapter_quotas_en": [
{"index": 1, "title": "...", "en_words": 1260, "priority": "intro"},
{"index": 2, "title": "...", "en_words": 3150, "priority": "P0"}
]
}
```
---
## 六、硬规则总结
## 七、Phase 4 翻译后中文字数校验
1. ✅ 综述 ≥10,000 字;研究 ≥30,000 字;投资 ≥20,000 字;管理 ≥15,000 字
翻译完成后:
1. 读 final_zh.md,按中英混排规则统计字数
2. 对照 manifest.target_words_zh
3. 落在 ±15% 区间内 → 合格
4. 不合格 → dr-polisher 在润色时适度扩展/压缩
---
## 八、硬规则
1. ✅ auto 模式按类型默认,其他模式按用户选择
2. ✅ 章节字数差距 ≤ ±30%
3.每 section ≥800 字
4.结论章 ≥ 全文 10%
5. ✅ Phase 2 每章完成自检字数
6. ✅ 不足下限强制返工
7. ❌ 禁止为凑字数注水(空洞形容词、套话、重复表述)
8. ❌ 禁止"打折"交稿
3.结论章 ≥ 全文 10%
4.Phase 2 英文稿每章自检,不足 70% 配额必须补
5. ✅ Phase 4 中文稿整体字数校验在 ±15% 内
6. ❌ 禁止为凑数注水(AI 套话、重复表述)
7. ❌ 禁止对字数"打折"交稿