开放脑区注释版:8 列,80 行写入路径,单个 SQLite 文件

发布日期:2026-04-23 10:01:17   浏览量 :1
发布日期:2026-04-23 10:01:17  
1

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

昨天我开源了 Open Brane —— 一个个人事件日志大脑,它仅使用一个 SQLite 表、一条写入路径,以及一个可供智能体查询的模型上下文协议(MCP)服务器。本文将详细介绍其工作原理。

如果你尚未阅读第一篇文章,简要总结如下:你关心的每个数据源都会被规范化并存入一个仅追加的表中。该表是单一事实来源。每个下游视图——包括 Obsidian 页面、向量搜索、编译后的日记和仪表盘——都由此重新构建。智能体访问本地 MCP 服务器,从不直接访问数据库。

如果你喜欢看视频:https://www.youtube.com/watch?v=uoNe2_OexCc

本文侧重于实现细节。目标是让你在阅读完本文后,能够理解整个系统,并能够自行编写缺失的适配器。

单一表结构

CREATE TABLE events (
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    ts              TEXT    NOT NULL,
    source          TEXT    NOT NULL,
    type            TEXT    NOT NULL,
    actor           TEXT,
    payload_json    TEXT    NOT NULL,
    attachment_uri  TEXT,
    ingested_at     TEXT    NOT NULL
);

仅此而已。没有连接操作,没有外键,没有数据库迁移。在我的生产环境中,942,068 行数据仅占用 3 GB 磁盘空间。

每一列都只承担一项职责:

  • id — 单调递增的主键。
  • ts — 事件在现实世界中发生的时间。例如 Git 提交的时间戳、Claude 会话的开始时间、Fitbit 读数的分钟级时间。而非数据被摄入的时间。
  • source — 指明是哪个适配器写入了该数据。例如 gitclaude-laptopgdrivefitbit。这是关键字段,去重逻辑依赖于它。
  • type — 事件类型。例如 commit(提交)、reply(回复)、document-chunk(文档片段)、sleep-score(睡眠评分)、query(查询)。这是我最常用的过滤维度。
  • actor — 一个不透明的去重指纹。对于 Git 提交,它是 SHA 哈希值;对于 Claude 回复,它是会话 ID 加上消息索引。由适配器决定具体值。如果两行数据的 (source, actor) 相同,则视为重复项。
  • payload_json — 以 JSON 格式存储的完整事件数据。写入时无需固定模式,由适配器决定数据结构。
  • attachment_uri — 指向 blobs/ 目录中大型二进制附件的相对路径。例如语音录音、PDF 文件、图片。这些文件存储在数据库之外。
  • ingested_at — 事件进入数据库的时间。在数据摄入器离线后恢复同步时非常有用。

(source, type, ts) 上建立的索引足以处理我所遇到的所有查询

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部