两份资料说法不一致时,不许静默采用新的那一份。登记下来,做一次裁决,写明理由。
知识库最危险的状态不是"缺内容",是两份互相打架的内容并存,而没人知道。
做课时引用了哪一份,全凭运气。更糟的是:新人看到 A 页写"市场 380 亿",B 页写"市场 210 亿",会以为是自己理解错了。
Karpathy 在 llm-wiki 里把「new data contradicts old claims」列为 lint 第一项,理由是:一个不处理矛盾的 wiki,规模越大越不可信。
| 登记日 | 冲突点 | 说法 A(来源 · 等级) | 说法 B(来源 · 等级) | 裁决 | 状态 |
|---|---|---|---|---|---|
| (示例) 2026-11-04 | 企业 AI 培训市场规模 | 380 亿(某白皮书 · B) | 210 亿(行业年报 · B) | 取 380 亿,口径含 IT 培训;210 亿仅指管理培训 | 已裁决 |
入库(kb-sync)或检索(kb-query)时,只要发现同一件事有两种说法,就登记。包括:
三选一,必须选一个,不许挂着:
| 裁决 | 适用 | 后续动作 |
|---|---|---|
| 采用 A | A 的口径更清楚、来源更强、更新更近 | 把 B 的说法从页面里删掉,或在正文注明「另一种口径是 X,已不采用,理由见矛盾登记」 |
| 采用 B | 同上,反过来 | 同上 |
| 都采用,写明条件 | 确实都成立,只是适用范围不同 | 页面里两句话并存,但必须紧跟「前者适用于…,后者适用于…」 |
裁决后,页面上不能有两句话并存而没有任何说明。 那等于把问题丢给读者。
待裁决 —— 已登记,还没定。这时候这页不能用于做课(课件里不许出现待裁决的数字)已裁决 —— 定了,页面已按裁决改完已消解 —— 源更新后矛盾自然消失(比如旧文件被删了)数字口径类:谁最懂这块业务谁定,通常是做课的人。 法条、政策类:只认官方原文,以官方最新版为准,不裁决直接替换。 客户数据类:以客户书面提供的为准,口头说法登记为 C 级备注。
kb.py lint 查不出矛盾 —— 这需要读懂两段话的意思,脚本做不到。
所以矛盾只能靠两处兜住:
kb-ingest 有一项检查「本页结论是否和已有页冲突」kb-lint 的每月任务里有一条「抽 5 个 topic 页,对比它们的数字是否互相矛盾」这是这套系统里少数需要人(或 LLM 语义判断)而非脚本的地方。承认它,比假装能自动检查更好。