# 新鲜度判定规则

## 概述

本规则定义了 5 级证据新鲜度分类（current / background / stale / undated / malformed）的详细判定标准和边界处理方法。

---

## 1. Current — 当前有效证据

### 定义

证据的时间信息落在 `canonical_time_frame` 内，或与当前任务的时间上下文高度匹配。

### 判定标准

| 条件 | 保守模式 | 标准模式 | 宽松模式 |
|------|----------|----------|----------|
| 证据日期在时间窗内 | ✅ Current | ✅ Current | ✅ Current |
| 证据日期早于时间窗 ≤7天 | ⚠️ Background | ✅ Current | ✅ Current |
| 证据日期晚于时间窗 ≤7天 | ⚠️ Background | ✅ Current | ✅ Current |
| 证据仅标注月份（与时间窗同月） | ⚠️ Background | ✅ Current | ✅ Current |

### 时间信息来源优先级

1. `publish_date` 字段（最可靠）
2. snippet 中的显式日期（"2024年5月15日""May 15, 2024"）
3. snippet 中的相对时间（"今日""本周""昨天"）— 需结合 canonical_time_frame 解析
4. URL 中的日期（`/2024/05/15/`）
5. 来源网站的日期标注

### 边界处理

- **时间窗边界 ±1天**：保守模式标记为 Current，但添加 `boundary: true` 标记
- **时间精度不足**（仅有年份）：保守模式标记为 Background，标准模式标记为 Current + Warning
- **未来日期**：可能是时区差异或数据错误，标记为 Malformed

### 示例

```
canonical_time_frame: 2024-05-01 ~ 2024-05-31

证据A: "2024年5月15日，OpenAI发布GPT-5" → ✅ Current
证据B: "2024年4月28日，谷歌宣布Gemini更新" → ⚠️ Background（保守）/ ✅ Current（标准）
证据C: "2024年5月，NVIDIA推出新GPU" → ⚠️ Background（保守）/ ✅ Current（标准）
证据D: "本周二，苹果发布iOS 18" → 需解析"本周二"对应日期后判定
```

---

## 2. Background — 背景参考证据

### 定义

证据时间落在 canonical_time_frame 之外，但内容仍有参考价值，可为当前事件提供背景上下文。

### 判定标准

| 条件 | 处理 |
|------|------|
| 时间窗之前 1~6 个月 | ✅ Background |
| 时间窗之前 6~12 个月，内容仍相关 | ✅ Background + Warning |
| 时间窗之后（已发生但超出范围） | ✅ Background |
| 周期性数据（季报/年报），最近一期在窗内 | ✅ Background（非当期数据） |
| 历史趋势数据/长期统计 | ✅ Background |

### 适用场景

- 为当前事件提供历史背景
- 展示趋势变化（"相比去年同期增长了..."）
- 提供基础定义/概念解释（技术术语、政策背景）
- 引用未变的长期政策/法规

### 示例

```
canonical_time_frame: 2024-05-01 ~ 2024-05-31

证据E: "2024年3月，欧盟通过AI法案" → ✅ Background（2个月前，提供政策背景）
证据F: "2023年全年，全球AI投资达到500亿美元" → ✅ Background（年度数据，提供趋势参考）
证据G: "AI（人工智能）是计算机科学的一个分支..." → ✅ Background（概念定义，不受时间限制）
证据H: "2022年1月，OpenAI发布GPT-3.5" → ✅ Background + Warning（2年前，相关性较低）
```

---

## 3. Stale — 过时证据

### 定义

证据内容明显过时，已被更新信息推翻、替代，或因时间流逝而失去参考价值。

### 判定标准

| 条件 | 处理 |
|------|------|
| 时间窗之前 >12 个月，且内容已被更新 | ✅ Stale |
| 内容已被后续事件明确推翻 | ✅ Stale |
| 数据已被新版本替代（旧版财报/旧版标准） | ✅ Stale |
| 临时性信息已失效（活动已结束/政策已废止） | ✅ Stale |

### 推翻检测方法

1. **版本检测**：证据提到"最新版本是 X"，但当前版本已是 Y
2. **事件状态检测**：证据提到"即将发布/正在讨论"，但事件已结束
3. **数据替代检测**：证据引用的统计数据已被更新的报告替代
4. **政策变更检测**：证据引用的政策法规已被新法规替代

### 示例

```
canonical_time_frame: 2024-05-01 ~ 2024-05-31

证据I: "2022年，GPT-4是最强大的语言模型" → ✅ Stale（已被GPT-5替代）
证据J: "OpenAI计划在2023年底发布GPT-5" → ✅ Stale（事件已发生，信息过时）
证据K: "根据2023年Q1财报，英伟达营收为..." → ✅ Stale（已被2024年Q1财报替代）
证据L: "iOS 17将于2023年9月发布" → ✅ Stale（事件已完成）
```

---

## 4. Undated — 无时间标注证据

### 定义

证据缺乏任何可解析的时间信息，无法判断其新鲜度。

### 判定标准

| 条件 | 处理 |
|------|------|
| 无 publish_date，snippet 无日期 | ✅ Undated |
| 仅含模糊时间词（"最近""近期""日前"） | ✅ Undated |
| 时间信息被截断（"2024年..." 后续缺失） | ✅ Undated |

### 处理策略

由 `freshness_policy.undated_handling` 控制：

| 策略 | 行为 |
|------|------|
| `downrank`（默认） | 保留但降权，建议下游流程标注"时间未知" |
| `flag_only` | 仅标记，不做降权处理 |
| `drop` | 移除（高风险场景下使用） |

### 示例

```
canonical_time_frame: 2024-05-01 ~ 2024-05-31

证据M: "据知情人士透露，某公司将发布新产品" → ✅ Undated（无任何时间信息）
证据N: "最近，AI技术在医疗领域取得重大突破" → ✅ Undated（"最近"无法精确定位）
证据O: "据悉，该政策将于今年..." → ✅ Undated（"今年"未指定具体年份）
```

---

## 5. Malformed — 时间格式损坏证据

### 定义

证据包含时间信息，但格式损坏、无法解析或自相矛盾。

### 判定标准

| 条件 | 处理 |
|------|------|
| 日期格式无法解析（"2024/13/45"） | ✅ Malformed |
| 时间信息自相矛盾（标题说2024年，正文说2022年） | ✅ Malformed |
| 未来日期（超过当前日期 >7天） | ✅ Malformed |
| 日期被严重截断或编码错误 | ✅ Malformed |

### 示例

```
canonical_time_frame: 2024-05-01 ~ 2024-05-31

证据P: "2024年2月30日，..." → ✅ Malformed（2月没有30日）
证据Q: 标题"2024年5月15日发布"，正文"该事件发生在2022年5月" → ✅ Malformed（时间矛盾）
证据R: "2025年8月，OpenAI将发布GPT-6" → ✅ Malformed（未来日期，除非canonical_time_frame覆盖）
证据S: "2024&#24180;5&#26376;..." → ✅ Malformed（HTML实体编码的日期，尝试解码后重新判定）
```

---

## Freshness Policy 覆盖规则

`freshness_policy` 参数可覆盖默认行为：

### conservatism_level（保守程度）

| 级别 | 行为 |
|------|------|
| `high`（默认） | 不轻易标记 current，边界案例降级为 background |
| `standard` | 边界案例（±7天、月份精度）标记为 current |
| `lenient` | 更宽松地标记 current，减少 background |

### stale_threshold_months（过时阈值）

- 默认值由场景决定（见 time-window-examples.md）
- 可通过此参数覆盖：设为 `3` 表示 3 个月前的证据标记为 stale

### cross_window_rule（跨时间窗规则）

| 规则 | 行为 |
|------|------|
| `background`（默认） | 时间窗外的证据标记为 background |
| `stale` | 时间窗外的证据直接标记为 stale（高风险场景） |

---

## 特殊处理规则

### 周期性数据

```
canonical_time_frame: 2024-Q2

季报类证据：
- 2024-Q2 季报 → Current
- 2024-Q1 季报 → Background（可做同比参考）
- 2023-Q2 季报 → Background（可做同比参考）
- 2022-Q2 季报 → Stale（过于久远）
```

### 法规/政策类证据

```
法规类证据：
- 法规当前有效 → Current（不受发布时间限制）
- 法规已被修订 → Stale（原始版本）
- 法规已废止 → Stale
- 无生效/废止日期 → Undated
```

### 定义/概念类证据

```
概念定义证据（"什么是机器学习？""区块链的定义"）：
- 基本定义不受时间影响 → Background（长期参考）
- 但如果定义已过时（如"最新AI模型是GPT-3"）→ Stale
```

---

## 时间偏差自动补偿规则

### 补偿级别定义

| 级别 | 含义 | 编排器处理 |
|------|------|-----------|
| `required` | 必须补搜，否则证据底座不可用 | 自动触发回溯 |
| `recommended` | 建议补搜，可提升证据质量 | 根据预算决定 |
| `optional` | 锦上添花，仅在预算充裕时执行 | 默认跳过 |

### current_ratio 异常检测

```
时间窗: 2025-01 至 2026-03 (15个月)
证据时间分布: 12/15 条集中在 2026-03 (仅1个月)
时间跨度占比: 1/15 = 6.7% (远低于50%阈值)

→ 触发 recommended 级补偿
→ 生成目标期间: 2025-01 至 2025-12 的补充查询
```

### 维度级补偿检测

当某维度（如 geopolitics）的所有证据均为 stale 或 undated 时：
- 标记该维度为"时间盲区"
- 生成针对性补充查询，优先级设为 `required`
- 在 freshness_profile.risk_flags 中记录具体维度

### undated 比例过高

```
total_evidence: 20
undated_evidence: 8 (40% > 30%阈值)

→ 触发 required 级补偿
→ 补偿查询重点: 尝试用更精确的搜索词重新获取带日期版本的同一信息
→ 生成建议: "使用引号精确匹配 + site:限制 + 日期限定符重新搜索"
```
