# Skill: Thesis Impact Judgment(单事件 → 主线影响传导)

> ADVICE 集成 §4.2 · Skill 沉淀第 2 章 · 从 `classifier.py` / `llm.py` / `decision._top_drivers` 三个模块的 docstring 散落处提炼。

## 0. 目的

把"单条事件文本 → 影响哪条主线 / 哪些维度 / 增强还是削弱"的分析规则,显式化为可复用的判断启发式。

这是 agent 全链路最前端、也最易出现 over-fire 的环节。本 skill 重点说明 **4 种典型陷阱 + 防护规则**。

## 1. 单事件 → 主线影响 4 步走

1. **直接主线匹配**(one-hop):事件文本直接含 4 主线核心词 → 直接挂(`classifier._match_threads`)
2. **应用场景过滤**:某些词是应用场景,不是主线
3. **公司反哺**:事件命中 seed 公司 → 把公司 thread 加到 threads(`enrich._enrich_company_threads`)
4. **LLM 兜底**(可选):置信度 < 0.55 或挂 ≥ 3 主线时,LLM 复核收口

## 2. 4 种典型陷阱 + 防护规则

### 2.1 应用场景 over-fire(防护:scenario 关键词不挂主线)

**陷阱**:"手机直连卫星"作为**应用场景**出现时,被误挂"终端"主线。

**例**:政策文档 "推动手机直连卫星等应用场景在车载、应急通信、低空经济落地" — 这里"手机直连卫星"是应用场景描述,不是事件主体,不应挂"终端"。

**防护**:`scenarios` 字段单独维护,不参与 threads 匹配。代码:`classifier._match_scenarios`。

### 2.2 政策长文列举 over-fire(防护:列举词权重降权)

**陷阱**:政策文件里"涉及核心网、终端、芯片、运营支撑多环节"这种列举式语句,rules 会全部挂上。

**例**:`labeled_real.jsonl n007`(政策长文 → expected 收窄到 `[终端, 运营支撑]`,核心网应被收窄掉)。

**防护**:
- rules 命中 ≥ 3 主线触发 LLM 兜底(`llm.escalation_thresholds` 阈值 = 3)
- LLM 复核基于事件主体而非列举词

### 2.3 对冲句(防护:净极性 + LLM 兜底)

**陷阱**:同句含增长 + 亏损(典型财报句),`thesis_impact` 极性平局,规则误判中性。

**例**:"公司本期营收增长 30%,但卫星通信业务亏损扩大" — 主从是"卫星通信业务亏损扩大"(削弱),不应中性。

**防护**:
- 规则层不强求平局判断,confidence < 0.55 触发 LLM 兜底
- LLM 提示词明确要求"对冲句判主从给净方向"(`llm._SYSTEM_PROMPT`)

### 2.4 公司反哺污染(防护:enrich 后再 LLM 复核)

**陷阱**:事件命中 "海格通信"(thread=终端),`enrich._enrich_company_threads` 把"终端"加到 threads,但事件本身是芯片研发推迟 → 应该是芯片主线,不是终端主线。

**例**:`labeled_real.jsonl n012`(海格基带芯片推迟 → expected [终端, 芯片],enrich 后规则可能丢了"芯片")。

**防护**:
- enrich 是辅助手段,不应覆盖事件本身的主线信号
- pipeline 顺序:`classify(text)` → `enrich(company_threads)` → `LLM 兜底(收口)`,LLM 在最后一道把 enrich 引入的噪音收口

## 3. thesis_impact 三值判断启发式

| impact | 启发式触发 | 例 |
|---|---|---|
| **增强** | 商用 / 中标 / 量产 / 投运 / 牌照 / 试验成功 / 订单 / 上市 | "信关站投运" |
| **削弱** | 推迟 / 失败 / 亏损 / 警示 / 召回 / 推迟 / 下调 | "火箭发射失败" |
| **中性** | 成立 / 公告 / 澄清 / 意向 / 框架协议 / 未落地 | "成立合资公司" |

代码:`classifier._classify_impact_polarity`(关键词 + 维度组合规则)。

## 4. 错误模式 vs Quality Check red flags

本 skill 的判断错误大多对应 `quality_checks.py` 的 red flags:

| 错误模式 | Quality flag | 检测点 |
|---|---|---|
| 主线分类越界本体 | `E_INVALID_DIMENSION` | `main_drivers[].dimension` 不在 Dimension enum |
| 单一信源驱动结论 | `E_ECHO_CHAMBER` | top driver 仅 1 条独立 evidence |
| 技术里程碑当商业化驱动 | `E_CASTLE_IN_AIR` | dimension=技术 + evidence 含"试验/试点/规划/拟" 关键词 |
| 主导公司亏损未识别 | `E_LOSS_COMPANY_HIGHLIGHTED` | peer_rank=1 公司 last_quarter_revenue ≤ 0 |

详见 [`agent/satellite_agent/quality_checks.py`](../satellite_agent/quality_checks.py)。

## 5. 与代码的对应关系

| 启发式 | 代码 | 测试 |
|---|---|---|
| 4 主线匹配 | `classifier._match_threads` | `test_classifier.py::test_threads_*` |
| 应用场景过滤 | `classifier._match_scenarios` | `test_classifier.py::test_scenarios_*` |
| 维度匹配 | `classifier._match_dimensions` | `test_classifier.py::test_dimensions_*` |
| impact 极性 | `classifier._classify_impact_polarity` | `test_classifier.py::test_impact_*` |
| LLM 兜底 | `llm.classify_with_llm` + 触发门 `escalation_thresholds` | `test_llm.py::*` |
| 公司反哺 | `enrich._enrich_company_threads` | `test_enrich.py::*` |
| top-3 driver 聚合 | `decision._top_drivers` | `test_decision.py::test_top_drivers_*` |

## 6. D V1 验证回路覆盖

[`samples/labeled_validation.jsonl`](../samples/labeled_validation.jsonl) 10 条中,本 skill 关键覆盖:

- v001 双主线 增强(NTN 试验)— exact ✅
- v007 over-fire 政策长文 — partial 🟡(rules 多挂核心网,LLM 应收窄)
- v012 公司反哺污染 — 🟡(海格 enrich 后多挂)
- v014 / v017 / v019 削弱方向 — exact ✅
- v021 / v025 中性方向 — exact ✅

当前 `thesis_impact` exact rate = **90%**(10/9),threads exact rate = **67%**(10/6 + 2 partial)。两个核心字段是最稳的,见 `satagent validate` 输出。

## 7. 不构成投资建议

本 skill 是方法论研究 + 代码 docstring 沉淀,**不构成任何投资建议**。

主线分类规则 / 关键词清单 / over-fire 防护启发式均为示范,operator 应根据自己的产业研究经验校准本体词典(`ontology.py`)和触发门阈值(`SATAGENT_LLM_CONF_THRESHOLD` / `SATAGENT_LLM_MAX_THREADS`)。
