KB-METABOLISM · 设计全景
一个会遗忘的知识库是怎么运转的
只有入口的库必然腐烂——熵增是默认方向,代谢是唯一对抗。本页是整个系统的一张图:知识的一生、决定生死的信号经济,以及协议从 v1 到 v2 时对抗式审查修掉的四个陷阱。
01
知识的一生
核心比喻是代谢:给只进不出的笔记库补上两个器官——消化(资料 → 判断)与排泄(无用 → 墓地)。每篇笔记都走这条流水线:
四层存活等级
L0 核心 ≤100 条硬上限
终态交付物:每条 = 一句可复述的判断 + 何时再用。由消化(kb chew)从高频 L1 提炼,判断必须出自人口。
L1 资料 能检索到即可
AI 读的细节层。超过衰减窗口零信号 → 上处决名单。被反复读取的 L1 是"有营养的",进消化名单。
inbox 暂存 30 天大限
说不出用途的内容在这等待自证价值:要么升级(kb promote / 过堂 p 键),要么到期进名单。
_graveyard git 可反悔
已掩埋。随时可真删,也随时可还魂——删除的不可逆性被 git 拆除了。
02
信号经济:生死怎么判
"默认过期,使用续命。"不同的使用方式给不同长度的免死窗口——这是整个系统的货币体系(协议 v2):
kb_cite
被引用进产出 · 免死 180 天
agent 声明"回答里真用上了"
kb_read
被读取全文 · 免死 90 天
人或 agent 经门读全文
kb_inject
被注入且真相关 · 免死 30 天
hooks 自动注入摘要(idf 加权 + 标题命中判准)
search / ui
不续命
检索命中、管理台浏览——看见 ≠ 使用
法医上榜规则(协议 v2,五条同时成立)
以下条件同时成立(AND),才进处决名单:
90 天无读取kb_read 信号
且
180 天无引用kb_cite 信号
且
30 天无注入kb_inject 信号
且
0 活反链只有活源发出的链接算担保
且
>90 天内容未变更重命名/批量提交不算触碰
⇒
上榜候审
inbox 层例外:kb_expires 过期即上榜(出路是升级)。L0 永不上榜(只能被新判断"挤位"淘汰)。上榜 ≠ 死——人不勾选就是赦免。
03
从 v1 到 v2:对抗式审查修掉的四个陷阱
2026-07 的一次第一性原理对抗式审查,在真实 vault 上实测出四个结构性陷阱。它们已全部修复并固化进协议 v2 与回归测试——留在这里是因为每一个都是"会遗忘的系统"的普适教训。
教训 1
便利层会饿死自己的信号经济
v1 陷阱
hooks 自动注入摘要满足了信息需求,但注入被规定为"不算使用";会续命的走门读取靠 agent 自觉。结果:不算数的信号狂奔,算数的信号为零——摘要一眼够用的最有用笔记,恰恰永远拿不到读取信号,必死。
v2 修法
先把注入判准做严(idf 加权覆盖 ≥50% 且标题命中,正文碰瓷与常用字都拦住),再让 kb_inject 成为第三档存活证据(30 天)。顺序不能反:判准不严,注入续命就是滥发免死金牌。
教训 2
批量操作会把全库年龄清零
v1 陷阱
"多久没动"取自 git 最后提交。一次目录迁移、一次批量补 frontmatter,全库"最后触碰"变成昨天——体检报告 100% 活跃,法医失明 90 天。系统自己生产假阴性。
v2 修法
年龄 = 最后一次真实内容变更:全仓单趟 git 扫描,纯重命名走别名链不算触碰、超过阈值的批量提交整体跳过、被过滤光的回退出生时间。体检与法医同一口径。
顺带修掉两个"路径对不上就静默回退"的实现暗礁:中文文件名的 git 转义(quotepath)、vault 是仓库子目录时的路径前缀——任一存在,年龄机制都在无声失效。
教训 3
反链不能等于永生
v1 陷阱
有一条反链 = 永不上榜。教程系列互链整簇担保;一张列 300 条链接的索引页 = 发 300 张永久免死金牌;死透的笔记发出的链接与活笔记等权。
v2 修法
反链降级为活源担保:只有自身活着(近期有信号或正被编辑)的笔记发出的链接才算数;创作目录(outputDirs)的引用是铁证不降级。只算一层不做图迭代——死簇互链同批上榜,被使用的索引页仍保护子节点。
教训 4
只造死亡通道,不造晋升通道
v1 陷阱
协议要求 inbox"30 天内升级或进名单",但工具链里根本没有"升级"动作——死亡零摩擦(到期自动上榜),晋升全系统摩擦最高(手改 frontmatter)。过期 inbox 赦免后层级不变,下周继续上榜,钉子户吃光每周审批预算。
v2 修法
kb promote 一个动作四个入口:CLI、过堂 p 键、MCP 工具(用户明说才代办)、管理台按钮。入口税照收(必须给 use_when)、只升不降。协议边界不变:晋升可以代办,死亡永远不行。
04
质检:检索的自体基准
检索排序即司法(注入发免死金牌、消化候选依赖读取),所以它必须可测量。kb bench 用入口税收上来的 kb_use_when 当真值——那句"什么时候会再用到"就是未来查询的预演,每条笔记天然自带测试用例,零标注、零 LLM、随库自动更新。同一套用例跑纯字面 / 纯语义 / RRF 混合三策略,胜负手清单直接回答"embedding 值不值、融合有没有帮倒忙"。
铁律:评测永不留信号——在这个系统里,跑一遍 benchmark 等于给全库发免死金牌,所以 bench 直调纯函数、不走门,由测试断言保证。额外收获:全军覆没的用例往往不是检索的错,而是 use_when 写得太抽象——基准同时审计了入口税的质量。
05
永久不变量
- 文件 + git 是真相,SQLite 里的一切可丢弃重建
- 访问日志是唯一不可再生数据(追加式 JSONL,随 vault 走)
- 检索必须走门;没有日志就没有衰减判定
- AI 提案、人判决、git 兜底可反悔;删除永远不给 AI,UI 无删除按钮
- 零 LLM 时内核完整;判断力是插件
- vault 自包含:拷走目录 = 带走整个系统;secrets 永不进 git、永不经过 API
- 协议有版本:约定演进必须可迁移——协议 > 工具