# 本体 (Ontology) 详解

> 本文档与 `satellite_agent/ontology.py` 一一对应。修改词典时请同步更新本文档。

## 1. 顶层维度

事件被分类到下面四个独立维度,合起来构成一个事件的"身份":

| 维度 | 值域 | 说明 |
|---|---|---|
| **Thread (主线)** | 核心网 / 终端 / 芯片 / 运营支撑 | 产业链 4 个层级,源自 PRD §3.1 |
| **Scenario (场景)** | 低空 / 车载 / 海事航空 / 工业IoT / 应急 / 具身智能 | 6 个增量需求场景 |
| **Dimension (影响维度)** | 技术 / 产品 / 市场空间 / 商业模式 / 公司竞争力 / 风险 | 事件影响的切面 |
| **ThesisImpact (Thesis 三态)** | 增强 / 削弱 / 中性 | 对产业 thesis 的方向性影响 |

Threads / Scenarios / Dimensions 都是**多标签**(一个事件可命中 0~N 个);ThesisImpact 是**单标签**。

## 2. Thread 关键词词典

### 2.1 核心网 (CORE_NETWORK)

```
核心网, 5G NTN, NTN核心网, 卫星核心网, 信关站, 馈电站, 馈电链路,
星地融合, 星上处理, 波束, gNB, 回传, 组网, ATG, 再生式载荷, 透明转发,
星座, 低轨, 高轨, LEO, GEO, MEO, TT&C, 测控, 地面站, 星地链路
```

**设计原则**:
- 故意不含"卫星互联网" / "互联网卫星" — 这是产业泛词,几乎所有事件都会带,放进来会污染其他主线的归类(回归 round 1 已验证)
- "星座" / "低轨" / "高轨" 等天体描述词归核心网,因为它们在事件文本里通常描述组网拓扑

### 2.2 终端 (TERMINAL)

```
终端, 手持终端, 卫星电话, VSAT, 用户终端, 便携终端, 车载终端, 船载终端,
机载终端, 便携站, 手机直连卫星, 直连卫星, Direct-to-Cell, D2C,
宽带终端, 窄带终端, 用户单元, ODM, OEM
```

**设计原则**:
- D2C / Direct-to-Cell 同义词都覆盖
- ODM / OEM 命中表示供应链上下游事件

### 2.3 芯片 (CHIP)

```
芯片, 基带芯片, 射频芯片, RFIC, ASIC, SoC, 卫星通信芯片, NTN芯片,
FPGA, MCU, BBIC, MMIC, PA, 流片, 晶圆, 功放, 低噪放,
TR模组, TR组件, 射频前端, RFFE, 毫米波
```

**设计原则**:
- "毫米波"放芯片,因为产业事件提到它通常是 RF 性能上下文
- 不放"工艺"/"制程" — 太通用

### 2.4 运营支撑 (OPERATIONS)

```
运营商, 运维, 网管, BOSS系统, 计费, 支撑系统, OSS, BSS,
网络管理, 客户管理, 频谱协调, 运营支撑, 频轨,
频谱, 频率许可, 频段使用, 频段使用许可, 无线电管理,
运营平台, 业务支撑, 网管系统, 网络运营, 网运, 牌照
```

**设计原则**:
- 故意不含"频段" — 太泛(毫米波频段、5G 频段都会触发,污染芯片归类)。改用更具体的"频段使用" / "频率许可"
- "牌照"放运营支撑,因为它通常是运营资质相关

## 3. Scenario 关键词词典

| Scenario | 关键词 |
|---|---|
| **低空** | 低空, 无人机, UAV, eVTOL, 通用航空, 低空经济, 通航, 低空飞行, 低空空域 |
| **车载** | 车载, 汽车, 智能网联, 车联网, 前装, 新能源车, 新能源汽车, 乘用车, 商用车, 车规 |
| **海事航空** | 海事, 船舶, 船载, 航空, 民航, 机载, ARINC, 海上, 海空一体化, 船联网 |
| **工业IoT** | IoT, 物联网, 工业, M2M, 窄带, 传感, 工业互联网, 边缘计算, 低功耗 |
| **应急** | 应急, 救灾, 应急通信, 抢险, 灾备, 灾害, 救援, 公共安全 |
| **具身智能** | 具身, 具身智能, embodied, 人形机器人, 智能体 |

## 4. Dimension 关键词词典

| Dimension | 关键词 |
|---|---|
| **技术** | 技术, 突破, 研发, 专利, 标准, 样机, 测试, 试验, 首星, 在轨验证, 通过验收, 验收, 标准制定 |
| **产品** | 产品, 发布, 上市, 首发, 量产, 迭代, 新品, 立项, 推出, 新一代, 升级, GA |
| **市场空间** | 市场, 规模, 渗透率, 出货, 交付, 订单, 订单量, 出货量, TAM, SAM, 增长 |
| **商业模式** | 商业化, 定价, 套餐, 合作, 授权, 许可, 战略合作, 牌照, 合资, 联合体 |
| **公司竞争力** | 签约, 中标, 份额, 客户, 招标, 采购, 供应商, 斩获, 获得, 获, 签订, 中标失败, 未中标, 丢失 |
| **风险** | 延期, 事故, 失败, 失利, 受阻, 调查, 监管, 亏损, 下调, 下修, 终止, 暂停, 退市, 诉讼, 败诉, 侵权, 召回, 停产, 弃标, 违约, 裁员, 罚款, 处罚 |

**Risk 维度的特殊作用**:当 Risk 命中且极性词为 0 时(`pos == 0 && neg == 0`),classifier 会把 thesis_impact 从中性 fallback 到**削弱**。这是一条规则补丁,解决"事件命中风险但没有明确负面动词"的边界情况(参考 `classifier.py` 末尾)。

## 5. 极性词典

### 5.1 正向 (POSITIVE_KEYWORDS)

> 共 45 个,自动 dedupe + sorted。命中数为 thesis_impact 计算的输入。

```
上市, 上调, 中标, 交付, 在轨, 增长, 增持, 完成, 升级, 发布, 发射成功,
商用部署, 回购, 在轨, 投产, 投运, 推出, 提升, 斩获, 新一代, 新增订单,
扩产, 扩张, 战略合作, 成功, 投运, 投产, 通过, 通过验收, 采纳, 量产,
立项, 突破, 签订, 签约, 落地, 获, 获批, 获得, 规模化, 认证, 首单, 首发,
首次商用, 组网, 牵头, 入围, 入选, 启动
```

### 5.2 负向 (NEGATIVE_KEYWORDS)

> 共 35 个,自动 dedupe + sorted。

```
下修, 下调, 中止, 事故, 亏损, 份额下滑, 停产, 停服, 停牌, 处罚, 失利,
失败, 客户流失, 弃标, 延期, 推迟, 暂停, 未中标, 减持, 解约, 调查, 诉讼,
败诉, 受阻, 退出, 退市, 违约, 召回, 罚款, 终止, 裁员, 竞争加剧, 丢失,
发射失败, 侵权
```

### 5.3 负向反义对 (`_NEGATION_PAIRS`)

定义在 `classifier.py`。当负向短语包含正向子串时,扣减对应正向 hit,避免 pos/neg 互相抵消变中性。

| 负向短语 | 被覆盖的正向词 |
|---|---|
| `未中标` | `中标` |
| `中标失败` | `中标` |
| `发射失败` | `发射成功` |
| `未通过` | `通过` |
| `未完成` | `完成` |
| `未获批` | `获批` |
| `启动调查` | `启动` |
| `被调查` | `通过` |

## 6. 主线归属判定流程

文本 → classifier:

1. 对每个 Thread,扫描其 keywords,**任意一个命中即归入该 thread**
2. 一段文本可同时归入多个 thread(多标签)
3. Scenario / Dimension 同理

之后,在 ingest pipeline 里:

4. `match_companies(conn, text)` 通过 aliases 反向匹配文本中提到的公司
5. `enrich_with_company_threads` 把每家公司的 `thread` 字段并入 event.threads(去重)
6. 反哺来的 thread 记录在 `evidence.company_threads`,便于排查

## 7. 词典维护原则

经过 30 条回归集 round 1 复盘,沉淀出的设计原则:

| 原则 | 反例 (round 1 已修) |
|---|---|
| **产业泛词不进主线** | "卫星互联网" 被放在核心网 → 所有事件都被打上核心网 |
| **短词必须够具体** | "频段" → 毫米波频段也会命中 → 换成"频段使用" |
| **正向词同步给反义对** | 加了"启动" → 同步加 `启动调查 → 启动` 反义 |
| **dedupe 不可省** | "投运" 在 POS 里出现两次 → 计数 ×2 把"延期"压过 → 现在 `sorted(set(...))` 强制去重 |
| **争议标注写 `_note`** | 招标重启 = 正向还是中性?在样本里加 `_note` 说理由,不蒙混 |

## 8. 与代码的同步

本文档的"真实来源"是 `satellite_agent/ontology.py`。

确认词典一致性:
```bash
python -c "from satellite_agent import ontology as o; print(len(o.POSITIVE_KEYWORDS), len(o.NEGATIVE_KEYWORDS))"
```

确认分类行为:
```bash
satagent regress samples/labeled_regression.jsonl
```
