with one click
conversation-summary
// v2.2 M3 · 对话历程摘要。RECENT_HISTORY.md 超过 30 条时,压缩旧条目为 3-5 句历程摘要 写入 memory/session_summary.md,防止长 context 导致角色漂移到共情模板。 被 memory_distill 在检测条数超阈时调用,或用户主动校验记忆时调用。
// v2.2 M3 · 对话历程摘要。RECENT_HISTORY.md 超过 30 条时,压缩旧条目为 3-5 句历程摘要 写入 memory/session_summary.md,防止长 context 导致角色漂移到共情模板。 被 memory_distill 在检测条数超阈时调用,或用户主动校验记忆时调用。
基于 persona.md 的 personality_dims,按映射公式计算行为参数,写入 character_params.yaml。 由 calibrate_params 定时任务触发(每7天),或初始化完成时立即触发一次。 其他 SKILL/hook 在检测到 persona_checksum 不一致时,也会直接调用 recalculate.sh 同步重算。
Companion Workspace 生活日志生成 SOP (v5.2)。 由 life_sim.yaml 定时任务触发(每 4 小时)。 从 material_pool 选真实素材,以"触发→反应"模板转译为角色生活日志。 内含:留白模式、用户倾诉强制呼应、降温规则、多形态衔接、失败降级链。
v5.1 关键词模板驱动 + 硬筛规则 + LLM 二审(锁外)+ 失败状态追踪。 由 material_fetch.yaml 定时任务触发(每 6 小时)。send_output: false。 读 memory/keyword_templates.yaml 生成查询,经 filters.yaml 硬筛后 LLM 二审打 fit_score 入库。
Companion Workspace 定时记忆提炼 SOP。 由 memory_distill.yaml 定时任务触发(每小时一次)。 从最近消息中提炼新信息,补充到 memory 文件,不重复已有内容。
Companion Workspace 记忆写入规范。 触发词:记住 / 对话结束时的自动检查 / 强烈情绪事件
主动唤醒 SOP。由定时任务触发,判断是否向用户发送主动关心消息。 包含发送条件检查、消息类型选择、角色声音生成、飞书发送。
| name | conversation_summary |
| description | v2.2 M3 · 对话历程摘要。RECENT_HISTORY.md 超过 30 条时,压缩旧条目为 3-5 句历程摘要 写入 memory/session_summary.md,防止长 context 导致角色漂移到共情模板。 被 memory_distill 在检测条数超阈时调用,或用户主动校验记忆时调用。 |
| allowed-tools | Read, Write, Edit |
CRITICAL:压缩要保留情感脉络(哪些话题让用户投入 / 回避 / 情绪波动), 而非流水账。遗漏情感主线 = 比遗忘更危险的"错误记忆"。
MEMORY_FILE="$WORKSPACE_DIR/memory/MEMORY.md"
INIT_STATUS=$(grep 'initialization_status:' "$MEMORY_FILE" 2>/dev/null | grep -oP '(pending|phase1_done|phase2_done|done)' | head -1)
[[ "$INIT_STATUS" != "done" ]] && exit 0
RECENT_HISTORY="$WORKSPACE_DIR/memory/RECENT_HISTORY.md"
SUMMARY_FILE="$WORKSPACE_DIR/memory/session_summary.md"
MSG_COUNT=$(grep -c '^\*\*' "$RECENT_HISTORY" 2>/dev/null)
[[ $MSG_COUNT -lt 30 ]] && exit 0
读两份文件。session_summary.md 是滚动更新的,不是覆盖:本次总结的是"上次总结后至今"的新增部分。
不要做的事:
要做的事(3-5 句):
格式:
# 对话历程摘要(滚动)
> 由 conversation_summary skill 维护。rolling 更新,不覆盖。
> 作为 long context 的压缩锚,防止角色漂向共情模板。
## 最近情感主线(至 {YYYY-MM-DD})
{3-5 句,见 Step 2 原则}
## 已知用户偏好 / 事实(归集自 user_profile.md,以最近为准)
- 偏好 X
- 事实 Y
## 情绪关键点(最近 30 条里)
- {话题} → {用户状态:投入 / 回避 / 波动}
## 未解决的钩子
- {钩子 1}
- {钩子 2}
---
<!-- last_updated: {ISO timestamp} -->
<!-- covered_range: L{起始消息序号} - L{结束序号} -->
注意:不要一上来就裁剪。session_summary.md 稳定运行 1-2 周后再启用裁剪。
Phase 2 阶段:session_summary 生成但不裁剪 RECENT_HISTORY(inject_history.py 依然塞 tail -49)。 待 summary 质量稳定后,Phase 2+2 周:改 inject_history.py 改成 tail -20 + 注入 session_summary。
首次生成后,角色有机会通过主动唤醒说一句:
"我对咱们最近聊的事的印象是 [简短复述],大致对吗?"
用户若否认,由 memory_write 更新 session_summary。不允许 silent 的错记忆。
当 summary 的情感基调与 long_arc 冲突时:
生成失败(模型超时 / 格式错误):
.life_sim_events.jsonl