even-knowledge-basev0.6.0
项目汇报 · 2026-07

把眼镜听到的一切,
编译成带出处的个人知识

even-knowledge-base 是 Even Realities 智能眼镜的个人记忆与知识库服务:对话与资料入库后,被编译为存放在每位用户自己 git 仓里的 canonical 知识。四级数据访问保证任何素材随时可达;问答与 AI 主动提词的每一句输出,都能回溯到原文。

v0.6.0 419 项测试全绿 真实模型端到端验证 · 中文长周期剧本 per-user git canonical 已上线 GKE · v4 镜像
关键点与要解决的问题

四个问题,四个立场

个人记忆助手的难点不在「存」,在「信」:记下来的东西必须可核对、可控制、可生长。全部设计围绕四个问题展开,每个问题对应一条贯穿实现的立场。

Q1
记忆凭什么可信? 转录与文件是流水,直接喂给 LLM 的「记忆」无法核对;错一次,用户就不再信第二次。
一切知识带出处
每条 claim 回链 source_id + ¶span;词法命中、语义块、结构地图共用同一寻址体系,答案与提词卡片可逐级钻取到原文。引用不可验真的输出被机械丢弃。
Q2
约束凭什么守得住? 「请务必记得做 X」式的 prompt 劝说,在前身 DKC 的全部实验中被证伪。
机制化而非劝说
写时拒绝、系统分配 ID、确定性正规化、机械 gate:约束都是代码里的硬闸门,不是提示词里的请求。发现自己在写「请务必」,就是走错了。
Q3
不是所有素材都值得精读,怎么保证找得到? 全量编译一部小说既贵又没必要;但「没编译」不等于「不存在」。
消化分级,可达不归零
同一 source 四级平行视图:L0 原文、L1 词法、L2 语义、L3 canonical。消化深度按处理意图递减,L0/L1 无条件可达,检索面永远无洞。
Q4
第一天定的知识结构,凭什么撑住半年后的生活? 用户的主题在变;而重组知识结构是破坏性操作,不能混进日常自治循环。
结构随证据生长
注册时按画像组合薄 schema 起步;证据积累后由强模型发起 schema evolve,在隔离 git 分支上重组,新旧对比后由人决定 adopt 或 drop。
宏观方案

一条异步编译管线,一座 per-user 知识仓

数据通路自上而下:任何输入先归一化,再决定消化深度;请求同步只落原文与队列,重活全部由 worker 异步完成。唯一权威层是每位用户自己的 git 仓,其余索引全部可重建。

FIG. 01数据通路:从入库到消费
数据通路示意:输入经归一化与意图判定后同步落库入队,worker 异步生成词法、语义、canonical 三级视图,供问答与 AI cue 消费
实线箭头为时序流,细灰线为读取关系。API 与 worker 均无状态、可各自横向扩容;用户隔离是机械的:git 仓 per user、索引 per user、向量库 tenant filter 在 adapter 层强制注入,不存在跨用户读路径。

权威与派生,在类型上分开

canonical(git 仓 + 原始 content)是唯一不可重建物;词法、向量、投影全部声明为 derived,可整体重建。策略或渲染升级只触发 derived 重建,永不改写 canonical

快照即 git commit:dump、import、回滚、审阅对比,全部白拿 git 的能力。

处理意图,而不是猜体裁

文档入库不让用户判断「这是合同还是小说」,而是选一个命名意图:精读归档 / 要点蒸馏 / 存目索引 / 仅可检索,或交给系统判断。意图只是两旋钮的预设,词表封闭:新类型进不了分支,只能进设计评审。

状态归属
状态归属性质
canonicalper-user git 仓(共享存储)权威,不可重建
原始 content + 结构地图PG(append-only)+ 对象存储权威输入
词法索引Meilisearch · index per userderived,可重建
语义索引Qdrant · tenant filterderived,字节确定性重建
投影 / 注记 / 任务队列PGderived / 运行时
API · worker 进程无状态任意扩缩
技术亮点

机制在哪里,可靠就在哪里

以下每一处「可靠」,背后都是一个机械机制,而不是一句提示词。

视图实现覆盖
L0 raw 原文直取 · locator 支持章 / 节 / ¶ 区间的结构寻址 adapter 结构地图 + fetch()
无条件
L1 词法全文检索 · 关键词 / 稀疏,中日文分词 Meilisearch · 入库即索引
无条件
L2 语义检索 · LLM 判「一人一段 / 一主题一段」边界,超长硬切兜底 chonkie + Qdrant
按处理意图
L3 canonical claims · fast / deep 直接消费的结构化知识 compile 管线 + git
按处理意图

语义分块边界是 LLM 输出、跨调用不可复现。首次分块即把边界连同内容 digest 与模型血缘落进 manifest;重建时输入不变则回放边界。derived 因此从「可重建」升级为「字节确定性重建」。

claim 级写机制,不是「让模型写文件」

编译走 anchor preflight + edit_claim / append_block 的受控写:锚由系统分配,路径 ownership 对 skill 模板校验;机械 gate 逐条检查锚唯一、frontmatter、citation 合法性。

不合格的 patch 不整体作废,由 salvage 做确定性打捞,保住合格部分。

不变式是 review 的硬边界

六条领域不变式写进规格:违反任何一条即打回,无论实现多完整。它们是全部机制的「宪法层」,下方逐条列出。

I1
用户隔离

一切数据与端口以 even_user_id 为第一维。git 仓、索引 per user;向量库 tenant filter 在 adapter 机械注入,业务层无法绕过。

I2
权威 / 派生类型区分

canonical 唯一不可重建;derived 全量可重建。升级只触发重建,永不改写 canonical。

I3
L0 / L1 无条件可达

索引深度可随策略递减,可达性永不归零;检索面无洞。

I4
provenance 统一

一切知识回链 source_id + ¶span,四级共用同一寻址体系,逐级钻取白拿。

I5
上下文装配纪律

SystemMessage 逐字节稳定、绝不含时间戳;cache 命中是装配顺序正确白拿的,不是优化出来的。

I6
泄漏纪律

评测的答案与评分细则,永不进入 compile 或 recall 的输入。

一次提问,三种深度;没有提问,五道闸门

rag通用检索
给上层应用一份干净的召回结果
L2 + L1 双路召回、RRF 融合;同区域词法 / 向量命中合并计分。素材无 L2 时词法路兜底。
fast低延迟问答
眼镜上的主力问答路径
claim 注记与原文窗口并行召回、双面融合;上下文经 forward-only 扩展、近邻合并、每源限流与 lost-in-the-middle 排序后作答。带佩戴者画像语言与 ASR 音近容错。
deep有界深查
复杂问题的可核验作答
fast 种子 + 三工具 agentic 循环(claims / content / verbatim),回 L0 核对出处;recursion_limit 封顶,每步 SSE 流式推到前端。
briefing连续快问答
围绕一批材料的高频追问
稳定知识包装进 System(逐字节稳定,守 I5),问题与 as_of 走 Human turn;provider cache 白拿。可锚定历史 source:material 卡片 + 引用它的全部 claims + 原文片段。
FIG. 02AI cue:沉默是机械的,五道闸门层层把关
AI cue 五道闸门示意:候选卡片依次经过去重、解析、引用、信心、截断五道闸门,多数被丢弃,默认沉默
cue 的方向与问答相反:没有人在提问,产物是零张或几张卡片,默认必须沉默——而沉默不靠自觉,靠闸门。灵敏度 = LLM 信心分 + 程序侧阈值,调阈值不需要重跑模型。检索不跨轮做 RRF 融合,避免「每轮都排中游」的泛泛来源压过单轮尖锐信号;传输有一次性 SSE 与 WebSocket 长连接两种,客户端是去重权威,服务进程保持无状态。

溯源不止在数据层,动线一路点到原文

答案里的每个 [cite:] 都可点

recall 与 briefing 的最终答案把内联 [cite: …] 解析成可点的溯源徽章,点击直落 Sources 对应原文块并精确高亮;Library 的 claim citation、History 的 claim 级 trace、patch 的「消化来源」同样可跳。source 已不可用时给出明确空态,不打断溯源意图。

问答结果态进 store:浏览器后退,问题、答案与引用原样还在;切换用户随 per-user 状态一并清空。

承诺强度是 skill 声明的词表

claim 行首的受控前缀(强 / 中 / 弱)上提为结构化徽章,悬停即出语义卡、点击可固定。词表由 skill 机械声明——skill 文本含该条款即点亮,前端只实现通用渲染,不硬编码任何具体词;契约 hash 逐字节不变,I5 红线不动。

近期交付 · Schema Evolve

让知识结构跟着证据生长

注册画像换来第一天的「量身定制」,证据积累换来结构升级。两件事都收敛在机械机制里:薄 schema 是组合出来的,evolve 在隔离分支上发生,采纳由人拍板;日常自治编译的零删除纪律一个字不动。

注册薄 schema:保守三级来源

enum 画像(industry × role)走人工策展矩阵,不用 LLM;occupation / bio 只做一次性受约束推导(0–3 个模板、每个附一句理由,允许空集);level 不进编译,mock 画像被闸门挡在真实推导之外。

组合后重算契约 hash,per-user 契约仍逐字节确定;base ⊆ composed 的模板加性约束是一条 raise 级机械断言:模板只增不减。

重组是单向搬移,不是重写

方向固定:未分类 → 准确分类。claim 连同锚注释一起搬进新文档,锚身份连续,投影、事件、git blame 全部接续;合并冗余是少数例外,由 dropped 清单机械暴露。

分不进去的继续留在 topics/:宁可留、不强归;宁可搬、不重写。

FIG. 03evolve 生命周期:隔离分支上的结构变更
schema evolve 生命周期:主干日常编译照常,evolve 在隔离分支上生成草案并重组,经 24 小时审阅窗口后 adopt 合并或 drop 删除分支
被动触发不做聪明判断,值不值得改由 phase 1 自己判断。审阅页机械摘要优先:新增文档列表、每文档收编 claim 数、dropped-anchors 清单,git diff 只作下钻。adopt 可逆:pre_adopt_ref 在案,指针翻回 + 从旧快照重建投影即可;超时未决视为 drop,默认保守。
evolve gate profile · 与日常 compile 的差异(日常 gate 一个字不动)
检查日常 compileevolve 模式
锚连续性per-path,消失即硬拒repo 级:旧锚须在新仓某处存在;真正消失的锚机械生成 dropped 清单进审阅页,不硬拒
citation 合法性对本次供给集校验对 store 真校验:source 存在 + ¶ 在边界内
路径 ownership对当前 skill 模板 skill 模板
锚唯一 / frontmatter / 锚覆盖不变不变

被动触发已真实点火,并抓到一个真缺陷

长剧本中 topics 增量过阈自动点火,暴露了只有真实时序才会出现的 bug:触发落在 wave 编译中途时,追平会把窗口内新文档的锚重复插入,落盘后知识库会被自身的锚唯一性闸门锁死。已修复,并在 adopt 终检加锚唯一性兜底;回归测试 + mutation 验证。

演示态固化为 5 个预制用户

中英文两条 evolve 长剧本(含已采纳的 evolve 任务记录)连同基础画像,固化为 5 个可一键还原的预制用户。export 有「源用户无数据即拒绝」护栏;import 对全局主键按 uuid5(friendly:old) 确定性重映射,重复导入不漂移。

端到端实证

中文长周期剧本,真实模型跑完全程

合成用户「周航」,硬件制造供应链角色,9 场会议横跨多个波次的供应商评审。compile / recall 与 evolve 分别使用不同强度的真实模型,验证「注册定制 → 长周期积累 → evolve 重组 → 人工采纳 → 回归日常」的完整闭环。

STEP 2
注册

第一天即量身定制

画像矩阵命中 products / research 两个模板;LLM 从 bio 推导出 hardware-product-decisions 与 manufacturing-lessons 两个家族。per-user skill 落进用户自己的 git 仓。

skill = v3 + packs.d3493ae0 · manifest 提交可见
STEP 3–4
积累

九场会议照常编译

wave3 三家供应商的放行评审在 memory/topics/ 聚成簇;日常 compile 只管归档,不做任何结构决定。

evolve
phase 1

强模型点名主题聚类

证据陈述:三个 topics 聚类「形态一致、彼此独立的结构件放行评审主题,现有家族无法准确承载」,提案新家族 manufacturing-release-reviews/。

提案路径 memory/manufacturing-release-reviews/{slug}.md
evolve
phase 2

隔离分支上的整体重组

18 条 claim 搬进 3 个新文档;合并 0、丢锚 0。旧 topics 文档从 800–1000 字符缩为 40 字符的壳。

STEP 6
adopt

人工审阅后采纳

增量追平窗口期新 claim,merge,skill 指针翻转为三来源 pack(matrix + derived + evolved)。

HEAD aabd721f → 11675a2c · pre_adopt_ref 在案,可回滚
STEP 7
回归日常

新 schema 被日常编译直接使用

wave4 两场会议 + 追平所得共 5 篇文档全部落进新家族,包括首次出现的供应商晶越与华宸的二次交付。

STEP 8
验收

召回全对,全部带引用

6 问 fast + 1 场 briefing:旧主题、新家族、跨期问题全部答对。briefing 输出七行供应商就绪总表,并按 as_of = 07-23 正确排除了日期为 07-24 的评审记录——时间纪律在真实输出中可见。

419全绿
测试总数,本特性新增 41;web tsc / build 干净
9/9
关键机制 mutation 注入全部被测试检出
18 → 3
条 claim 重组进 3 个新文档,丢锚 0
7/7
fast 与 briefing 问答全对,全部带引用
0字节漂移
v1 / v2 契约 hash 全程逐字节不变(I5)
机制验收 · mutation 纪律:故意破坏每道闸门,测试必须变红
机制注入的破坏结果
模板形状校验校验函数置空检出
compose 确定性去掉 pack 排序检出
mock 画像闸门删除 source == "mock" 分支检出
dropped-anchor 检测判定恒假检出(2 测红)
citation repo 级豁免豁免恒假检出
move 变复制搬移后保留原文块检出(4 测红)
adopt 复活规则复活分支恒假检出
被动触发 AND → OR阈值弱化检出
GIT_INDEX_FILE 绝对化还原相对路径新回归测试检出

唯一未检出的注入是 base ⊆ composed 的子集断言:构造上恒真的防御性代码,判定为可接受。GIT_INDEX_FILE 相对路径 bug 只在真实部署形状下触发,由本次 e2e 暴露并修复——教训已沉淀为「凡 adapter 拼环境变量路径,测试至少一条相对根用例」。

现状与边界

如实交代

以下是已知的边界与下一步,全部来自本轮验证的过程发现。