From 6c389a2796510177b18de00ded628f4477ae8f42 Mon Sep 17 00:00:00 2001 From: Agent Date: Fri, 29 May 2026 10:15:18 +0800 Subject: [PATCH] refactor: enhance salient_mining_sop with structured criteria, format specs and decision guides --- memory/L4_raw_sessions/salient_mining_sop.md | 114 +++++++++++++------ 1 file changed, 79 insertions(+), 35 deletions(-) diff --git a/memory/L4_raw_sessions/salient_mining_sop.md b/memory/L4_raw_sessions/salient_mining_sop.md index b09371d4..8427efb7 100644 --- a/memory/L4_raw_sessions/salient_mining_sop.md +++ b/memory/L4_raw_sessions/salient_mining_sop.md @@ -1,65 +1,109 @@ # 历史重点挖掘 SOP -从用户历史对话中挖掘值得长期保留的重点:情绪事件、持续活动、已消失事项。 +从用户历史对话中挖掘值得关注的重点,产出为**工作稿**——供后续流程(记忆整合/用户画像更新)消费。三类产出:情绪事件、习惯性活动、已完成事项。 + +> **核心循环**:读 increment_marker → 取下一批 session → 逐条阅读 user 消息 → 提取情绪事件 + 更新活动记录 → 写回产物 + 推进 marker ## 数据源 -`../memory/L4_raw_sessions/all_histories.txt`(`compress_session.py` 产出)。不存在则先运行脚本。只读 user 内容。 +`../memory/L4_raw_sessions/all_histories.txt`(相对于工作目录 temp/;`compress_session.py` 产出,不存在则先运行)。只读 `[USER]:` 行。session 以 `====...====` + `SESSION: MMdd_HHmm-MMdd_HHmm` 开头,按时间顺序排列。 ## 执行约束 -- 增量:维护已处理 session 列表,每次只扫新 session -- 分批处理时不拆分同一 session +- 工作目录:`temp/`。产物存 `./history_insight/` +- 增量:`increment_marker.md` 记录最后处理的 session,每次从其后开始顺序扫描。若 marker 指向的 session 在数据源中找不到(文件被重新生成),从第一个 session 重新开始并在产物中注明"marker reset" +- 每批 5-15 个 session(不足5个也可),不拆分同一 session +- 首次执行:marker 不存在则从第一个 session 开始。无情绪事件时 `emotion_events.md` 可为空或不创建 +- 后续执行(batch 2+):在已有内容基础上更新(追加/合并/修订)。不从零重写,但可修正个别条目 +- **marker 始终推进**:无论本批有无新发现,marker 必须更新为本批最后一个 session ID ## 产物 -存 `./history_insight/`(不存在则创建),格式自定。产物是数据库,不是报告——每条发现都是下游任务的输入,遗漏即损失。 - -产物包含三个持久状态(可以是多个文件或一个文件内的多个区域): -1. **活动知识层** — 每次扫描读取、更新、写回。记录所有识别到的活动及其最终分类。 -2. **情绪事件列表** — 追加式,只增不改。 -3. **增量标记** — 记录最后处理到的 session 标识,下次从此处之后开始。 +产出文件:`activity_knowledge.md`、`emotion_events.md`、`increment_marker.md`。偏向少写——低质条目干扰下游。处理≥5 session后三类产出均为0时,在 activity_knowledge.md 顶部以 `` 附注。 -每条发现必须含: -- session 标识(与 L4 zip 内文件名一致,如 `0403_2013-0403_2145`) -- 关键原文片段(可 grep 定位回原日志) -- 发现类型标签 +**修订原则**:明显错误直接修正;新证据改变分类时执行转换;两条目实为同一活动时合并(频次相加,sessions列表合并后按格式规则截断为前5个+`(+N)`,取更概括名称)。 ## 提取标准 +**决策总览**: +1. 逐 session 扫描 → 用户语气波动 → 查情绪阈值 → 达标则记录(附依据) +2. 逐 session 扫描 → 识别用户在做什么 → 查活动门槛 → 建条目则归类 +3. 两类提取互相独立,一个 session 可产出任意组合(含两者都无) + +**判断速查**: +- 情绪:极端用词/人身攻击/行为断裂 → 标记 | 仅催促/不满/命令式 → 不标记 +- 活动:≥2session提及 或 单session≥3轮实质交互 + 可命名 → 建条目 | 纯指令/闲聊 → 跳过 +- 增量:已有条目出现 → 追加session(去重)+更新频次 | 同一活动 → 合并 +- 粒度:同一项目/目标的不同阶段视为同一活动(如"爬虫开发"含设计+调试+部署);同一语言/工具用于不同目标则分开(如"Python爬虫"≠"Python ML") + ### 情绪事件 -标记语气上的明显波动,不是内容上的。 +标记语气上的**强烈**波动。目标:捕捉真正的情绪爆发点。**犹豫即不记。** + +**强度阈值(满足任一)**: +1. **爆发性**:语气突然升级,与前后文形成明显反差 +2. **累积性**:同一session内对同一问题反复表达不满(≥2次) +3. **极端用词**:强烈程度词(如"太…了""真的服了""牛逼""废物""太牛了""绝了"等)或重复标点("!!""??"),正负面均适用 +4. **行为断裂**:情绪直接导致放弃任务、中断对话、无理性方向突变 + +**不标记**:礼貌性感谢、轻微催促、平和方向调整(有后续行动=不标记)、陈述性负面评价、连续"继续"。 + +**关键边界**:"算了"后平和换方向或平和搁置=不标记(犹豫即不记);"算了"+强烈情绪词(太烦了/受不了)+放弃原方案=仍标记(情绪真实发生,后续行动不抵消)。 + +**数量预期**:5-15 session 批次中 0-3 条(极端最多5条)。超5条建议逐条重新验证,删除不达标的。 + +**类型标签(仅限以下8个,逐字复制禁止变体)**:急切催促、不耐烦、质问责备、讽刺挖苦、惊喜感激、沮丧无奈、方向突变、命令式中断。多标签可组合如 `[急切催促+不耐烦]`。不属于任何一个则不记录。 + +**标签消歧**:选最能描述用户**行为表现**的标签。指责agent=质问责备;催促加速=不耐烦/急切催促;放弃/无力感=沮丧无奈;打断流程=命令式中断;无理性换目标=方向突变。同类情绪阶段演变只记最强一条;不同类型可各记一条(同session≤3条)。 + +**判断依据**:每条必须附 `依据:阈值N+现象+排他理由`(紧凑≤50字。如"阈值3极端用词'真的服了'+放弃任务→沮丧非质问因无指责对象")。写不出依据=不该记录。 + +**原文选取**:最能体现情绪的1-2句原话(15-80字)。逐字复制,不改标点,换行替换为空格。来自同一条user消息。不足15字时用"…"拼接紧邻上下文。 -**标记**:愤怒/质问/责备、讽刺挖苦、惊喜感激、反复纠正后语气突变、沮丧/无奈、预期落空后的失望或方向突变。 +### 习惯性活动与已完成事项 -**不标记**:纯功能指令、语气平和的反馈、讨论负面话题但本人情绪稳定。 +维护活动记录(跨批次工作稿)。**记录目标**:用户生活里现在有什么、曾经有什么。唯一证据是用户在session中主动发起的请求/讨论。 -### 持续活动与已消失事项 +**核心二分法**: +- **习惯性活动**(`## 习惯性活动`)= 用户会反复做的行为模式。问"做完后还会再做吗?"→会=习惯性。长期未提及也不移除,仅当有**明确放弃证据**时移至已完成 +- **已完成事项**(`## 已完成`)= 有明确完成节点的一次性任务。用途:与L2记忆对比识别过时记忆 -维护一个持久的活动知识层(存 `./history_insight/`)。这是跨次运行的持久状态——每次扫描读取它、更新它、写回它。它不是报告,是数据库。 +**生命周期**:习惯性→已完成需明确证据(用户说不再做/项目终止/工具被替代)。已完成一般不回迁(重新开始时建新条目),有充分理由可例外。**互斥**:同一活动不可同时出现在两个分区。 -**你在建模的是**:这个用户的生活里现在有什么、曾经有什么。活动识别的唯一证据是用户在session中主动发起的请求或讨论——系统提示词、SOP列表、记忆引用中的被动出现不构成证据,不能从"系统里存在某个SOP"推断用户在做某事。 +**建条目门槛**:≥2个不同session主动提及,或单session≥3轮实质对话(含具体任务指令/讨论,不计"继续""好的"等纯反应)。 -- 持续活动 = 仍然存在于用户生活中的事——值得深入了解其细节 -- 已消失 = 曾经存在但已离开的事——可能导致已有记忆过时 +**归类原则**: +- 相同专有名词/项目名 → 同一条目;近义名去重 +- 粒度以"项目/工具/领域"为单位,不以"动作"为单位 +- 习惯性活动区不超 15 条(超出则合并相似项);已完成区无上限 +- 合并判断:用户被问"最近在忙什么"会说成一件→合并 -判断"离开"不需要用户明确表态。事项本身的性质就是证据——有终点的事做完了就是消失了,没终点的事沉默不代表消失。 +每条含:session列表、代表性原文(已完成除外)、频次(=sessions数)。增量时追加新session+更新频次。 -每个条目必须归入二者之一。 +## 格式规范 -归类原则: -- 相同专有名词/工具名/项目名 → 同一条目 -- 通用动作不单独成条目,除非反复出现于同一领域 -- 宁多建不错合并 +- `increment_marker.md`:`last_processed: MMdd_HHmm-MMdd_HHmm` + `batch: N` + `sessions_processed: N`(各占一行,仅此3个字段) +- `emotion_events.md`:⚠️无标题行,首行直接是列表项(非表格)。格式 `- [标签] SESSION_ID | "原文" | 依据:阈值N+现象+排他理由`(标签仅限L55的8个)。示例:`- [沮丧无奈] 0601_0800-0601_1000 | "真的服了这个bug搞不定了,不弄了" | 依据:阈值3极端用词+放弃任务→沮丧非质问因无指责对象` +- `activity_knowledge.md`:仅允许 `## 习惯性活动` 和 `## 已完成` 两个标题 + - 习惯性:`- 活动名 | sessions: ID1, ID2, ... | 频次: N` + 下一行 ` 原文: "片段"`(>5个session时只列前5个,末尾加`(+N)`表示省略数) + - 已完成:`- 活动名 | sessions: ID1 | 转换依据: 为何不再进行`(无原文行) +- session ID 格式:`\d{4}_\d{4}-\d{4}_\d{4}` +- 原文 15-80 字;含双引号时用单引号包裹(同时含单双引号时内部双引号改为「」) +- 禁止自创字段/标签/格式结构(严格按上述模板,不加标题行/关键词行/备注等) +- 写入前可选自检:标签∈L55的8个?依据含排他理由且≤50字?(跳过不影响流程) -每条记录含:涉及的 session 列表、代表性原文片段、出现频次。 +**内联示例**(每文件一条示范): +- emotion: `- [沮丧无奈] 0527_0900-0527_1200 | "真的服了,浪费我一上午,这破东西搞不定" | 依据:阈值3极端用词'真的服了'+阈值4放弃任务→沮丧非质问因无指责agent` +- activity: `- 微信自动化 | sessions: 0403_2013-0403_2145, 0404_1012-0404_1312 | 频次: 2` + 下行 ` 原文: "用剪贴板方法,直接输入中文有同音字问题"` +- marker: `last_processed: 0404_1012-0404_1312` + `batch: 2` + `sessions_processed: 10` ## 坑点 -- 用户消息的含义不在关键词里,在语气和上下文里。脚本扫描只能看到主题,看不到情绪、看不到习惯、看不到事项的生命周期变化。必须阅读原文。 -- session 标识必须与 L4 zip 内文件名一致(如 `0403_2013-0403_2145`),不能用模糊占位(如 xxxx)——无法定位回原日志的记录没有价值 -- 情绪判断看语气不看内容——讨论负面话题但本人情绪稳定不标记 -- 活动归类是"用户在做什么"的知识表示,不是对话摘要 -- 写入产物前检查一致性:同一条目不能同时出现在"持续"和"已消失"中。如果阅读时收集到矛盾信号(频次高 vs 已停止),必须做最终裁决再写入 -- "持续"和"已消失"是两个独立分类,不能合并为一个列表用子状态(如"已消退")规避。产物中必须有明确分开的两个区域或两个文件 +- 含义在语气和上下文里,不在关键词里——必须阅读原文,不可仅靠脚本扫描 +- 活动归类是行为模式建模,不是对话摘要 +- 原文含密钥/token 时用 `[REDACTED]` 替换 +- 极短session(≤2条user消息 且 无实质内容)可跳过但计入marker;有实质任务指令的1-2条session正常处理;空session(无user消息)直接跳过不计 +- 某批无情绪事件是正常的,不要降低标准凑数 +- 原文含 `|` 不需转义,直接写入(下游按首尾 ` | ` 分割字段,中间全属原文) +- 正面情绪同等重要("惊喜感激"标签,限真心惊叹非客套),依据引用阈值3(如"阈值3正面极端用词") +- 判断依据写不出=该条不该存在——强制依据是防幻觉的最后一道关卡 \ No newline at end of file