# 历史重点挖掘 SOP

从用户历史对话中挖掘值得长期保留的重点：情绪事件、持续活动、已消失事项。

## 数据源

`../memory/L4_raw_sessions/all_histories.txt`（`compress_session.py` 产出）。不存在则先运行脚本。只读 user 内容。

## 执行约束

- 增量：维护已处理 session 列表，每次只扫新 session
- 分批处理时不拆分同一 session

## 产物

存 `./history_insight/`（不存在则创建），格式自定。产物是数据库，不是报告——每条发现都是下游任务的输入，遗漏即损失。

产物包含三个持久状态（可以是多个文件或一个文件内的多个区域）：
1. **活动知识层** — 每次扫描读取、更新、写回。记录所有识别到的活动及其最终分类。
2. **情绪事件列表** — 追加式，只增不改。
3. **增量标记** — 记录最后处理到的 session 标识，下次从此处之后开始。

每条发现必须含：
- session 标识（与 L4 zip 内文件名一致，如 `0403_2013-0403_2145`）
- 关键原文片段（可 grep 定位回原日志）
- 发现类型标签

## 提取标准

### 情绪事件

标记语气上的明显波动，不是内容上的。

**标记**：愤怒/质问/责备、讽刺挖苦、惊喜感激、反复纠正后语气突变、沮丧/无奈、预期落空后的失望或方向突变。

**不标记**：纯功能指令、语气平和的反馈、讨论负面话题但本人情绪稳定。

### 持续活动与已消失事项

维护一个持久的活动知识层（存 `./history_insight/`）。这是跨次运行的持久状态——每次扫描读取它、更新它、写回它。它不是报告，是数据库。

**你在建模的是**：这个用户的生活里现在有什么、曾经有什么。活动识别的唯一证据是用户在session中主动发起的请求或讨论——系统提示词、SOP列表、记忆引用中的被动出现不构成证据，不能从"系统里存在某个SOP"推断用户在做某事。

- 持续活动 = 仍然存在于用户生活中的事——值得深入了解其细节
- 已消失 = 曾经存在但已离开的事——可能导致已有记忆过时

判断"离开"不需要用户明确表态。事项本身的性质就是证据——有终点的事做完了就是消失了，没终点的事沉默不代表消失。

每个条目必须归入二者之一。

归类原则：
- 相同专有名词/工具名/项目名 → 同一条目
- 通用动作不单独成条目，除非反复出现于同一领域
- 宁多建不错合并

每条记录含：涉及的 session 列表、代表性原文片段、出现频次。

## 坑点

- 用户消息的含义不在关键词里，在语气和上下文里。脚本扫描只能看到主题，看不到情绪、看不到习惯、看不到事项的生命周期变化。必须阅读原文。
- session 标识必须与 L4 zip 内文件名一致（如 `0403_2013-0403_2145`），不能用模糊占位（如 xxxx）——无法定位回原日志的记录没有价值
- 情绪判断看语气不看内容——讨论负面话题但本人情绪稳定不标记
- 活动归类是"用户在做什么"的知识表示，不是对话摘要
- 写入产物前检查一致性：同一条目不能同时出现在"持续"和"已消失"中。如果阅读时收集到矛盾信号（频次高 vs 已停止），必须做最终裁决再写入
- "持续"和"已消失"是两个独立分类，不能合并为一个列表用子状态（如"已消退"）规避。产物中必须有明确分开的两个区域或两个文件
