把眼镜听到的一切,
编译成带出处的个人知识
even-knowledge-base 是 Even Realities 智能眼镜的个人记忆与知识库服务:对话与资料入库后,被编译为存放在每位用户自己 git 仓里的 canonical 知识。四级数据访问保证任何素材随时可达;问答与 AI 主动提词的每一句输出,都能回溯到原文。
四个问题,四个立场
个人记忆助手的难点不在「存」,在「信」:记下来的东西必须可核对、可控制、可生长。全部设计围绕四个问题展开,每个问题对应一条贯穿实现的立场。
每条 claim 回链
source_id + ¶span;词法命中、语义块、结构地图共用同一寻址体系,答案与提词卡片可逐级钻取到原文。引用不可验真的输出被机械丢弃。写时拒绝、系统分配 ID、确定性正规化、机械 gate:约束都是代码里的硬闸门,不是提示词里的请求。发现自己在写「请务必」,就是走错了。
同一 source 四级平行视图:L0 原文、L1 词法、L2 语义、L3 canonical。消化深度按处理意图递减,L0/L1 无条件可达,检索面永远无洞。
注册时按画像组合薄 schema 起步;证据积累后由强模型发起 schema evolve,在隔离 git 分支上重组,新旧对比后由人决定 adopt 或 drop。
一条异步编译管线,一座 per-user 知识仓
数据通路自上而下:任何输入先归一化,再决定消化深度;请求同步只落原文与队列,重活全部由 worker 异步完成。唯一权威层是每位用户自己的 git 仓,其余索引全部可重建。
权威与派生,在类型上分开
canonical(git 仓 + 原始 content)是唯一不可重建物;词法、向量、投影全部声明为 derived,可整体重建。策略或渲染升级只触发 derived 重建,永不改写 canonical。
快照即 git commit:dump、import、回滚、审阅对比,全部白拿 git 的能力。
处理意图,而不是猜体裁
文档入库不让用户判断「这是合同还是小说」,而是选一个命名意图:精读归档 / 要点蒸馏 / 存目索引 / 仅可检索,或交给系统判断。意图只是两旋钮的预设,词表封闭:新类型进不了分支,只能进设计评审。
| 状态 | 归属 | 性质 |
|---|---|---|
| canonical | per-user git 仓(共享存储) | 权威,不可重建 |
| 原始 content + 结构地图 | PG(append-only)+ 对象存储 | 权威输入 |
| 词法索引 | Meilisearch · index per user | derived,可重建 |
| 语义索引 | Qdrant · tenant filter | derived,字节确定性重建 |
| 投影 / 注记 / 任务队列 | PG | derived / 运行时 |
| API · worker 进程 | 无状态 | 任意扩缩 |
机制在哪里,可靠就在哪里
以下每一处「可靠」,背后都是一个机械机制,而不是一句提示词。
语义分块边界是 LLM 输出、跨调用不可复现。首次分块即把边界连同内容 digest 与模型血缘落进 manifest;重建时输入不变则回放边界。derived 因此从「可重建」升级为「字节确定性重建」。
claim 级写机制,不是「让模型写文件」
编译走 anchor preflight + edit_claim / append_block 的受控写:锚由系统分配,路径 ownership 对 skill 模板校验;机械 gate 逐条检查锚唯一、frontmatter、citation 合法性。
不合格的 patch 不整体作废,由 salvage 做确定性打捞,保住合格部分。
不变式是 review 的硬边界
六条领域不变式写进规格:违反任何一条即打回,无论实现多完整。它们是全部机制的「宪法层」,下方逐条列出。
一切数据与端口以 even_user_id 为第一维。git 仓、索引 per user;向量库 tenant filter 在 adapter 机械注入,业务层无法绕过。
canonical 唯一不可重建;derived 全量可重建。升级只触发重建,永不改写 canonical。
索引深度可随策略递减,可达性永不归零;检索面无洞。
一切知识回链 source_id + ¶span,四级共用同一寻址体系,逐级钻取白拿。
SystemMessage 逐字节稳定、绝不含时间戳;cache 命中是装配顺序正确白拿的,不是优化出来的。
评测的答案与评分细则,永不进入 compile 或 recall 的输入。
一次提问,三种深度;没有提问,五道闸门
溯源不止在数据层,动线一路点到原文
答案里的每个 [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:保守三级来源
enum 画像(industry × role)走人工策展矩阵,不用 LLM;occupation / bio 只做一次性受约束推导(0–3 个模板、每个附一句理由,允许空集);level 不进编译,mock 画像被闸门挡在真实推导之外。
组合后重算契约 hash,per-user 契约仍逐字节确定;base ⊆ composed 的模板加性约束是一条 raise 级机械断言:模板只增不减。
重组是单向搬移,不是重写
方向固定:未分类 → 准确分类。claim 连同锚注释一起搬进新文档,锚身份连续,投影、事件、git blame 全部接续;合并冗余是少数例外,由 dropped 清单机械暴露。
分不进去的继续留在 topics/:宁可留、不强归;宁可搬、不重写。
| 检查 | 日常 compile | evolve 模式 |
|---|---|---|
| 锚连续性 | 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 重组 → 人工采纳 → 回归日常」的完整闭环。
注册
第一天即量身定制
画像矩阵命中 products / research 两个模板;LLM 从 bio 推导出 hardware-product-decisions 与 manufacturing-lessons 两个家族。per-user skill 落进用户自己的 git 仓。
skill = v3 + packs.d3493ae0 · manifest 提交可见积累
九场会议照常编译
wave3 三家供应商的放行评审在 memory/topics/ 聚成簇;日常 compile 只管归档,不做任何结构决定。
phase 1
强模型点名主题聚类
证据陈述:三个 topics 聚类「形态一致、彼此独立的结构件放行评审主题,现有家族无法准确承载」,提案新家族 manufacturing-release-reviews/。
提案路径 memory/manufacturing-release-reviews/{slug}.mdphase 2
隔离分支上的整体重组
18 条 claim 搬进 3 个新文档;合并 0、丢锚 0。旧 topics 文档从 800–1000 字符缩为 40 字符的壳。
adopt
人工审阅后采纳
增量追平窗口期新 claim,merge,skill 指针翻转为三来源 pack(matrix + derived + evolved)。
HEAD aabd721f → 11675a2c · pre_adopt_ref 在案,可回滚回归日常
新 schema 被日常编译直接使用
wave4 两场会议 + 追平所得共 5 篇文档全部落进新家族,包括首次出现的供应商晶越与华宸的二次交付。
验收
召回全对,全部带引用
6 问 fast + 1 场 briefing:旧主题、新家族、跨期问题全部答对。briefing 输出七行供应商就绪总表,并按 as_of = 07-23 正确排除了日期为 07-24 的评审记录——时间纪律在真实输出中可见。
| 机制 | 注入的破坏 | 结果 |
|---|---|---|
| 模板形状校验 | 校验函数置空 | 检出 |
| 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 拼环境变量路径,测试至少一条相对根用例」。
如实交代
以下是已知的边界与下一步,全部来自本轮验证的过程发现。
- 画像推导偏积极。信息量大的 bio 会让一次性推导预置掉 evolve 本该发现的家族。方向:derive 契约上限降为 2,强化「与矩阵语义重复即不提」,用本剧本做 eval 循环迭代。
- evolve 证据面只看 topics/。散落在 people 文档里的同形态语义本轮未收编;召回不受影响,下一轮 evolve 可继续收编,phase 1 证据面可扩展到「people 文档中以组织为主体的小节」。pack 语义分界已先行收紧:外部组织的评审交付不再误归 products,保证聚类落在 topics/ 里可被 evolve 识别。
- 文档收尾未完成。architecture.md 尚无 schema-evolve 章节(实现与发布先行,文档待补);代码已推远程,GKE 已切含全部本轮特性的 v4 镜像。
- adopt 入队不防重。重复入队结果无害但日志有噪音,低优先级修复。