# PRD · 商业航天 wiki 知识库

> 文档版本 v1.0 · 2026-06-04 · 维护人：john
> 来源：`/Users/john/lichao/wiki/`（已建成）+ `/Users/john/lichao/商业航天材料/`（原始素材）

---

## 1. 背景与问题

`商业航天材料/` 目录下沉淀了 **117 份异构素材**（≈ 1.4 GB）：

| 类型 | 数量 | 内容 |
|---|---|---|
| docx | 22 | 行业研究短文、访谈大纲、销售简介 |
| pptx | 27 | 历年航天产业研究报告（核心知识载体） |
| pdf | 13 | 报告 PDF 版、第三方白皮书、行业年报 |
| xlsx / xls | 32 | 投融资台账、卫星数据库、OPEC/世行原始表 |
| mp3 / m4a | 14 | 访谈录音（凿空报告系列 + 1 份专题培训） |
| mp4 | 8 | 海外行业短视频（SpaceX、Impulse、Panos Panay 等） |
| zip | 1 | WOO2020 章节打包 |

**痛点**：

1. 资料散在不同目录、不同格式，无法跨文件检索"星网"、"垣信"、"SpaceX" 等实体的出现位置。
2. 同一份报告常有 PPTX + PDF + 简版 多个文件，人工去重困难。
3. 没有结构化的实体 / 人物 / 概念 / 时间线索引，只能逐文件翻阅。
4. 访谈、视频、表格还没有可被检索的文本表达。

**目标**：把全部源素材抽取、归纳成一个 **可追溯到原文的 wiki**，按 实体 / 人物 / 概念 / 报告 / 时间线 5 个轴检索；每条都带 `sources:` 指回原始抽取文本。

---

## 2. 已建成的处理链路

整套链路 = **5 个 Python 脚本** + **7 个并行 sub-agent**。源文件 `/Users/john/lichao/wiki/_scripts/`。

### Phase 1 · 文档抽取 (`extract.py`)

把 docx / pptx / pdf 抽取成纯文本 markdown，落到 `wiki/_extracted/*.md`。

| 输入类型 | 实现方式 |
|---|---|
| docx | `python-docx`：按 paragraph + table 顺序提取 |
| pptx | `python-pptx`：按 slide 编号，shape 文本 + 表格 + notes 全取 |
| pdf  | 优先 `pdftotext -layout`（poppler，对中文友好），失败回退 `pdfplumber` |

**去重规则**：
- 跳过 `~$` 临时锁文件
- 跳过 `帝国天眼` 嵌套目录里重复的 5 份 docx（同名外层已有）
- 跳过 3 份明确不抽的 PDF（密码保护或非中文数据型）：
  `OPEC_MOMR_July_2021.pdf` · `WOO_2020.pdf` · `垣信BP，密码是33334444.pdf`

**产出**：54 份 `_extracted/*.md` + 一份 `_extract_report.json`（含字数统计）。

### Phase 2 · 7 个并行 sub-agent 抽实体 / 概念 / 报告

把 54 份抽取文本按主题切给 7 个 sub-agent 并行处理，共享 `_drafts/_TEMPLATE.md` 公共指令。

| Agent | 主题 | 产出概况 |
|---|---|---|
| agent-1-macro | 全球宏观航天 | 4 reports, 41 entities |
| agent-2-us-sbirs | 美国天基红外预警全史 | 1 reports, 41 entities |
| agent-3-cn-industry | 中国商业航天产业 | 9 reports, 49 entities |
| agent-4-leo-comms | 卫星通信 / 低轨星座 | 7 reports, 45 entities |
| agent-5-subdomains | 遥感 / 导航 / 资源 / 超音速 / 破产 | 6 reports, 57 entities |
| agent-6-mna | 中移并购 / Project Star | 4 reports, 28 entities |
| agent-7-asset-low-altitude | 资产管理 / 低空 / 太空治理 | 4 reports, 31 entities |

每个 agent 落到 `_drafts/agent-N-<theme>/{entities,people,concepts,reports}/<slug>.md` + 一份 `timeline.md`。

**条目骨架**（frontmatter + 正文）：

```yaml
---
type: 公司 | 星座 | 卫星型号 | ...
country: 中国 | 美国 | ...
aliases: [...]
sources: [<抽取文件名>.md, ...]
---
```

### Phase 3 · 合并 (`merge.py`)

把 7 个 agent 的草稿合并到统一的 `wiki/{entities,people,concepts,reports}/`。

合并策略：

- 同 slug 多 agent → frontmatter 的 list 字段（`aliases / sources`）做 union；scalar 冲突保留首个 + 备注其它来源
- 正文：第一个 agent 的正文作为主体，其它 agent 以 `## 补充视角 — agent-N` 分节追加
- timeline：从 7 份 `timeline.md` 收集所有 `- YYYY-MM-DD: ...` 行 → 按时间倒序 → 去重 → 写到 `wiki/timeline/all.md`，每条尾标来源 agent

**当前合并战果**：30 个 entities、3 个 people、10 个 concepts 来自 2-4 个 agent 的合并。

### Phase 4 · 索引构建 (`build_index.py`)

为每个分类生成入口 `index.md`：

- `entities/index.md` — 按 **类型** + **国家/地区** 双轴聚合
- `people/index.md` — 按 **role**（创始人 / CEO / 总师 / 官员 / 学者）聚合
- `concepts/index.md` — 按 **category**（技术 / 商业模式 / 政策法规 / 频段轨道...）聚合
- `reports/index.md` — 按 **publish_year** 倒序 + **report_type** 双视图
- 顶层 `README.md` — 总览表 + 目录结构 + 使用指南

### Phase 5 · HTML 浏览器 (`build_html.py`)

生成 `wiki/index.html`（自包含 1.1 MB，浏览器直接打开），可视化全部 547 个条目 + timeline。

### Phase 6 · 去敏感信息审计 (`redact_check.py` + `build_redact_html.py`)

扫描全部条目 + 抽取文本里可能存在的姓名 / 电话 / 邮箱 / 公司内部代号，落到 `_redact_report.{json,md}` + 一份可交互的 `redact.html`。

---

## 3. 最终产出

```
wiki/
├── README.md                  ← 总览
├── PRD.md                     ← 本文档
├── index.html                 ← 1.1MB 自包含浏览器
├── prd.html                   ← 本文档的网页版
├── processing_status.html     ← 源文件处理进度可视化
├── redact.html                ← PII 审计可视化
├── entities/      (248 个 + index.md)
├── people/         (33 个 + index.md)
├── concepts/      (231 个 + index.md)
├── reports/        (35 个 + index.md)
├── timeline/all.md (483 条)
├── _extracted/      (54 份纯文本中间产物 + _extract_report.json)
├── _drafts/         (7 个 agent 原始草稿，保留作审计追溯)
└── _scripts/        (7 个 Python 构建脚本)
```

**条目总量**：547 个 markdown + 1 个 timeline 汇总。

---

## 4. 当前覆盖率（基线）

> 数据由 `build_processing_status.py` 自动扫描，对照 `_extract_report.json`。

| 类型 | 总数 | 已处理 | 待处理 | 覆盖率 |
|---|---:|---:|---:|---:|
| 📄 文档 docx | 22 | 17 | 5 | 77% |
| 📄 文档 pptx | 27 | 27 | 0 | **100%** |
| 📄 文档 pdf | 13 | 10 | 3 | 77% |
| 🎧 音频 mp3 | 1 | 0 | 1 | 0% |
| 🎧 音频 m4a | 13 | 0 | 13 | 0% |
| 🎬 视频 mp4 | 8 | 0 | 8 | 0% |
| 📊 表格 xlsx | 27 | 0 | 27 | 0% |
| 📊 表格 xls | 5 | 0 | 5 | 0% |
| 🗜️ 压缩包 zip | 1 | 0 | 1 | 0% |
| **合计** | **117** | **54** | **63** | **46.2%** |

**未处理原因分类**：

1. **链路未覆盖**（54 个）：音频、视频、表格、压缩包——`extract.py` 只支持 docx/pptx/pdf
2. **故意跳过**（5 个）：`帝国天眼` 内层目录下的重复 docx
3. **手动屏蔽**（3 个）：密码保护或非中文数据型 PDF（详见 §2 Phase 1）
4. **同名 zip 已处理 pdf 版本**（1 个）：`WOO2020_All_Chapters.zip` 内容已在 `WOO_2020.pdf` 中——其实那份 pdf 也被屏蔽了

---

## 5. 下一步计划（按 ROI 排序）

### 优先级 P0 · 音频转写（影响最大）

> 13 份 `.m4a` 是 **凿空-2024 年低轨通信星座报告** 的访谈原始录音（东航朱总、中海油苟总、中国卫通姜总、博宇智图曹总、海格通信周总、航天恒星刘总师、英大证券诺贝尔葛总、宇航智科专家、船舶专家、54 所贾老师 / 副主任、两份呼叫中心录音），是 wiki 现在没有的一手访谈素材。

**实现方案**：

```python
# wiki/_scripts/transcribe.py（新建）
# 1. 用 whisper.cpp / faster-whisper 本地跑（large-v3 中文）
# 2. 输出 _extracted/航天报告__凿空-...__访谈录音__<speaker>__m4a.md
# 3. 每段加 [HH:MM:SS] 时间戳
# 4. 在 _extract_report.json 里加 type:audio 字段
```

**预算**：M2 Max 本地 13 份 × 30-90 分钟音频 ≈ 4-6 小时一次过；或用 OpenAI Whisper API（约 ¥30/小时音频，总成本 ¥200 内）

**集成**：转写完后让一个 sub-agent 跑增量更新——对应凿空报告条目追加"## 访谈实录补充"段落 + 在被提及的 entities（东航 / 中海油 / 卫通 / 海格 / 航天恒星等）下追加"## 凿空访谈中的提及"。

### 优先级 P1 · 视频转写

8 份 mp4：3 份中文（太阳鸟核动力拖船 / 太空卫星平台 / 星链星历系统） + 5 份英文（SpaceX 1GB、Impulse Space、Panos Panay、spaceandtech、GoToImpulse）。

**实现方案**：同 P0 一样的 whisper 链路，先 `ffmpeg -i x.mp4 -ac 1 -ar 16k x.wav` 抽轨，再转写。

**注意**：英文素材的人物 / 公司名要进 `people/` 和 `entities/` 索引（目前 Panos Panay、Impulse Space CEO Tom Mueller 还没有人物条目）。

### 优先级 P2 · 表格转 markdown

32 份 xlsx / xls 是数字型素材，**不必全转**，按价值挑：

| 必转（信息密度高） | 处理方式 |
|---|---|
| `UCS-Satellite-Database 5-1-2023.xlsx` | 已有公开版本，做摘要 + 链接 |
| `航天投融资.xlsx` | 转 markdown 表 + 进 `concepts/` 或 `reports/` |
| `凿空-中国商业卫星公司海外运营可行性研究报告.xlsx` | 同源 PPTX 已处理，仅作补充表 |
| `致两千年后的你...xlsx`、`檐际新空...xlsx` | 同源 PPTX/PDF 已处理，作数据附录 |
| `BJDD-...预算书.xlsx` | 内部预算，按需 |

| 可跳过 | 原因 |
|---|---|
| 12 个 `OPEC 年报数据/Chapter N.xlsx` | 第三方公开数据，与航天主题低相关 |
| 5 个 `API_*.xls` | 世行公开数据，可按需 fetch |

**实现方案**：

```python
# wiki/_scripts/extract_sheets.py（新建）
# openpyxl + xlrd → 每个 sheet 一段 markdown 表格
# 大型表（>500 行）只取首 50 行 + schema 摘要
```

### 优先级 P3 · 屏蔽 PDF 再确认

`垣信BP，密码是33334444.pdf` 文件名里就给了密码，应当解锁后跑一次抽取：

```bash
qpdf --password=33334444 --decrypt in.pdf out.pdf && pdftotext out.pdf
```

`OPEC_MOMR_July_2021.pdf` / `WOO_2020.pdf` 是英文行业数据，确认是否仍要纳入。

### 优先级 P4 · 拓展和深化

- **跨条目反向引用图**：当前 `[[entities/xxx]]` 是单向链接，没有"被谁引用" 索引。可生成 `entities/<slug>.md` 末尾的 `## 反向引用` 段。
- **timeline 富化**：当前 483 条，但很多来源 agent 不一致 / 同事件多条。值得做一次人工 + LLM 二次过滤。
- **search 加上去**：当前 1.1 MB `index.html` 没有全文搜索，加一个客户端 lunr.js 索引即可。
- **PII 二轮审计**：`_redact_report.md` 里有 168 KB / 29 KB 的可疑命中，需要 john 过一遍标 false-positive / 实施替换。
- **与 X/Twitter 数据对齐**：`expert/X/`（原 `/Users/john/lichao/X/`）已经抓了 95 个航天账号社交信号，实测 SQLite 内 3123 条推文；可在 `entities/` 条目下追加 "## X 账号动态" 段，链回 X 库的 SQLite 查询。
- **与 Satellite Agent 整合（2026-06-06 排期）**：
  - **Tier 2（下下轮 P0，3-5 天 + 2-3 天）** — 单向：wiki 一次性灌进 `agent/satellite_agent/seed.py`（60+ 公司）/ `ontology.py`（关键词字典）/ `samples/labeled_validation.jsonl`（100+ corpus）；并新增 `agent/satellite_agent/sources/x_sqlite.py` 让 agent 每日吃 X 推文。详见 [`../../NEXT-STEPS.md §3.1.X`](../../NEXT-STEPS.md)。
  - **Tier 3（下下下轮，5-7 天）** — 双向：X SQLite 每日增量 → 回写 `wiki/entities/<slug>.md` 的 "## X 账号动态（自动更新）" 段；新账号（wiki 没有的）落 `_drafts/x_new_entities/` 人审。需要新写 `_scripts/sync_x_to_wiki.py`。

---

## 6. 验收标准

| 维度 | v1 基线 (当前) | v2 目标 |
|---|---|---|
| 源文件覆盖 | 54 / 117 (46%) | 95+ / 117 (>80%)，audio/video 全转，sheet 挑选转 |
| 条目数量 | 547 | 600+ |
| 反向引用 | 单向 | 双向，每条目展示"被引" |
| 检索 | 浏览 index.md | 客户端全文搜索 |
| PII | 报告生成 | 人工过审 + 标红/替换实施 |
| 时间线 | 483 条 | 一次性二次过滤，目标净化到 350-400 条 |

---

## 7. 链路图

```
源素材 117 个                  抽取层                            知识层                          展现层
─────────────                ──────────                       ──────────                      ──────────
商业航天材料/                                                                                wiki/index.html (1.1MB)
  ├─ docx (22) ───┐                                              ┌─ entities/ (248)         wiki/redact.html
  ├─ pptx (27) ───┼─► extract.py ──► _extracted/*.md (54)        ├─ people/    (33)        wiki/processing_status.html
  ├─ pdf  (13) ───┘     (py-docx           │                     ├─ concepts/ (231)         wiki/prd.html (本文)
  │                      python-pptx       ▼                     ├─ reports/   (35)
  │                      pdftotext)    7 agents 并行           ─►├─ timeline/all.md (483)
  │                                        │                     │
  │                                        ▼                     │
  │                                   _drafts/agent-*/*.md       │
  │                                   timeline.md                │
  │                                        │                     │
  │                                        ▼                     │
  │                                   merge.py ──► 合并          │
  │                                        │                     │
  │                                        ▼                     │
  │                                   build_index.py             │
  │                                                              │
  ├─ m4a / mp3 (14)   ◄── 待建 transcribe.py ────────────────────┤
  ├─ mp4 (8)          ◄── 待建 transcribe.py (ffmpeg+whisper) ──┤
  ├─ xlsx / xls (32)  ◄── 待建 extract_sheets.py ───────────────┤
  └─ zip / 加密 pdf   ◄── 待建 解锁脚本 ─────────────────────────┘
```

---

## 8. 元信息

- **构建脚本**：`wiki/_scripts/{extract,merge,build_index,build_html,redact_check,build_redact_html,build_processing_status}.py`
- **重新跑全链路**（约 5-10 分钟）：

  ```bash
  cd /Users/john/lichao
  python3 wiki/_scripts/extract.py        # 重抽 docx/pptx/pdf
  # 然后再跑 7 个 agent (人工)
  python3 wiki/_scripts/merge.py
  python3 wiki/_scripts/build_index.py
  python3 wiki/_scripts/build_html.py
  python3 wiki/_scripts/build_processing_status.py
  ```

- **相邻工作流**：`/Users/john/lichao/X/` 是 X (Twitter) 95 个航天账号抓取项目，独立于 wiki 但可在 v2 与 entities 表对齐。详见 `X/NEXT_STEPS.md`。
