Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions memory/history_insight_sop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 历史洞察扫描 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 已停止),必须做最终裁决再写入
- "持续"和"已消失"是两个独立分类,不能合并为一个列表用子状态(如"已消退")规避。产物中必须有明确分开的两个区域或两个文件