如何从云端拉取数GB的消息历史记录并用DuckDB和SQLite构建本地搜索引擎
想想你有多少次试图找到一封带附件的旧邮件、两年前Slack中的bug讨论,或者Discord私信里的一个重要想法。通常的结果都是打开十几个浏览器标签页、在笨重的企业通讯工具搜索里翻找,以及Slack免费存档再次截断你的消息历史带来的沮丧感。
我最近发现了msgvault。这是一个Go命令行应用程序,可以从十几个来源将所有对话拉取到本地磁盘,打包成SQLite和Parquet格式,并提供便捷的Web界面、终端TUI和用于神经网络的MCP服务器。
为什么要将消息历史记录拉取到本地磁盘
从第三方服务拉取数据的想法并不新鲜。然而,大多数情况下,备份最终会变成包含JSON转储或各种文件的巨大文件夹,在你的硬盘上积灰。没有专用数据库的情况下搜索它们是一场单独的折腾。
msgvault取代了传统的存档下载方式。该工具下载邮件、聊天、日历和会议记录,然后在它们之上部署一个功能完整的搜索分析层。数据留在你手中。无需付费订阅来保留旧线程或使用第三方云处理器。
以下是该工具可以整合到统一数据库中的内容:
- Gmail邮箱(通过OAuth或服务账号)和任何标准IMAP服务器。
- Google日历(事件、参与者和组织者与邮件一起被索引)。
- Microsoft Teams和Slack企业聊天,包括反应、文件和嵌套线程。
- 通过内置机器人代理连接Discord服务器。
- Beeper Desktop的通讯应用(可访问iMessage、WhatsApp、Telegram、Signal和SMS)。
- 来自Granola和Circleback的会议录音和转录。
- 本地MBOX转储、Apple Mail存档()、PST文件和Android的SMS备份。
归档在底层是如何工作的
项目架构在设计时就考虑了大规模数据量。如果你十年积累了五十万封带图片和文档的邮件,普通硬盘仅凭单个目录中的文件数量就会开始变慢。
作者通过结合SQLite、DuckDB和基于哈希的内容匹配解决了这个问题。
核心文本搜索通过SQLite中的FTS5运行。跨海量消息存档的复杂分析和过滤在基于列式Parquet格式的DuckDB上运行。这使得TUI中的重型聚合查询可以在毫秒级执行。
附件不会散落在各处。msgvault通过SHA-256对其进行去重,并打包成隔离的二进制包。这种方法在Linux上节省inode,在Windows或NAS上不会拖慢文件系统。如有需要,这些包随时可以通过维护命令解包。
Web界面、终端和向量搜索
拉取数据后,你可以通过三种方式使用它。
第一种选择:内置Web界面。守护进程启动一个HTTP服务器,应用程序不需要Node.js等外部运行时。界面针对快速键盘导航进行了优化。方便按域名对邮件进行分组、跟踪联系人以及查看文件。
第二种方式:直接在控制台中运行TUI。它输出整个消息历史的详细分析。你只需按几个键就可以按特定收件人筛选特定年份的对话。
第三种选择面向那些不仅想按精确词语搜索消息,还想按语义搜索的用户。msgvault可以连接到本地嵌入服务器,如Ollama、LM Studio或llama.cpp。
生成向量后,混合搜索启动。它结合了经典的BM25全文搜索和通过倒数排名融合的向量搜索。你输入类似"我们在哪里讨论过更改数据库架构"的查询,工具会找到相关内容片段,即使文本中没有出现"架构"这个词。
通过MCP连接神经网络
对于使用Claude Desktop或控制台AI代理的用户,msgvault包含一个内置的MCP服务器(模型上下文协议)。
无需手动将长邮件线程复制到与神经网络的聊天窗口中,你可以给代理提供对msgvault工具的访问权限。之后,Claude可以在你过去的对话中搜索上下文、调出旧协议,并交叉引用日历和Slack中的数据。所有搜索查询都在你的机器上本地执行。
快速开始
该工具以现成的二进制文件形式发布。在macOS和Linux上,安装只需一条命令:
curl -fsSL https://msgvault.io/install.sh | bash
Homebrew用户可以直接安装该包:
brew install msgvault
要开始使用,请初始化数据库并链接一个测试Gmail账户:
msgvault init-db
msgvault add-account [email protected]
msgvault sync-full [email protected] --limit 100
msgvault serve
命令会打开浏览器进行OAuth授权。下载一百条消息后,启动带有搜索功能的本地Web服务器。
如果需要运行后台进程进行持续的计划同步,该工具可以在守护进程模式下运行:
msgvault daemon start
msgvault daemon status
需要注意的事项
该项目正在积极开发中(alpha版本)。开发者警告说,存储格式和CLI标志可能在版本之间发生变化,因此最好定期备份数据库本身。
第二个细节涉及初始设置。要连接Gmail或Google日历,你需要花大约五分钟在Google Cloud Console中创建自己的OAuth客户端。不过项目文档有详细的分步指南。
谁会发现这个项目有用
msgvault对开发者、隐私爱好者和工作分布在数十个云服务中的人很有用。该工具解决了对其他平台的依赖问题,将分散的消息存档变成统一、快速、本地的知识库。
相关项目