软件不是文件:KDC 的知识工程主张

点击查看原文>

作者:vivo 肖博

AI 合作者:ChatGPT(GPT-5.5)

创作模式:Human-led, AI-collaborated

责任声明:文章观点、理论体系及最终内容由作者负责;AI 参与讨论、推演、表达优化及部分内容生成。

研究说明:知识驱动计算(Knowledge-driven Computing, KDC)是我们正在提出和持续打磨的一套 AI 应用软件工程理论,目前仍处于开放研究阶段。上一篇讨论了应用软件为什么应该从领域现实出发,以及数据、文档、API 和事件为什么只是现实的数字表示。这一篇继续追问:表示在什么条件下,才能成为 AI 系统可以信任和复用的知识?

本文摘要:检索到相关材料,并不等于系统获得了可以用于判断的知识。本文区分 Representation、Knowledge 和 RAG 的职责,提出知识对象、来源证据、成熟度、版本与适用边界等工程要求,说明认知成果如何被验证、引用和持续更新。

KDC 系列文章:

  1. 《软件从现实开始:知识驱动计算(KDC)的 Reality First 主张》

继续说案例。

用户向售后 Agent 提出一个问题:

我在活动期间购买的商品还没有发货,现在取消订单会收手续费吗?

系统从企业知识库中检索到一段高度相关的退款政策。文档写得很清楚:活动订单取消时,需要收取一定比例的服务费。检索得分很高,引用片段与问题直接相关,模型也忠实地依据片段生成了回答。

但答案是错的。

被检索到的是半年前的旧版政策。新政策已经取消了这项费用,只是旧文件仍然保留在共享目录中,也仍然存在于向量索引里。新旧政策标题相似,旧版文字与用户问题的语义匹配甚至更高。

从 RAG 链路看,这次处理没有明显故障:文件解析成功,切块成功,Embedding 生成成功,相似度检索成功,模型也没有脱离上下文自由发挥。

然而,系统找到了相关材料,却没有获得当前可用的知识。

这个区别是企业 AI 系统中最容易被忽略、也最可能影响后续行动的区别之一。

“知识库”这个词经常掩盖了不同问题

在很多 AI 项目中,“建设知识库”通常意味着完成下面这条流程:

上传文件  -> 解析文本  -> 文档切块  -> 生成向量  -> 相似度检索  -> 注入模型上下文  -> 生成回答
复制代码

这条流程解决了一个真实而重要的问题:如何让模型在回答时访问外部材料,而不是只依赖参数中压缩的信息。对于企业私有文档、快速变化的制度、项目资料和专业内容,RAG 是非常有价值的工程机制。

但“材料可以被找到”与“系统知道了什么”不是同一个问题。

文件管理关注内容如何保存、共享和授权。搜索关注用户如何找到相关材料。向量检索关注语义上相似的内容如何被召回。RAG 关注相关材料如何进入模型上下文。这些机制都参与知识系统,却没有单独回答:

  • 这段内容来自谁?

  • 它当前是否有效?

  • 它经过什么验证?

  • 它与其他来源是否冲突?

  • 它适用于哪些对象、时间和业务条件?

  • 它能否被用于当前判断,尤其是高影响判断?

  • 使用后的现实结果是否支持它?

如果系统无法回答这些问题,“知识库”可能只是一个可以被模型检索的材料库。

这并不是文字上的挑剔。旧政策被检索出来时,召回系统完成了自己的职责。真正缺失的是版本判断、有效性验证、冲突处理和适用边界。把所有问题都归因于“RAG 不准”,会掩盖知识治理责任本身。

从现实到表示,还没有自然地走到知识

上一篇文章建立了下面这条链路:

Domain Reality  -> Reality Model  -> Representation
复制代码

现实经过观察和建模,进入数据库、文档、API、事件、日志、图片、向量、图谱和模型上下文。这些对象都是表示(Representation):它们以不同方式编码现实。

表示可以承载知识,但表示并不自动成为知识。

Representation 可以承载 KnowledgeRepresentation 不等于 Knowledge
复制代码

退款政策 PDF 是表示。它可能承载当前有效的退款规则,也可能承载已经废止的条款、未经批准的草案、错误描述或只适用于特定时期的临时安排。

数据库记录也是表示。refund_fee = 0 可以记录一个配置事实,但如果缺少适用范围、版本、生效时间和业务解释,系统仍然不知道它是否适用于当前订单。

Embedding 也是表示。它把内容编码到向量空间,帮助系统计算相似性,但相似性无法自动证明真实性、有效性或适用性。

甚至模型生成的总结也是表示。它可以准确压缩原文,也可能遗漏条件、混合不同版本,或者把推测写成确定结论。

这意味着,从文件到文本、从文本到向量、从向量到上下文,都只是表示形式的变化。格式改变不等于认知成果已经形成。

先用反例划清知识的边界

在给知识下定义之前,更可靠的方法是先检查那些经常被称为“知识”的对象,为什么又不能直接等同于知识。

PDF 不是知识

PDF 是一种文档表示。它可以承载制度、经验、方法和事实,也可以承载噪声、广告、过期规则和未经确认的观点。同一个 PDF 对文件系统而言是文件,对搜索引擎而言是索引材料,对模型而言是上下文,对员工而言可能是制度依据。

真正需要判断的不是它是不是 PDF,而是其中哪些认知成果仍然成立。

数据库不是知识

数据库保存事实记录、约束和关系,但记录不会天然解释自己对当前目标意味着什么。

订单表可以说明某位用户买过三次影像旗舰手机。“该用户在换机时更重视影像能力”则是对商品、时间、行为和场景进行解释后形成的候选认知。前者可以作为来源,后者才开始接近知识。

向量和 Embedding 不是知识

向量可以表达统计相关性和语义邻近性,却不会自动携带来源权威性、证据完整性、生效时间、冲突状态和行动边界。

两个片段很相似,只能说明它们在某个表示空间中接近,不能说明哪个更新、哪个正确,也不能说明它们能否共同成立。

RAG 片段不是知识

RAG 片段是某次检索为当前任务召回的上下文。它首先说明“这段材料可能与问题相关”,而不是“这段材料已经被验证”。

相关性是知识使用的必要条件之一,但不是充分条件。高相关的过期政策,可能比低相关的新政策更危险,因为它会让错误回答显得更有依据。

知识图谱不是知识的全部

知识图谱能够表达实体、属性和关系,是很重要的知识表示机制。但一条图谱关系如果没有来源、上下文、证据、版本和有效期,仍然可能只是结构化关系数据。

图结构解决“对象如何连接”,不自动解决“为什么相信这条连接”。

Memory 不是 Knowledge

记忆(Memory)强调历史、时间、经验和演化轨迹。用户过去说过“我喜欢小屏手机”,是一条值得保留的历史线索。它不一定是当前仍然有效的用户偏好知识。

知识可以进入记忆,记忆也可以为知识提供验证材料,但两者关注点不同。知识更关心当前能够复用的认知成果,记忆更关心过去如何影响未来。第四篇会专门讨论这个边界。

这些反例指向同一个结论:知识不能由存储介质、索引方式或调用机制定义。否则,任何被保存、向量化或检索出来的内容都会被默认升级为知识。

KDC 如何定义知识

基于前面的反例,KDC 当前采用下面这个定义:

知识(Knowledge)是已经验证、可复用,并能够降低预测、推理、决策或行动不确定性的认知成果。

这是 KDC 当前阶段的理论定义,当前成熟度为 Derived,而不是一个已经成为行业共识的最终认识论定义。它的目标也不是解决哲学上的所有知识问题,而是给 AI 应用软件提供一个可以进入工程设计的操作性边界。

这个定义包含四个不可省略的部分。

知识是认知成果

知识不是现实本身,也不是原始数据,而是系统或组织对事实、规律、方法、经验、约束、关系或模式形成的认知性把握。

订单金额 = 1000 元 是事实记录。“该订单满足无手续费取消条件”是结合订单状态、活动规则、支付情况和当前政策后形成的认知结果。

认知成果可以来自科学研究、工程实践、业务规则、组织经验、人工总结、模型推理或现实反馈。来源不同,不代表它们具有相同可信度,但它们都需要经过解释才能进入知识讨论。

知识需要验证

“已经验证”不等于永久、绝对正确。它意味着这个认知成果已经在某种成熟度上获得证据、实践、实验、规则、共识、反馈或人工确认的支持。

退款政策可以通过正式发布流程、制度 Owner 确认、生效日期、版本状态和业务系统配置交叉验证。用户偏好则可能通过多次选择、明确表达和后续反馈获得支持。不同知识需要不同验证方式。

模型说得流畅不是验证,相似度得分高不是验证,被很多人转发也不是验证。这些信号可以参与判断,但不能替代证据。

知识需要可复用

知识可以有很窄的适用边界,但不应只是一次对话中的临时输出。它应该能够在明确条件下,被未来的任务、判断或行动再次引用。

“这个用户的这笔订单现在不能退款”可能只是一次性结论。“已支付但未发货的普通订单,在用户未使用权益且不命中风控时可以无手续费取消”则更接近可复用规则。

可复用不意味着无限泛化。恰恰相反,复用需要知道适用对象、时间、地区、产品、渠道和例外条件。没有边界的“知识”最容易在错误场景中被复用。

知识需要降低不确定性

这是该定义中最关键的功能性条件。

知识之所以有价值,不是因为它被放进某种高级存储,而是因为它能够让未来的预测、推理、决策或行动少一些不确定性。

稳定的退款规则降低客服判断和用户决策的不确定性。经过验证的故障模式降低排障的不确定性。组织确认的项目风险降低资源安排的不确定性。成熟的工程规范降低实现和评审的不确定性。

如果一段内容被保存、检索和反复展示,却不能帮助任何后续判断,也不能说明自己在什么条件下成立,那么把它称为知识,对工程设计没有太大帮助。

从“正确或错误”转向知识成熟度

知识不是只有“是”与“不是”两个状态。

AI 系统会持续产生总结、分类、推测和建议。业务现实也会持续变化。要求所有内容在进入系统前就达到最终确定状态并不现实。把所有模型输出直接写入知识库同样危险。

KDC 因此引入知识成熟度(Knowledge Maturity):

Hypothesis  -> Candidate Knowledge  -> Verified Knowledge  -> Canonical Knowledge
复制代码

这条链路不是单向升级。新证据可能让已验证知识回退为候选状态,现实变化可能让知识过期,冲突可能暂时阻断使用,正式制度也可能被新版本替代。

成熟度真正重要的地方,在于它能够改变系统行为。Hypothesis 可以触发搜索和验证,Candidate Knowledge 可以进入低风险推理,Verified Knowledge 可以支撑稳定决策,高风险行动则可能要求更强证据和人工确认。

在开头的案例中,旧政策并不是因为变旧就从世界上消失。它仍然是历史材料,也可以用于解释过去的订单。但对于当前退款判断,它应该被标记为过期或被新版本替代,而不是与现行政策以相同权重进入上下文。

flowchart TB    M[“文档 / 数据 / API / RAG 片段“] --> R[“Representation<br/>数字表示“]    R --> S[“来源与证据“]    S --> V[“版本与有效期“]    V --> B[“适用边界与冲突处理“]    B --> K[“Knowledge Object<br/>可治理知识对象“]    K --> H[“Hypothesis“]    H --> C[“Candidate Knowledge“]    C --> VK[“Verified Knowledge“]    VK --> CK[“Canonical Knowledge“]    CK -.->|现实变化 / 新证据| C    VK -.->|证据被推翻| H
复制代码

图 2:从 Representation 到可治理 Knowledge Object

知识进入软件之后,需要成为可管理的对象

定义知识解决的是“什么可以被称为知识”。工程系统还要解决另一个问题:知识如何被标识、引用、追溯和演化。

KDC 把知识进入 AI 应用软件后的对象化表达称为知识对象(Knowledge Object)。知识对象不是一种固定数据库 Schema,也不是要求企业把所有内容搬进新的存储系统。它表达的是一组不能继续隐含的工程责任。

一个可被运行时引用的知识对象,至少需要考虑:

  • 身份:系统如何稳定引用同一认知成果

  • 来源:它来自哪份文档、数据、反馈或人工判断

  • 语义:它表达什么事实、规则、方法或经验

  • 上下文:它适用于什么对象、时间和业务条件

  • 证据:为什么可以相信它

  • 版本:它如何被修改、替代或回退

  • 成熟度:它当前可以被怎样使用

  • 冲突状态:是否存在相互矛盾的来源或结论

  • 生命周期:它当前是候选、有效、过期还是废弃

  • 责任与权限:谁负责确认,谁可以访问和使用

用对象化方式表达知识,不是为了把一段制度条款包装成复杂 JSON,而是为了让系统回答三个问题:当前知道什么,为什么相信,以及这个认知能否用于当前任务。

在退款场景中,系统不应只把“活动订单取消需收取服务费”作为一段文本保存。它还应该知道:这是哪个版本的规则,谁发布,何时生效,适用于哪些活动,与哪条新政策冲突,当前是否仍有效,哪些历史订单仍然适用。

只有这些责任能够被表达,检索结果才可能从“相关片段”进一步变成“当前任务可以引用的知识证据”。

RAG 的合理位置:找到材料,而不是替材料完成验证

明确知识边界,并不会削弱 RAG 的价值。恰恰相反,它能让我们更准确地使用 RAG。

RAG 擅长解决:

  • 从大量材料中召回与问题相关的内容

  • 把企业私有或最新材料装配进模型上下文

  • 为回答提供可展示的引用片段

  • 降低模型完全依赖参数化记忆生成内容的风险

但完整知识系统还需要处理:

  • 来源是否可信

  • 版本是否有效

  • 多个来源是否冲突

  • 内容属于什么成熟度

  • 是否满足当前任务和权限边界

  • 哪些结论被哪些推理使用过

  • 使用结果是否被现实反馈验证或推翻

因此,在 KDC 中,RAG 更适合被定位为知识流或知识运行时的局部机制。它负责材料召回和上下文装配,可以与搜索引擎、知识图谱、规则系统、文档管理和人工审核协同,但不必独自承担整个知识生命周期。

文章开头的错误也就有了更准确的归因:不是“向量检索完全没用”,而是系统只按相似度召回片段,没有在检索前后加入版本、有效期、冲突和适用范围过滤。

修复方式也不只是继续调切块大小和相似度阈值。团队需要补上知识身份、版本关系、来源权威性、生效状态和验证流程。检索质量仍然重要,但它不再是唯一质量。

这个定义解决的是软件工程问题

KDC 对“不确定性降低”的讨论与信息论有关,但关注的不是通信过程本身,而是系统在未来预测、推理、决策和行动中的认知不确定性。

KDC 也借鉴知识管理对知识形成、传播和复用的讨论,但不试图解决完整的人类认识论问题。这里真正关心的是:已经形成一定可信度的认知成果,如何进入 AI 应用软件,成为带有来源、证据、成熟度、版本和适用边界的知识对象,并被推理和行动链路安全地引用。

因此,KDC 不是重新发明“知识”这个概念,而是把知识定义转化为一个软件工程问题:系统当前知道什么,为什么相信,什么时候可以使用,以及现实反馈如何修正它。

实践:为一个高价值内容建立 Knowledge Card

团队不需要先建设完整知识平台,也不应该把所有数据都“知识化”。更现实的起点,是从一个会被重复使用、可能影响重要判断,或者一旦错误就会产生明显风险的内容开始。

它可以是一条退款规则、一项审批条件、一份合同风险判断、一条项目经验或一个客户偏好。

先检查六个问题:

1. 它的来源和责任方是否明确?

2. 有什么证据、规则、实践或现实反馈支持它?

3. 它适用于什么场景,又在哪些边界外不适用?

4. 它当前属于 Hypothesis、Candidate、Verified 还是 Canonical?

5. 它是否有版本、时效和冲突处理机制?

6. 它是否真的会被复用,并降低预测、推理、决策或行动的不确定性?

然后形成一张最小 Knowledge Card:

完成后,不要默认它一定要成为知识对象。团队应该做出三个明确判断之一:

  • 对象化:内容高价值、可复用或高风险,值得进入知识生命周期

  • 保留为来源:材料有价值,但尚未形成稳定认知成果

  • 暂不纳入:内容价值低、噪声高、缺少边界,治理成本大于复用收益

Knowledge Card 的价值不在于表格本身,而在于把“我们有这份文件”改写为“系统知道什么、为什么相信、什么时候可以使用”。

如果团队发现来源、证据、适用边界和成熟度大多无法填写,这不是要求立刻补齐所有字段,而是在提醒:当前系统管理的可能仍然只是材料和表示,尚未形成可以进入重要判断的知识。

AI 系统需要的不是更多材料,而是更可靠的认知成果

企业 AI 系统当然需要文件、数据库、向量检索、知识图谱和 RAG。问题从来不是要不要这些技术,而是不要把局部机制承担的职责扩大成完整知识架构。

文件解决保存和访问,向量解决相似度表示,检索解决材料发现,RAG 解决上下文装配,图谱解决关系表达。知识则回答另一组问题:这个认知成果是否经过验证,能否复用,适用于什么边界,是否能降低未来判断和行动的不确定性。

因此:

找到材料 ≠ 获得知识相关片段 ≠ 可靠依据进入上下文 ≠ 可以用于行动
复制代码

KDC 对知识的要求不是把所有内容变得复杂,而是让高价值、高复用和高风险认知具备最基本的来源、证据、版本、成熟度和生命周期。只有这样,AI 系统才可能知道自己当前知道什么,也知道哪些内容还不能被当作知识。

但当知识能够被系统引用后,新的问题马上出现了:系统如何基于这些知识形成判断?为什么选择某个行动?一次工具调用怎样从“模型想做”变成可解释、可审计、可治理的业务能力?

这将是下一篇讨论的主题。

理论边界与开放问题

本文的知识定义、知识成熟度和知识对象来自 KDC 当前阶段的理论推导,成熟度为 Derived。知识可信度计算、冲突模型、自动抽取内容的验证方式,以及知识对象何时可以进入高风险行动链路,仍是开放问题。KDC 不要求所有数据和模型输出都成为知识对象,也不把知识运行时等同于必须独立建设的新平台。


本文来源:InfoQ