MatthewRyanWeber/Cerebro
GitHub: MatthewRyanWeber/Cerebro
Cerebro 是一个本地优先的文档实体图谱分析平台,将海量异构记录转化为可搜索、可连接、可逐行验证的调查分析大脑。
Stars: 0 | Forks: 0
# Cerebro
**将一堆关于人和金钱的记录转化为一个可连接、可验证的大脑。**
📋 **[功能目录 →](FEATURES.md)** · 🧮 **[计算与算法 →](CALCULATIONS.md)** · 🕸️ **[GraphRAG 架构 →](docs/GRAPHRAG.md)** · 📈 **[预测与劳动力统计 →](FORECASTING.md)** · 🖼️ **[截图库 →](docs/GALLERY.md)** — 每一个功能、每个指标背后的精确数学计算,以及每个界面的图片展示。
Cerebro 是一个**本地优先的调查分析平台**。向其输入关于组织及其人员的异构记录——文档、工资单、保险理赔、数据库表、电子邮件、网页——它会将其转化为一个*大脑*:一个可搜索的索引,其中每个人和组织都是一等**实体**,并通过它们出现的记录相互连接。然后您可以对其进行询问——全文搜索、实体连接图,以及一个包含精确金额和统计分析的工作台——所有操作完全在您自己的机器上完成。无需云端,无需账户,无单文档成本。
## 模型 —— 单引擎:适配器输入,透镜输出
- **单引擎。** 摄取记录 → 构建*大脑* → 搜索 / 图分析 / 分析 / 验证。
- **输入适配器** —— 大脑获取数据的方式:本地文件、URL、RSS、SQL Server、电子邮件、日历和网络抓取。统一入口:[`cerebro/ingest.py`](cerebro/ingest.py)。
- **分析透镜** —— 您利用大脑所做的事情:**文档连接图** (探索)、**精确金额/花名册分析** (花名册套件) 以及**理赔异常筛查** (FI透镜)。每个透镜都通过相同的 `DataSource` 接口在同一个大脑上运行。

## 透镜的组合之处 —— 价值所在
由于每个透镜都关联到相同的实体身份,它们可以相互**连接**。**跨大脑汇总** (`/panels/rollup`) 会提取出现在两个或多个大脑中的每个实体,并将每个透镜的事实放置在同一行中——一个人的文档提及情况紧挨着其工资情况,紧挨着任何理赔资金。*"被讨论**且**被支付**且**被标记"是谁*变成了一个单一查询,而不是长达一周的手工交叉核对。
**大规模验证。** 两个各有 **176,000 名员工(共 352,000 条记录)** 且共享 20% 人员的工资发放大脑——汇总功能在约 3 秒内提取出**同时出现在两份工资单上的所有 35,200 人**,每人在每个雇主的薪水都并排显示(例如,一个人在花名册 A 领取约 $258k *且*在花名册 B 领取约 $258k —— 合计 $518k)。它能找到*每一个*匹配项,而不是前 N 个抽样,因为它对完整的实体 ID 集合进行交集操作,并且仅对共享集合计算资金总和。使用 [`generate_overlap_rosters.py`](generate_overlap_rosters.py) 复现此结果。*(合成数据 —— 用于规模/正确性演示,非生产数据。)*

## 证明自身的数学计算
Cerebro 的差异化优势不在于它有多聪明,而在于它是**可核查的**。资金计算精确到分,聚合操作被下推到查询中(总体完整,无行数上限),并且旗舰版花名册报告在算作完成之前,会由独立的审计程序从原始来源**逐行重新推导**(约 1,000 项检查)——审计失败即*使命令失败*。对于必须经受住法庭、监管机构或审计员审查的输出结果,该工具会重新推导每一个数字,并拒绝造假。
## 为什么它能扩展而笔记应用不能
三个设计选择让其在规模扩大时保持平稳:
- **语义搜索是 ANN,而非暴力破解。** 相关笔记和“查找相似”查询命中 **HNSW 近似最近邻索引** (`hnswlib`,余弦相似度) —— 每次查询复杂度为 `O(log N)`,且嵌入矩阵永远不会加载到内存中。旧路径每次查询都会扫描每个向量并缓存整个矩阵。
- **导入是流式且仅追加的。** 每个文件单独通过完整的流水线处理,其结果被追加到恢复日志中——如果在 500,000 份文档的第 400,000 份时崩溃,系统将在 400,001 处恢复,永远不会重新开始。没有任何随语料库增长而增加的数据被保留在内存中,且检查点永远不会被整体重写。
- **图会渲染有界的邻域**,因此拥有 600 万连接的索引绘制速度与小型索引一样快。
- **打开文档是 O(1) 的查询操作。** 全文存储在以主键为索引的 `documents.body` 列中,因此阅读器直接获取它,而不是扫描搜索索引。单一的 `write_body()` 瓶颈使该副本和 FTS 索引保持同步——它们不会产生偏差,并且它会直接抛出异常,而不是默默孤立索引行。
## 探索工作区
- **左侧** —— 搜索文档、人物、组织和地点;按类型过滤实体。
- **中间** —— 神经大脑。在**概览**中,它只是大脑(干净,无杂乱)。**搜索或点击实体**,它的连接就会在大脑上亮起:彩色节点是实体(蓝色人物,金色组织,绿色地点,紫色电子邮件,橙色电话),青色圆点是文档,线条表示“此实体出现在此文档中”。拖动以重新排列,滚动以缩放。HUD 显示实时的**索引总计 (INDEX TOTALS)** 和**皮层状态 (CORTEX STATUS)** 面板(您的真实实体类型计数)。
- **右侧** —— 文档阅读器:提取的文本和原始 PDF 并排显示,带有可点击的实体标签,点击可跳转到该实体的连接。

## 数据解剖工作台
深入数据集会打开**工作台** —— 这是一个作为分析界面的手术托盘式图形界面。右键点击架子上的任何罐子(数据集)或文件柜(集合),选择**发送到工作台**。一个*项目*包含一个可能跨越**多个大脑**(独立的索引 / SQL Server 数据库)的数据集**工作集**;它们合并为一个跨大脑图。由于实体 ID 源于名称,因此*相同*的实体会自动跨大脑统一,并且任何连接两个大脑的实体都会被标记出来。

**计算**面板可按需跨大脑在工作集上运行:
| 选项卡 | 回答的问题 |
|-----|-----------------|
| **Profile (概况)** | 文档、独立实体、提及次数、平均提及次数/文档、空摘要率、日期跨度、按类型细分 |
| **Joins (连接)** | 同时存在于两组数据集中/仅存在于其中一组/存在于任一组数据集中的实体 (inner, left-anti, union —— “复杂的左连接”) |
| **Overlap (重叠)** | 数据集之间的成对共享实体计数 + Jaccard 相似度 |
| **Aggregate (聚合)** | 按实体类型或数据集进行 SQL 风格的 GROUP BY,带有汇总 |
| **Statistics (统计)** | 每个实体的提及次数分布 (平均值/中位数/百分位数)、对数刻度直方图、z-score 与 IQR 异常值 |
| **Path (路径)** | 两个实体之间的最短共现路径 (实体 → 共享文档 → 实体 …) |
| **Communities (社区)** | 在相同文档中共同出现的实体簇 (连通分量) |
| **Documents (文档)** | 跨整个工作集的全文搜索 |
| **Watchlist (关注列表)** | 匹配感兴趣的人员列表 (手动输入或从文件导入;精确 + 模糊匹配) |
| **Timeline (时间线)** | 随时间变化的文档 (日/月/年) |
| **Quality (质量)** | 对账 (提取了实体与未提取实体的文档) + 待合并的重复实体候选 |
每个结果都**可导出为 CSV**,附带了其背后的**生成的 SQL** (查看 SQL → 复制/保存 `.sql`),并且实体名称**直接链接到图形中**。整个工作集图可以导出为 **GraphML**,供 Gephi/Cytoscape 使用。通过按集合缓存和有界采样 (无枢纽级连接),计算在 250 万实体索引上依然保持快速响应。

## 财务分类账分析 (花名册套件)
Cerebro 区分两类资金数据,因为它们的数学计算方式不同:
- **语料库** 大脑 (默认) 包含*提及*资金的文档 —— 许多文档中的同一数字通常是同一笔资金,因此资金计算会对重复的金额进行去重。
- **分类账** 大脑包含本身即为财务记录的文档 —— 工资单条目、理赔、交易。不同记录上的相同金额是不同的资金,并且每次计算都会**精确计算每条记录的金额,直至精确到分**。
这种精确性是在引擎层面强制执行的:资金聚合被**下推到查询中** (总体完整,无行数上限),并且对于必须在 Python 中组装行的计算,首先会统计真实总体数量并将其上限提升至该规模 —— 截断的总和永远不会被呈现为完整的总和。在拥有 532,000 行的多月份大脑中,每个发布的总和都等于直接对所有行进行的 SQL `SUM` ([设计](docs/pushdown_aggregation_spec.md))。
花名册套件是分类账端,围绕岗位控制号 (PCN) 工资单构建 —— 一行是一条资助岗位的*记录*,而不是一个人;没有员工 ID 的行是空缺、分包和带有占位符名称的临时人员库。整个循环都在应用程序内运行:
- **+ 加载快照** —— 上传花名册 .xlsx 及其截止日期;原子加载器在构建时进行验证 (重复的 PCN 将中止,计算出的总计会根据导出的总计列进行核对),并为每个快照注册一个大脑,分组在文件柜中。
- **经过审计的报告** —— 每个生成的报告在算作完成之前,都会由独立的审计程序从原始电子表格**逐行重新推导** (旗舰报告包含约 1,000 项检查);审计失败则命令失败。分析师的“为什么”注释附带了它们的证明算术。

- **合理性筛选** —— 记录与同行中位数对比的工资异常值,以及 $/FTE (全职等效) 费率异常值 (高侧*和*低侧),对记录所属的每个组织群体实施共识规则,每个标记上都有职位名称,包含终止记录处理和等额集群提示 (四条刚好是 $19,000 的记录是一项津贴政策,而不是四个异常)。
- **空缺老化** —— 每条受资助但未填补的记录根据其开放时长进行分桶,特别标出了超过 1 年的资金。
- **⇄ 变动** —— 基于 PCN 连接的快照间比较:使用交叉核对证明 (增加 - 移除 + 变动必须等于总计间的总差额) 显示添加/移除/更改的行,每行都链接到其源记录。

- **⇆ 工资映射** —— 上传工资提取数据,并通过 PCN 将真实人员映射到人员库/临时预算线上,包含每个人员库的覆盖率,以及一个可选的应用程序,可将映射的人员写入大脑的图中。


## 理赔异常筛查 (FI透镜)
第三种透镜运行在**健康保险理赔的分类账大脑**上 (`build_cl_brain.py`)。它对理赔和提供者进行评分,以寻找**值得人工审查的异常 —— 绝非定论,绝不使用“欺诈”一词** —— 并分层进行:记录内和跨记录规则 (重复/拆分/不可能日期的计费)、统计软信号 (Benford 定律、同行异常值、集中度、模板化叙述重用)、推荐环图以及可选的监督模型。除了底层基础架构外,它与电子证据展示毫无共享之处:相同的大脑、相同的 `DataSource` 接口、相同的实体身份 —— 这正是为什么被标记的提供者也能在跨大脑汇总中与其文档提及和资金并列出现的原因。
## 协作 (实时)
工作台项目是**在服务器端共享**的,因此多个浏览器会话可以看到并编辑同一个调查 —— 模仿 Databricks Omnigent 的协作层。服务器仅**绑定到环回地址** (`127.0.0.1`,硬锁定 —— LAN 脚手架已在 0.3 版本的加固中删除),因此“共享”是指在此机器上共享;可通过可选的本地账户层添加多用户访问 (`CEREBRO_AUTH=1`,见下文)。
- **在线状态** —— 谁现在正在使用工作台。
- **评论与发现** —— 讨论项目;将计算结果固定为整个团队可见的*发现*。
- **共享与邀请** —— 复制项目链接,或生成**一次性邀请**。
- **调查报告** —— 将工作集 + 发现 + 讨论内容汇编成可下载的 Markdown 简报。
- **实时更新** —— 编辑、评论、发现和在线状态通过 Server-Sent Events 推送;更改会**直接合并到您的视图中**,而无需重置视图。
编辑是原子操作 (数据集的增量添加/删除),因此两个编辑同一个项目的会话永远不会互相覆盖。
## 自动化 (计划的 SQL 轮询)
Cerebro 可以通过实时的 SQL 源让索引不断增长。**自动化**面板用于注册 SQL 源 (连接字符串 → OS 密钥环,表,水位线列,目标大脑) —— 带有 **测试连接** 模拟运行 —— 后台调度程序会对其进行增量轮询:
- **基于水位线的变更数据捕获** —— 每次轮询仅提取比上次水位线更新的行,对其进行摄取 (文本 + 实体),并推进检查点。崩溃时将从上一个值恢复,绝不进行完全的重新摄取。
- **自愿且安全** —— 自动轮询受每个源的标志位控制,该标志**默认关闭** (与 `enabled` 分开),因此一次性的回填数据源绝不会被偷偷重新摄取;每个源都路由到其各自的索引。
- 索引缓存以较慢的频率重建,仅在实际到达新行时才执行,并且工作台的 **Live (实时)** 开关会显示图的增长情况。
## 后台富集 (Process菜单)
较重的针对单文档的分析被排除在快速的文本索引之外,以保持核心的快速响应,并可从右上角探索 (Explore) 的 **Process** 菜单中作为后台作业按需运行:
- **扫描文档的 OCR**、**图像字幕** (BLIP)、**视觉问答 (VQA)**、**人脸检测**、**视频/音频转录**、**相似性链接**。
- 每个作业都有 **Start (开始)**、实时**进度条**和 **Stop (停止)**。停止是协作式的,并在结束前**提交已完成的部分工作** —— 任何已处理的内容都不会丢失,重新运行时会从中断处恢复。
- 结果被写回索引并变为可搜索/可见。最好在 GPU 空闲时运行 GPU 作业。
## 记录如何进入 —— 输入适配器
大脑通过几种**输入适配器**之一进行填充,这些适配器汇集在 [`cerebro/ingest.py`](cerebro/ingest.py) 之下,因此“记录如何进入?”有了唯一的答案。网络抓取只是众多输入方式之一,而不是一个独立的产品:
| 适配器 | 来源 | 目标 |
|---------|--------|--------|
| `pipeline.from_files` / `from_url` / `from_rss` | 本地文件、网页、订阅源 | 笔记 → 索引 |
| `ingest.from_sqlite` / `from_connection` | SQL 行 (SQLite / SQL Server) | 直接进入大脑 |
| `sql_poller` | 实时 SQL,增量 (水位线 CDC) | 直接进入大脑 |
| `ingest.from_crawl` | 抓取的网站 | 直接进入大脑 |
| `ingest_email` / `ingest_calendar` | 邮件 + 日历 | 笔记 → 索引 |
文档处理路径 (`cerebro/pipeline.py`,流式传输 + 已检查点 —— 在任何崩溃后均可恢复) 单独处理每个文件:
- **文本** 直接从具有文本层的 PDF 中提取 (绝大多数情况)。
- **扫描件/纯图像 PDF** 会在内存中进行 OCR,因此它们仍然是可搜索的 —— 绝不会成为搜索中的黑洞。
- **源 PDF 被嵌入** (在同一驱动器上时为硬链接 —— 零额外磁盘占用),而不是爆炸式地变成每页一张图像,因此文档数量保持可控,且导入速度依然很快。
- **实体** —— 人员、组织、地点、电子邮件和电话号码 —— 使用 spaCy + regex 提取,并成为图的节点,以 `type:name` 为键,因此同一个实体在每个大脑中都是同一个身份。(日期和资金会在提取过程中被检测到,但不会被绘入图中。)
完整的逐页图像富集 (BLIP 字幕、VQA、人脸检测) **默认关闭**。可通过 `CEREBRO_ENRICH_IMAGES=1` 为某次运行开启 —— 它将使用 GPU。

## 快速开始
```
# 1. 从一个包含 PDFs 的文件夹构建 search/graph index(支持 resume-safe)。
python -m cerebro.index build --source "D:\Raw Data\MyDocs" --limit 20000
# 2. 启动 app。
python -m cerebro.web
# → 打开 https://localhost:8800/ (自签名 cert;接受警告)
# 随时检查 index:
python -m cerebro.index stats
```
索引位于 `index/cerebro.db`。使用 `CEREBRO_INDEX` 环境变量让应用程序指向不同的位置。
要将文档导入到较旧的保险库/笔记流水线 (Markdown 笔记 + 嵌入的 PDF) 中,请使用位于 `/import` 的导入界面或 CLI:
```
python -m cerebro --help
```
## 环境要求
- **Python** —— **3.12 并配备 GPU** (CUDA PyTorch wheels 仅限 3.12),或者 **任何更新的 Python 且无 GPU** (仅限 CPU)。在启动时通过 `cerebro/check_env.py` 检查 GPU。
- **PyMuPDF** (`fitz`) 用于提取 PDF 的文本/图像。
- 带有 `en_core_web_sm` 的 **spaCy** 用于实体提取。
- **sentence-transformers** + **hnswlib** 用于语义搜索和相关笔记 (HNSW ANN 索引)。
- PATH 中包含 **Tesseract** 用于扫描 PDF 的 OCR (可选,但推荐)。
- **CUDA PyTorch** 仅在您需要 GPU 图像富集时需要;应用程序和搜索本身不需要 GPU。
依赖项在启动时 (`cerebro/ensure_deps.py`) 会被检查,如若缺失则会自动安装 —— 具备 GPU 感知:在没有 GPU 的情况下,它会安装普通的 CPU wheels (`torch`、`onnxruntime`) 而不是 CUDA 版本。
## 术语表 —— 一处看全的隐喻堆栈
新读者会同时遇到多个嵌套的隐喻;每个隐喻都精确映射到一个概念:
| | 术语 | 它的实际含义 |
|---|------|--------------------|
| 🧠 | **Brain (大脑)** | 一个可搜索的索引 (一个 SQLite 索引文件,或一个实时的 SQL Server 数据库)。联合注册表 (`brains.py`) 可以同时服务于多个大脑。 |
| 📚 | **Constellation (星盘)** | 主页可视化:将每个大脑绘制为一个可以深入查看的书架文件柜。 |
| 🗄️ | **Cabinet / shelf / jar (文件柜/架子/罐子)** | 星盘内部的层级:文件柜是一个大脑,架子对数据集进行分组,罐子是一个数据集。 |
| 📁 | **Library (库)** (代码: `vault_dir`) | 导入操作写入的由 Markdown 笔记 + 附件组成的文件夹。代码标识符中的 "Vault" 是同一事物的遗留内部拼写。 |
| 🔬 | **Workbench (工作台)** | 分析工作区:对选定数据集进行集合操作、资金流分析、关注列表、档案分析。 |
| 🫙 | **Dataset (数据集)** | 大脑内导入的一个语料库 (例如一次文档生产)。 |
| 📝 | **Note (笔记)** | 一个 Markdown 文件:frontmatter 身份标识 (`source`、`sha256`) + 提取的正文 + 生成的部分。 |
## 架构
```
cerebro/
├── index.py ← SQLite FTS5 search + PK-indexed body + entity→document graph
├── datasource.py ← DataSource seam: SqliteSource + SqlServerSource (live SQL Server brain)
├── sources.py ← ONE brain→DataSource resolver, shared by the web + workbench layers
├── brains.py ← federation registry — serve many indexes at once
├── ingest.py ← input-adapter roof: from_crawl (+ re-exported SQL adapters)
├── workbench_ops.py ← cross-brain calculations facade (joins, overlap, stats, …)
├── workbench/ ← calculation engine: sources seam, corpus money, ledger money
├── fi/ ← claims-irregularity lens: tiered detectors, referral graph, model
├── roster_common.py ← shared roster invariants (PCN, person/not-person rule, pay map)
├── collab.py ← shared projects, comments, findings, presence, invites, SSE
├── poll_scheduler.py ← automation backbone — scheduled incremental SQL polling
├── sql_poller.py ← watermark CDC: pull-newer-than, ingest, checkpoint
├── crawler.py ← bounded web crawler (an input adapter, via ingest.from_crawl)
├── graph_ops.py ← path-finding, centrality, communities, cross_brain_rollup
├── pipeline.py ← streaming, checkpointed import (text + OCR + embedded PDF)
├── streaming.py ← per-file processing, batch NER, batch finish
├── extractors.py ← PDF text/image extraction, in-memory OCR
├── entities.py ← spaCy + regex entity extraction (entity_key: type:name)
├── ner_gpu.py ← GPU-batched transformer NER (fast path for big builds)
├── device.py ← GPU-first / CPU-fallback selector
└── web/
├── app.py ← Flask app (security, import/admin API)
├── explore.py ← Explore + Workbench + collab + automation APIs
├── panels.py ← HTMX panel surface (search, stats, money, timeline, rollup)
├── templates/ ← explore.html + panels/*.html fragments
└── static/ ← brain-graph engine, Workbench UI, panels-state.js
```
**GraphRAG,名副其实的诚实。** Cerebro 是一个基于图的检索系统:实体在摄取时被提取 (spaCy/GPU-BERT + regex),`mentions` 表是实体↔文档的边集合,检索作为 BM25/全文搜索在该图上运行 —— 没有向量存储,没有检索后生成 (retrieve-then-generate)。合成是确定性的并且**带有证明** (每个数字都从源重新推导),配有一个严格落地的本地 LLM 叙述器,它绝不会捏造数字。完整的阶段映射、流水线图以及它*不*做什么的明确列表在 **[docs/GRAPHRAG.md](docs/GRAPHRAG.md)** 中。
联邦模型:每个**大脑**都是 `DataSource` 接口背后属于自己的源,工作台在应用程序代码中将它们跨大脑合并。大脑可以是本地 `SqliteSource` 索引**或** `SqlServerSource` —— 即一个实时的 SQL Server 数据库 (包含 Cerebro 模式) 就地提供服务,无需复制任何内容。通过 `brains.register_brain(id, name, kind="sqlserver", connection=...)` 注册一个,它就会出现在星盘中,可以深入查看实时图,并且可以像任何其他大脑一样被搜索。**每个工作台计算都通过此接口路由**,因此单个工作集可以混合本地 SQLite 索引和实时 SQL Server 数据库,并且每个计算 (连接、重叠、统计、路径查找、社区、资金流等) 都可以同时跨越两者运行。请参阅 **[CALCULATIONS.md](CALCULATIONS.md)** 了解每个计算背后的精确公式。
日志输出至 `logs/` (轮转保存;INFO+ 至控制台,DEBUG+ 至文件,WARNING+ 至单独的错误文件)。测试:使用 `py -3.12 -m pytest` 运行 Python 套件 (包含 `test_real_dataset.py`,它会针对真实大脑验证完整的计算套件,并在大脑不存在时跳过),使用 `node test_js/run.js` 运行前端格式化/转义单元测试。
**可选的身份验证。** 设置 `CEREBRO_AUTH=1` 以要求使用本地账户 (`.cerebro/auth.db` 中加盐的 PBKDF2-HMAC-SHA256 哈希值,会话过期,5 次登录失败后锁定)。默认关闭。**在每个源解析瓶颈处,都会强制执行针对每个大脑的读取和写入 ACL** —— 不仅仅是星盘选择器,因此 API 无法通过 ID 提供受限制大脑的数据。敏感操作 (查看/搜索/导入/导出/生产) 记录在哈希链访问日志中。通过 `POST /api/auth/bootstrap` 引导第一个 (管理员) 账户,然后使用 `/api/auth/{login,account,grant}`。
## 状态
Cerebro 最初只是一个文档导入流水线,后来发展成为一个平台:单引擎 (摄取 → 大脑 → 分析 → 证明),多个**输入适配器**,以及多个**分析透镜**,所有这些都以共享的实体身份为键。探索工作区 (神经大脑的正面入口) 是进入的方式;**数据解剖工作台**是进行分析的地方;原有的导入/管理界面位于 `/import`。
**已构建并在大规模下运行:**
- **拥有 1,000,000+ 篇文档** 的电子证据展示索引 (约 450k 实体,650 万+ 连接),使用分片、可安全恢复的构建器构建 (每个分片运行 `python -m cerebro import --shard N/M`,然后运行 `cerebro.index.merge`),以及从 **SQL Server** 提供服务的第二个大脑 (331k 文档) —— 这两个大脑在工作台中一起进行了跨大脑分析。在包含 86 万篇文档 / 45.8 万个实体的工作集上,每次工作台计算都在约 8 秒内完成。
- **花名册套件** (资金透镜) 针对 8,800 行 / 17.6 亿美元的工资单运行;其旗舰报告在每次生成时都通过了针对原始电子表格的 1,000 项逐行审计。
- **FI透镜** 和 **跨大脑汇总** 已附带测试覆盖率交付。
**v1.0.0 版本 (2026-07-14) 发布内容:** 启动加固 —— 仅限环回绑定 (删除了 LAN 脚手架),带有针对每个的读/写 ACL 和登录锁定的可选本地账户,以及哈希链访问日志。此后,一次全代码库审计关闭了约 30 项正确性/性能/安全性发现,文档打开变为了 O(1) 查找 (以 PK 为索引的 `documents.body`),DuckDB 也加入了 SQLite 和 SQL Server 的行列,成为大脑后端 —— 参见 [docs/CHANGELOG.md](docs/CHANGELOG.md)。
**发展中/前瞻性:** 汇总的价值会随着您的大脑在主题上的重叠程度而扩展 —— 例如,当一家公司的文档和该公司的工资单都被加载时,它最为密集。组合机制已经构建完成;点亮它的共享主题数据会随着时间的推移而积累。
标签:Flask, Python, 代码示例, 实体链接, 数据分析, 文档检索, 无后门, 统计分析, 逆向工具