构建本地AI记忆中枢:隐私优先的电脑活动追踪与智能查询系统
1. 项目概述:你的本地AI记忆中枢
你有没有过这样的时刻?想不起来上周三下午具体在忙什么项目,或者上周看过的那个解决某个技术难题的YouTube视频标题是什么,只记得大概内容。我们每天在电脑前产生海量的数字足迹——浏览的网页、使用的软件、观看的视频——但这些信息就像沙滩上的字迹,很快就被新的浪潮冲刷殆尽。Nex Life Logger 就是为了解决这个问题而生的。
简单来说,它是一个隐私优先、完全运行在你本机的电脑活动追踪器。它像一位沉默的助手,在后台记录你的浏览器历史、活跃窗口焦点,甚至自动抓取YouTube视频的完整字幕。最核心的是,它将这些数据全部存储在你自己的硬盘上,然后允许你通过自然语言,像询问一位无所不知的伙伴一样,查询你过去的所有电脑活动。无论是“我昨天下午在忙什么?”还是“帮我找出上个月所有和Docker相关的资料”,它都能从你的本地数据库中给出答案。这不仅仅是日志,更是为你个人定制的、可查询的“数字记忆”。
2. 核心设计理念与架构解析
2.1 隐私至上的“本地优先”哲学
在数据即石油的时代,将个人行为数据上传到云端服务器几乎是所有服务的默认选项。Nex Life Logger 反其道而行之,确立了“本地优先”的核心原则。这意味着从数据采集、存储、处理到查询,整个生命周期都发生在你的计算机内部。项目明确声明“Zero data sent to the cloud”,这并非简单的营销话术,而是其架构设计的基石。
为什么选择本地优先?
- 数据主权:你的数据完全属于你,存储在
~/.life-logger/目录下的SQLite数据库中。没有中间服务器,不存在数据被第三方分析、售卖或泄露的风险。 - 离线可用:所有核心的追踪、存储和基础查询功能无需网络连接。AI总结功能虽然需要调用大模型API,但原始数据始终在本地。
- 规避合规风险:对于处理敏感信息的从业者(如律师、医生、研究员),本地存储避免了因使用云端服务可能带来的数据合规性问题。
这种设计也带来了挑战,比如如何实现跨设备同步?项目目前的答案是“不同步”,专注于单机体验。这看似是限制,实则明确了其定位:一个深度服务于你当前工作主机的个人生产力分析工具,而非一个全平台同步的生活记录仪。
2.2 智能过滤:只记录“有价值”的内容
全量记录所有活动会产生大量噪音,降低后续查询的价值。Nex Life Logger 内置了一套多层过滤机制,确保记录的是“生产力”内容,而非生活杂音。
过滤层级解析:
- 应用级黑名单:首当其冲的是通讯类应用。
chat_filter.py模块会识别并排除如 WhatsApp、Discord、Slack、Telegram、Signal、Teams 等窗口。这意味着你和同事的聊天、私密对话不会被记录,从源头保护隐私。 - 敏感窗口排除:涉及密码管理器(如1Password、Bitwarden)、网上银行、加密钱包等窗口会被主动跳过,防止密码或财务信息被意外记录。
- 内容分类过滤:这是更精细的一层。
content_filter.py可能利用关键词或轻量级模型,对浏览器访问的URL和页面标题进行分类。其目标是过滤掉娱乐、八卦新闻、政治等“非生产性”内容,保留编程、设计、AI、学习等相关的活动。这确保了你的“数字记忆”主题集中,AI总结时也能提炼出真正有意义的洞察。
注意:过滤规则的准确性是关键。过于激进可能漏掉有价值信息(比如在休闲时间阅读的一篇优质技术博客),过于宽松则会让记录充满噪音。项目允许通过
user_filters.py进行自定义配置,这是高级用户必须了解的调优点。
2.3 双模交互:从桌面应用到AI智能体集成
项目提供了两种截然不同但互补的使用方式,覆盖了从传统图形界面到前沿AI智能体交互的全场景。
桌面应用模式:这是最直观的方式。运行tray.py后,一个图标会驻留在系统托盘。右键菜单提供暂停/继续、查看总结、打开AI聊天窗等控制。其核心是viewer.py构建的本地图形界面,提供数据可视化图表、主题切换和自然语言搜索。它适合喜欢在一个集中界面里回顾和分析数据的用户。
OpenClaw/ClawHub 技能模式:这代表了更未来的交互范式。你将Nex Life Logger作为一个“技能”安装到你的AI智能体(例如一个连接到Telegram或Discord的OpenClaw智能体)中。之后,你可以直接在聊天软件里向你的智能体提问,智能体会在后台调用nex-life-loggerCLI工具,查询你的本地数据库并返回结果。例如,在Telegram里直接问:“我上周在React项目上花了多少时间?” 这种将个人数据查询无缝嵌入日常对话流的方式,极大地降低了使用门槛,让查询“数字记忆”变得像问朋友问题一样自然。
3. 核心功能模块深度拆解
3.1 数据采集引擎:默默工作的观察者
数据采集是项目的基础,由collector.py和youtube_transcript.py等模块协同完成,默认每30秒运行一次。这个频率在资源占用和记录粒度间取得了平衡。
采集源与实现原理:
- 浏览器历史:通过访问各浏览器(Chrome, Edge, Brave, Firefox)的本地历史数据库文件(如Chrome的
HistorySQLite文件)来获取浏览记录。这里的关键是处理不同浏览器的数据路径和格式,并注意浏览器进程锁可能导致的读取失败。实现时通常会采用重试机制或读取副本。 - 活跃窗口焦点:通过操作系统API获取当前最前端窗口的标题和进程名。在Windows上可能使用
pygetwindow或win32gui,在macOS上使用AppKit,在Linux上使用ewmh(通过python-xlib)。记录窗口标题能有效捕捉你在IDE、设计工具或文档中的工作内容。 - YouTube字幕抓取:这是项目的亮点功能。当检测到当前浏览器标签页或窗口标题包含“YouTube”且正在播放视频时,
youtube_transcript.py会尝试通过YouTube的公开接口或youtube-transcript-api这类库获取该视频的完整字幕文本。这为后续基于视频内容的深度搜索提供了可能。
实操心得:采集模块的稳定性至关重要。在实际部署中,我发现需要确保Python进程有足够的权限读取浏览器历史文件。此外,对于频繁切换窗口的极端用户,30秒的间隔可能会丢失一些短暂的活动,但对于记录主要工作任务流来说已经足够。你可以通过config set-poll-interval调整这个频率,但更短的间隔会增加系统负载。
3.2 存储与索引层:SQLite与FTS5的经典组合
所有采集到的数据最终汇入storage.py管理的SQLite数据库。选择SQLite而非更复杂的数据库,完美契合了“本地单机应用”的定位:无需服务、零配置、单个文件、ACID事务支持。
数据库表结构精要:
activities表:核心表,每条记录代表一个活动事件(一次网页访问或一次窗口聚焦)。字段可能包括id,timestamp,kind(如url,app_focus),title,url,app_name,domain,category等。67,000+条记录主要存储于此。summaries表:存储由AI生成的各级总结(日、周、月、年)。结构可能是id,period_type,period_start,content(AI生成的文本),embedding(可选,用于向量搜索)。keywords表:由keyword_extractor.py从活动记录中提取的关键词、主题、工具名、编程语言等,并记录出现频率。这为“我最常使用什么工具”这类统计查询提供了快速通道。transcripts表:存储从YouTube抓取的字幕文本,与activities表中的YouTube观看记录关联。
FTS5全文搜索:这是实现强大搜索功能的核心。SQLite的FTS5(全文搜索)扩展模块允许对activities表中的title,url,domain等文本字段建立倒排索引。当你执行nex-life-logger search “docker containers”时,FTS5会进行分词、计算相关性评分,并高效返回结果。CLI中支持的--kind、--source、--category等过滤器,则是在FTS5搜索结果之上叠加的SQL过滤条件,实现了精准检索。
3.3 AI总结与查询引擎:从数据到洞察
原始日志是冰冷的,AI总结赋予了它们意义。summarizer.py和ai_chat.py是这个环节的核心。
多级总结流水线:总结并非一次性生成,而是一个层级递进的管道。
- 每日总结:每晚11点,系统会将当天的所有活动记录(可能先经过关键词提取和聚类)发送给配置的AI大模型,生成一段关于当日工作重点、学习主题和所用工具的连贯叙述。
- 每周总结:每周日,系统不会直接分析原始活动数据,而是基于过去七天的每日总结文本,再次调用AI,生成更高阶的周度回顾。这种方式大幅减少了Token消耗,并迫使AI进行二次归纳。
- 月度和年度总结:同理,基于每周总结生成月度报告,基于月度总结生成年度报告。这种“总结的总结”架构,既保证了宏观视角的连贯性,又极大地控制了API调用成本。
自然语言查询:在桌面应用的AI聊天窗或通过智能体集成,你可以进行自由形式的提问。其工作流程可能是:1) 将用户问题转换为一个优化的搜索查询(可能涉及关键词扩展);2) 使用FTS5在数据库中执行搜索;3) 将搜索到的相关活动记录片段作为上下文,连同用户原问题,一起提交给AI,要求其组织语言回答。这就是“用你的数据回答你的问题”。
配置要点:项目支持任何OpenAI兼容的API,这提供了极大的灵活性。你可以使用收费的OpenAI GPT-4o追求高质量,也可以使用本地的Ollama(如Llama 3.2)实现完全离线的隐私保护,或者使用Groq追求极速响应。通过nex-life-logger config set-provider等命令可以轻松切换。重要提示:API密钥通过secure_key.py利用操作系统提供的安全存储(Windows凭据管理器、macOS钥匙串、Linux密钥环)保存,而非明文存储在配置文件中,这是专业安全实践的体现。
4. 实战部署与个性化配置指南
4.1 环境准备与桌面端安装
假设你已经在电脑上安装了Python 3.11或更高版本,以下是部署桌面应用的详细步骤。
步骤一:获取项目代码
# 克隆仓库 git clone https://github.com/NexaiGuy/nex-life-logger.git cd nex-life-logger步骤二:创建并激活虚拟环境(强烈推荐)使用虚拟环境可以隔离依赖,避免污染系统Python环境。
# 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate激活后,命令行提示符前通常会出现(venv)标识。
步骤三:安装依赖
pip install -r requirements.txt这个requirements.txt文件包含了所有核心依赖,如pystray(系统托盘)、Pillow(图标处理)、pywebview(桌面图形界面)、youtube-transcript-api等。安装过程可能需要几分钟。
步骤四:首次运行与基础配置
# 启动系统托盘应用(推荐常驻方式) python tray.py首次运行,程序可能会在后台初始化数据库。接下来需要进行关键配置:
# 打开一个新的终端(保持tray.py运行),进入项目目录并激活同一虚拟环境 # 设置AI提供商和模型 nex-life-logger config set-provider openai # 接下来会交互式提示你输入API密钥,它会安全地存储 nex-life-logger config set-api-key # 设置使用的模型 nex-life-logger config set-model gpt-4o-mini完成这些,你的基础追踪和AI总结功能就准备就绪了。右键点击系统托盘图标,你可以暂停追踪、查看今日总结或打开主界面。
4.2 作为ClawHub技能集成:与你的AI智能体对话
如果你已经在使用OpenClaw或ClawHub平台,并拥有一个可通过Telegram/Discord等通信的AI智能体,那么将其与Nex Life Logger集成会带来革命性的体验。
集成原理:ClawHub技能本质上是一个可被AI智能体调用的命令行工具包。安装nex-life-logger技能后,你的智能体就获得了执行nex-life-logger所有CLI命令的能力。当你在聊天中提出相关问题,智能体会自动理解你的意图,选择合适的命令执行,并将命令行输出“翻译”成友好的自然语言回复给你。
安装与连接步骤:
- 在智能体主机上安装技能:确保你的ClawHub智能体运行在与你的电脑(安装了Nex Life Logger的电脑)同一网络环境,或者就是同一台机器。
# 在智能体运行的环境下执行 npx clawhub install nex-life-logger bash setup.shsetup.sh脚本会处理Python环境、依赖安装以及技能注册。 - 技能配置:安装后,通常需要在ClawHub的技能管理界面,或在智能体的配置中,指定
nex-life-logger命令的路径(如果不在系统PATH中)。同时,也需要在这里配置AI API密钥等信息,或者技能会复用桌面端已存储的配置。 - 开始对话:配置完成后,你就可以直接在Telegram或Discord里对你的智能体说:“帮我查一下昨天看了哪些关于Python异步编程的视频?” 智能体在后台执行的逻辑可能就是
nex-life-logger search “python async” --kind youtube --last 1d,然后将结果整理成句子回复你。
这种方式的优势在于,你无需打开任何额外应用,在常用的聊天场景中就能完成对个人工作历史的查询,实现了真正的“无感”人机交互。
4.3 高级配置与个性化调优
默认设置适合大多数人,但为了让它更贴合你的工作流,可以考虑以下调整。
1. 调整追踪内容与过滤规则
- 修改轮询间隔:如果你觉得30秒太粗或太细,可以调整。更短间隔(如10秒)能捕捉更细粒度的活动,但会增加CPU和数据库写入。
nex-life-logger config set-poll-interval 10 - 自定义应用过滤:默认的聊天应用黑名单可能不完整,或者你想排除其他干扰应用(如股票软件)。你需要编辑
user_filters.py或项目中的相关配置文件,添加或移除应用进程名或窗口标题关键词。 - 调整内容分类器:
content_filter.py中的分类逻辑决定了什么是“生产力”内容。如果你发现它错误地过滤了你的某个常驻学习网站,你可能需要查看其源码,了解其分类规则(可能是基于URL关键词或轻量级文本分类),并进行相应调整。这是一个相对高级的操作。
2. 优化搜索体验
- 重建全文搜索索引:如果你手动修改了大量历史数据,或者搜索出现异常,可以重建FTS5索引以确保搜索准确性。
nex-life-logger config rebuild-fts - 探索高级搜索语法:FTS5支持更复杂的查询,如短语搜索
"machine learning"、前缀搜索pyth*、布尔操作docker AND NOT swarm。虽然CLI可能没有直接暴露所有语法,但了解这些有助于你更精准地构思查询问题。
3. 数据维护与导出
- 定期备份:数据库文件(
~/.life-logger/activity.db)是你所有记忆的载体。建议将其纳入你的常规备份计划。# 导出为JSON备份 nex-life-logger export json --output ~/backups/life-logger-$(date +%Y%m%d).json - 生成可视化报告:HTML导出功能可以生成一个独立的、包含图表和列表的网页报告,方便你进行周期性回顾或分享(在脱敏后)。
nex-life-logger export html --output ~/Documents/weekly-review.html
5. 常见问题排查与使用技巧
5.1 安装与运行问题
问题:运行python tray.py或nex-life-logger命令时提示“命令未找到”或模块导入错误。
- 排查:首先确认你是否在项目根目录下,并且已经激活了正确的Python虚拟环境(命令行前有
(venv))。在虚拟环境下,再次运行pip install -r requirements.txt确保所有依赖安装成功。有时某些系统级依赖(如用于pywebview的Web运行时)可能需要单独安装。
问题:系统托盘图标没有出现,或者程序启动后立即退出。
- 排查:查看命令行终端是否有错误输出。常见原因包括:
- 图标资源丢失:确保
screenshots/目录或项目指定的图标文件存在。 - 端口冲突:桌面应用
viewer.py可能启动了一个本地HTTP服务器,默认端口被占用。可以尝试重启程序或检查是否有其他应用占用端口。 - 操作系统兼容性:
pystray在某些Linux桌面环境(如Wayland)下可能有问题。可以尝试在无头模式(python main.py)下运行,或查阅pystray的文档。
- 图标资源丢失:确保
5.2 数据采集相关问题
问题:浏览器历史记录没有被捕获到。
- 排查:
- 浏览器支持:确认你使用的浏览器在支持列表内(Chrome, Edge, Brave, Firefox)。Safari或其他小众浏览器可能不支持。
- 浏览器进程锁:浏览器正在运行时,其历史数据库文件可能被锁定,导致无法读取。Nex Life Logger 的采集器应该已经处理了这种情况(如尝试读取副本或等待),但如果问题持续,可以尝试暂时关闭浏览器再测试。
- 文件权限:确保运行Nex Life Logger的用户有权限读取浏览器配置文件所在目录。在Linux/macOS上可能需要检查文件权限。
问题:YouTube字幕无法获取。
- 排查:
- 网络问题:获取字幕需要访问YouTube。请检查网络连接。
- 视频本身无字幕:并非所有YouTube视频都提供字幕(尤其是自动生成字幕被上传者关闭的情况)。
- API限制或变更:项目可能依赖
youtube-transcript-api等第三方库,这些库可能因YouTube的改动而暂时失效。查看项目GitHub的Issue页面或相关库的更新。
5.3 AI功能相关问题
问题:AI总结功能不工作,或查询时没有AI回复。
- 排查:
- API配置:运行
nex-life-logger config show检查AI提供商、API基础地址和模型设置是否正确。确保API密钥已正确保存。 - API密钥有效性:测试你的API密钥是否在其他地方可用。对于OpenAI,可以尝试一个简单的cURL命令测试。
- 网络连接:确保你的电脑可以访问你配置的API端点(如
api.openai.com或你的本地Ollama地址http://localhost:11434)。 - 额度或配额:检查你的API账户是否有剩余额度或请求配额是否已用尽。
- API配置:运行
问题:AI生成的总结太笼统或不准确。
- 技巧:
- 更换模型:尝试更强大的模型,如从
gpt-4o-mini切换到gpt-4o,通常能获得更高质量、更细致的总结。 - 提供更具体的上下文:在AI聊天窗提问时,尽量具体。例如,不要问“我上周做了什么?”,而是问“请总结我上周在‘项目X’相关的编码和文档阅读上的时间分配和主要进展”。
- 调整提示词(如有可能):如果项目开源且你熟悉代码,可以查看
summarizer.py中用于生成总结的AI提示词模板,微调它可能会改善输出质量。
- 更换模型:尝试更强大的模型,如从
5.4 性能与资源使用
问题:程序运行导致电脑变慢或耗电增加。
- 排查与优化:
- 检查轮询间隔:默认30秒是合理的。如果设置得太短(如1秒),会频繁触发采集和数据库写入,增加负载。用
config set-poll-interval调回默认值或更长。 - 数据库大小:随着时间推移,数据库会增长。SQLite在处理数十万条记录时通常依然高效。但如果达到百万级,可以考虑使用
export功能导出旧数据并清理,或者研究是否启用了数据库的WAL模式以获得更好性能。 - AI总结调度:每日、每周、每月的AI总结生成是计划任务。确保它们没有在你不使用电脑的高负载时段(如白天工作时间)运行。调度时间可以在
scheduler.py中配置。
- 检查轮询间隔:默认30秒是合理的。如果设置得太短(如1秒),会频繁触发采集和数据库写入,增加负载。用
一个重要的隐私使用技巧:即使程序承诺不记录敏感应用,在处理高度机密信息时,一个简单的习惯是右键点击系统托盘图标,选择“暂停追踪”。这给了你完全的控制权,在需要绝对隐私的时段手动关闭记录功能,事后再恢复。这种“物理开关”般的控制感,是构建信任的关键。
