☰
OpenChronicle 会话切割原理详解:3 条规则精准定义你的工作上下文边界
2026/10/1 8:31:05 网站建设 项目流程

OpenChronicle 会话切割原理详解:3 条规则精准定义你的工作上下文边界

【免费下载链接】OpenChronicle项目地址: https://gitcode.com/gh_mirrors/op/OpenChronicle

OpenChronicle 是一个开源的本地优先 AI Agent 记忆系统,它通过"会话切割"(Session Cutting)机制,用 3 条简单规则精准定义你的工作上下文边界:空闲 5 分钟、切换无关应用 3 分钟、超时 2 小时。掌握这 3 条规则,你就能理解 AI 记忆是如何把零碎屏幕活动压缩成"一段专注工作"的。

为什么 AI 记忆需要"会话切割"?

想象你让 AI 助手回答"我今天上午做了什么?"。如果它拿到的是一整天的屏幕截图流水账,它要么答不出来,要么答得很混乱。

OpenChronicle 的思路是:人记住的从来不是"每一分钟在干嘛",而是一段段有边界的专注工作——开会、写代码、查资料。所以它先做的事,就是把连续的工作流切成一个个"会话"(Session),每个会话对应一段完整的工作上下文。

会话切割是整个记忆管道的灵魂:切割得准,后续的 AI 压缩(reducer)和事实提取(classifier)才能写出高质量记忆;切割得太碎或太黏,记忆质量直接崩塌。

规则细节可查官方文档:docs/session.md。

3 条切割规则逐一拆解

3 条规则全部实现在 src/openchronicle/session/manager.py 的SessionManager.check_cuts()中,每 30 秒检查一次。

规则 1:硬切割 —— 空闲 5 分钟,立即收工

规则:只要连续 5 分钟(gap_minutes,默认值)没有任何值得捕获的屏幕事件,会话就在最后一个事件的时间点结束。

# manager.py 核心判断逻辑(简化示意) gap = (now - last_event_time).total_seconds() if gap > gap_minutes * 60: end_session(at=last_event_time) # 结束在"停下那一刻",而非"回来那一刻"

💡设计巧思:你午休 2 小时回来,会话结束时间记在"你去午休前",而不是"你回来时"。因为空档本身不是工作,记忆的时钟应该在停工那一刻停下。

规则 2:软切割 —— 无关应用专注 3 分钟,智能识别

规则:当你切换到一个无关应用并专注超过 3 分钟(soft_cut_minutes,默认值),会话结束。

但这里有个关键例外——"频繁切换保护":如果你在最近 2 分钟内先后使用过 ≥2 个不同应用,系统就认为你正在做"多应用协作"(比如 IDE 写代码 + 终端看日志 + 浏览器查文档),此时软切割不触发。

# 频繁切换检测:最近 2 分钟内出现过 ≥2 个应用,则豁免软切割 recent_apps = {bundle for ts, bundle in recent_switches if ts >= now - 2min} is_frequent_switching = len(recent_apps) >= 2

⚠️ 新手常踩的坑:以为"切到浏览器看文档 3 分钟就会被切断"。只要你是频繁切换(IDE、终端、浏览器之间来回跳),这个保护机制会让会话稳稳保持活跃。

规则 3:超时 —— 2 小时封顶,防止会话失控

规则:任何会话只要存活超过 2 小时(max_session_hours,默认值),无论你是否还在活跃操作,都会被强制切掉。

这是一张安全网:防止深夜挂机、忘记切走窗口等场景造出一个"永不结束"的巨型会话,也顺便把一次超长专注拆成 AI 更容易消化的两块。

切割如何执行:事件 + 定时器双驱动

一个容易误解的点:切割不是"等人来问"才发生的。它由两条路径驱动(见 src/openchronicle/session/tick.py):

驱动路径触发时机负责检测
事件回调on_event()每次捕获到新屏幕事件记录时间、检测应用切换
定时巡检check_cuts()每 30 秒(tick_seconds)空闲间隙、超时、软切割

为什么要 30 秒巡检?因为空闲和超时恰恰发生在"没有新事件"的时候——只有定时器才能发现"已经 5 分钟没动静了"。

会话切割后会发生什么?

  1. 会话行标记为ended,写入本地 SQLite 的sessions表;
  2. 异步 reducer 把该会话的时间块压缩成一条带时间范围的记忆条目,追加到当天的event-YYYY-MM-DD.md;
  3. 分类器提取其中的持久事实(项目、工具、人物偏好等)写入长期记忆文件。

完整流程图可见:docs/architecture.md。

会话切割参数怎么调?一张表搞定

所有参数在config.toml的[session]段(详见 docs/config.md):

[session] gap_minutes = 5 # 硬切割:空闲超过 5 分钟即结束 soft_cut_minutes = 3 # 软切割:无关应用专注超过 3 分钟 max_session_hours = 2 # 超时:2 小时强制切断

遇到切割"手感不对"?对照官方调优表:

症状调哪个参数
多应用专注工作被切得太碎soft_cut_minutes调大(3 → 5),或保持不动——频繁切换保护已覆盖多数场景
闲了之后会话切得太晚,记忆跨了太久gap_minutes调小(5 → 3)
一次深度工作超 2 小时被拦腰斩断max_session_hours调大(2 → 4)
感觉切割反应慢tick_seconds调小(30 → 10),检查本身只是算术,成本可忽略

如何验证切割效果?

不需要看代码,两个轻量入口就够了:

  • 看日志:~/.openchronicle/logs/session.log会记录每次切割决策,例如session hard cut: idle for 6 min (>5 min)、session soft cut: app xxx for 3 min。
  • 手动兜底:运行openchronicle writer run,它会补齐所有待处理的会话并触发分类——这就是每晚 23:55 安全网走同一条代码路径,随时可安全执行(幂等设计)。

另外,23:55 的每日安全网会强制结束未关闭的会话并处理崩溃残留,保证"会话永远活不过打开它的那个进程"。

总结

OpenChronicle 的会话切割用 3 条朴素规则解决了 AI 记忆最核心的边界问题:

  1. 硬切割(空闲 5 分钟)——在"停工那一刻"收笔,午休不混进工作时间;
  2. 软切割(无关应用 3 分钟 + 频繁切换保护)——切换任务就切会话,但多应用协作不误伤;
  3. 超时(2 小时封顶)——安全网兜底,会话永失控不了。

规则全部集中在 src/openchronicle/session/manager.py,行为有完整单元测试覆盖(tests/test_session_manager.py)。想深入 AI 记忆管道全貌,继续阅读 docs/architecture.md 和 docs/writer.md 即可。

【免费下载链接】OpenChronicle项目地址: https://gitcode.com/gh_mirrors/op/OpenChronicle

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询