Kept:构建本地优先的 AI 对话知识库

对于许多人来说,AI 聊天界面已经成为一种主要的“工作记忆”。我们用它们来追踪调试路径、起草研究笔记、细化产品决策以及存储代码片段。然而,这些宝贵的智力历史通常被锁在专有供应商的 UI 中,导致难以跨平台搜索或整合到更广泛的个人知识管理(PKM)系统中。

Kept 是一个开源、本地优先的代理式知识管理器,旨在解决此问题。它通过从多个 AI 供应商提取对话并将其存储为本机上的纯 Markdown 文件,将短暂的聊天记录转化为永久、可搜索且由所有者控制的档案。

本地优先归档的架构

Kept 采用三层架构,将数据从云端迁移到本地磁盘,而不依赖于对渲染页面的脆弱网页抓取。

1. Chromium 扩展

扩展不再抓取 DOM,而是直接拦截来自供应商 API 端点的对话数据,使用用户已登录的会话。它会对来自不同供应商(包括 ChatGPT、Claude、Gemini、Grok 和 Kimi)的消息和图片资源进行标准化,并将负载发送到本地服务器。

2. 桌面应用

桌面应用基于 Tauri 2(React 前端和 Rust 后端)构建,充当中心枢纽。它通过本地服务器 (http://localhost:18241) 接收来自扩展的数据,并执行以下关键功能:

  • Vault Management: 将对话写入带有 YAML frontmatter 的 Markdown 文件,保存至 ~/.kept/vault/
  • Indexing: 使用 SQLite FTS5 实现高性能全文检索。
  • Knowledge Graph: 利用 CozoDB 构建本地知识图谱,以可视化不同对话之间的关联。

3. MCP 服务器

为了让档案具备“代理性”,Kept 包含一个 Model Context Protocol(MCP)服务器。这使得 AI 编码代理(如 Claude Code 或 OpenClaw)能够以编程方式列出、读取、搜索和管理 vault,从而让代理能够将你的历史 AI 交互作为上下文来源。

为什么选择 Markdown 文件而不是数据库?

Kept 最重要的设计决策之一是使用兼容 Obsidian 的 Markdown vault 作为唯一真相来源。虽然数据库在初始查询上可能更快,但基于文件的方式在长期使用中提供了多项优势:

  • Interoperability: vault 可以直接在 VS Code、Obsidian 或任何文本编辑器中打开。
  • Future‑Proofing: 由于数据以纯文本形式存储,即使 Kept 应用被弃用或供应商 API 发生变化,档案仍然可读。
  • Recoverability: 搜索和图数据库被视为缓存;它们可以随时完全从 Markdown 文件重新构建。

隐私与安全

在一切都在云端同步的时代,Kept 坚持严格的本地优先原则:

  • No Cloud Sync: 没有托管账户或云备份。所有数据均保存在 ~/.kept/ 中。
  • Local Communication: 扩展通过 localhost 与桌面应用通信,使用每次安装生成的 bearer token。
  • Configurable Intelligence: 可选功能如主题发现和归档聊天可通过用户选择的供应商或本地 Ollama 服务器路由,以实现完整隐私。

挑战与注意事项

虽然 Kept 为重新掌控 AI 历史提供了强大手段,但它仍面临依赖私有供应商 API 的固有挑战。正如社区所指出的,这些连接可能脆弱,因为它们依赖未公开的端点,供应商可能随时更改而不另行通知。

然而,通过将 Markdown vault 设为主要存储层,Kept 降低了数据丢失的风险。即使某个供应商适配器失效,已保存到本地磁盘的对话仍然完整可用。

入门指南

Kept 采用 MIT 许可证,支持 macOS、Windows 和 Linux。安装通常只需运行一个快速安装脚本,脚本会设置桌面应用并提供 Chromium 扩展供手动在开发者模式下加载。想要将档案整合到 AI 工作流的用户,可以通过一行脚本安装 MCP 服务器,从而让代理直接使用 grep_vaultread_file 访问你的历史 AI 知识库。

Sources