尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Memento智能分段算法解析:如何自动切分你的应用使用时间轴

Memento智能分段算法解析:如何自动切分你的应用使用时间轴 Memento智能分段算法解析如何自动切分你的应用使用时间轴【免费下载链接】MementoMemento is a Python app that records everything you do on your computer and lets you go back in time, search, and chat with a LLM (Large Language Model) to find back information about what you did.项目地址: https://gitcode.com/gh_mirrors/mem/Memento想象一下你正在电脑前专注工作突然想找回 3 小时前在某篇网页文档里看到的那个 API 参数——你知道它出现过但完全记不起在哪。Memento就是为解决这个痛点而生的开源项目它每 2 秒截取一次屏幕通过 OCR 提取文字再借助智能分段算法把一整天杂乱无章的屏幕记录自动切分成一条条有意义的应用使用时间轴让你像看视频一样回到过去。本文将从源码角度为新手读者拆解这套分段算法的工作原理。Memento 是什么先看懂它的记录-索引-回放链路Memento 是一款用 Python 编写的电脑使用记录工具它的完整工作流程如下截屏采样每 2 秒截取一次当前屏幕FPS 0.5并压缩成 h264 视频片段节省磁盘空间OCR 文字提取用 Tesseract 识别每帧截图中的文字与坐标️双索引存储文字写入 SQLiteFTS5 全文搜索 Chroma 向量数据库供 LLM 检索️时间轴回放通过图形界面像播放器一样回看任意时刻的屏幕。其中第 4 步体验的好坏完全取决于一个关键环节——智能分段。如果所有帧都堆在一起时间轴就是一条没有结构的长条只有把连续画面合理地切成段落时间轴才能像书签一样清晰可读。为什么需要智能分段没有它会发生什么假设你记录了 8 小时的电脑使用共约 14000 帧画面。如果不对它们分段时间轴只有一根单调的进度条无法区分在写代码和在看视频搜索时无法把相关内容聚合LLM 聊天时也缺少上下文单元回看时难以定位就像一本书没有章节和目录。智能分段算法正是扮演自动目录的角色它把连续的帧按逻辑划分成片段每个片段代表一段连贯的活动。分段的粒度有两层这正是 Memento 设计的巧妙之处。第一层分段应用级切分窗口切换即时间轴断点先来看最直观的一层——应用级分段对应源码中的AppSegments类见 memento/segments.py。Memento 通过 Xlib 实时获取当前活动窗口的标题window_title当窗口从Chrome切换到VS Code时就认为用户完成了一次应用切换新应用出现 → 结束上一个AppSegment开启新的分段每个AppSegment记录应用名、起始时间、以及该时段内的所有帧。在时间轴 UI 上每个应用分段被渲染成不同颜色的色块见 memento/timeline/time_bar.py鼠标悬停还能看到对应应用图标和截图预览。这让你一眼就能看出今天下午 3 点到 4 点主要在浏览器里。第二层分段内容级切分用 OCR 文本相似度判断主题变化应用级分段解决了用了哪个应用但还不够——你在 VS Code 里可能先写代码、又去查文档、再改配置。于是 Memento 在应用内部又做了一层内容级分段ContentSegments类这也是整套算法最核心的部分。它的判断依据非常优雅比较相邻两帧 OCR 识别出的文本相似度。如果相似度高大于等于 80说明画面内容连贯属于同一段活动如果相似度骤降fuzz.ratio 80说明屏幕内容发生了明显变化于是结束当前段落开启新段落。这里用到了thefuzz库的fuzz.ratio来计算两个文本的相似度百分比阈值 80 是作者的经验值源码中留有TODO tune threshold注释说明这个参数还有调优空间。举个例子你连续滚动一篇博客 → 每帧 OCR 文字高度重合 → 归为同一段你突然切换到终端输入命令 → OCR 文字面目全非 → 相似度跌到 80 以下 → 自动切开新段。文本合并用 difflib 把多帧文字拼成完整段落内容级分段还有一个加分项段落文本合并。ContentSegment.compile()会把段落内所有帧的 OCR 文本合并成一段完整的文字合并时使用 Python 标准库difflib.SequenceMatcher找到两段文字的公共部分如滚动页面时反复出现的标题、导航栏去重后按顺序拼接得到增量的、无冗余的段落全文。这段合并后的文字会被写入 Chroma 向量库成为 LLM 聊天的检索单元。正因为有了它你问 Memento我昨天看的那个关于 X 的文章里写了什么大模型才能精准命中那一整段上下文而不是零散的某一帧。后台流水线分段算法如何与截屏、OCR 协同工作了解了算法本身再看它在实际运行中如何被调用。后台进程Background见 memento/background.py每 2 秒执行一轮截取屏幕写入视频记录器计算与上一帧的图像差异分数imgdiff如果小于 0.1画面基本没动直接跳过 OCR 和分段省下大量算力如果当前窗口是 Memento 自己的时间轴界面也跳过记录避免录下你在看自己录像的套娃其余情况交给 OCR 子进程提取文字然后调用app_segments.add()实时更新分段状态当一个分段被关段后它的合并文本会批量写入向量数据库。这套流水线用多进程队列解耦了截屏主进程和OCR 工作进程保证分段判断不会拖慢录屏节奏。值得注意的是源码中的顺序处理设计帧不保证按时间顺序到达所以AppSegment.compute()会先把帧号排序再逐帧切分保证分段结果的时序正确性。分段结果如何成就搜索与AI 聊天分段算法的产出最终服务于 Memento 的两大招牌功能功能依赖分段的方式相关源码时间轴回放按应用/内容分段着色快速定位时间段time_bar.py全文搜索FTS5 索引每帧文字跳转到命中帧db.pyLLM 聊天向量库检索段落级合并文本作为上下文chat.py在聊天场景中向量数据库的检索单元正是ContentSegment合并出的段落文本——分段越合理检索越精准AI 回答质量越高。这就像给大模型喂了一份份带时间戳的摘要而不是一堆碎片。小结智能分段算法带来的启发Memento 的智能分段算法用两个朴素的信号——窗口标题切换和OCR 文本相似度——就实现了相当可靠的时间轴自动切分思路清晰、实现轻量非常适合初学者阅读源码学习应用级分段简单直接的规则零成本获得章节内容级分段基于文本相似度的启发式判断配合阈值调优80和图像差异阈值0.1控制敏感度段落文本合并让分段结果真正可检索、可对话。如果你想亲手体验这套记录一切、随时回溯的时间轴只需克隆仓库安装运行memento-bg开始记录、memento-timeline打开时间轴即可。无论是用于个人知识管理、防断片还是作为 OCR 时间序列分段的学习案例Memento 的应用使用时间轴都值得一试。【免费下载链接】MementoMemento is a Python app that records everything you do on your computer and lets you go back in time, search, and chat with a LLM (Large Language Model) to find back information about what you did.项目地址: https://gitcode.com/gh_mirrors/mem/Memento创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表