ARTICLE · 1055099
一文讲清软件工程与知识工程
支持原创,请点击右上角,设为星标+关注+转发,谢谢!
1998年,一家软件公司交付一套ERP,最怕的是系统崩溃、需求变更、代码维护。
2026年,一家企业上线AI知识助手,最怕的是它一本正经地胡说八道。
前一个怕,靠软件工程来解决。
后一个怕,光有软件工程远远不够,还需要知识工程。
两个词听起来很像。内涵完全不同。有人问:我不关心概念,只想知道软件工程和知识工程到底有什么关系?
好。这篇文章就把它讲清楚。
软件工程:从一场危机开起步入正轨
在软件工程诞生之前,软件开发是一门手艺活。
程序员凭个人经验写代码。没有统一流程,没有规范分工,没有质量保证。项目规模小的时候,一切尚可运转。当系统变得庞大,灾难就来了。
1960年代,美国银行开发了IBM System/360操作系统,投入巨大,延期多年。其他大型项目也频频出现预算超支、进度失控、交付软件Bug丛生、维护成本飙升。计算机科学家们管这叫“软件危机”。
1968年,北约举办了一次著名的软件工程会议,正式提出“Software Engineering”这一术语。目的很明确:把软件开发变成一门可管理的工程学科。
软件工程解决的就是这个问题:如何用系统化、规范化、可量化的方法,在成本、进度、质量三重约束下,把用户需求变成一个可靠、可维护、可演进的软件系统。
此后半个世纪,它发展出完整的理论与实践体系。需求分析教人们搞清楚“用户到底要什么”;架构设计解决“系统长什么样”;编码规范保证协作效率;测试体系守住质量底线;DevOps把运维变成自动化流程。软件工程不是某个单一技术,而是一套从想法到生产的工业流水线。
没有软件工程,我们不会拥有今天稳定运行的数字世界。
它管的是“系统怎么跑起来、怎么不崩、怎么改得动”。
知识工程:为了让机器真正“懂行”
软件工程管好了系统。但系统里的知识,谁来管?
这是知识工程要回答的问题。
1977年,斯坦福大学计算机科学家爱德华·费根鲍姆在人工智能会议上正式提出“知识工程”。当时正值专家系统热潮。MYCIN能诊断血液感染,DENDRAL能推断化学分子结构。研究者发现一个关键瓶颈:专家系统的能力不取决于算法有多精巧,而取决于专家知识有没有被获取、表示和应用于机器。
所以知识工程诞生之初,定义就很清晰:研究知识获取、知识表示、知识推理、知识验证与解释,把领域专家的知识变成计算机可执行的知识库。
它和软件工程有本质区别。软件工程处理的是“功能和流程”,知识工程处理的是“概念和规则”。软件工程问“系统怎么做出来”,知识工程问“结论怎么推出来”。
如果没有知识工程,机器可以运行,但不理解自己在处理什么。
八十年代,大规模知识库CYC试图把人类常识编码进机器。九十年代,语义网运动推动Web知识表示标准化。二十一世纪,知识图谱把实体关系变成可查询的图结构。直到大模型时代,知识工程依然是抵抗AI幻觉最有力的一道防线。每一次技术浪潮,知识工程都在换一种形态继续存在。
它管的是“知识怎么被机器可靠地使用”。
核心活动:步骤神似,对象完全不同
一个软件项目通常这么走:需求分析→架构设计→编码实现→测试验收→部署运维。
一个知识工程项目通常这么走:知识获取→知识建模→知识表示→知识验证→知识应用与演进。
软件工程 | 知识工程 |
|---|---|
需求分析:弄清用户要什么 | 知识获取:弄清专家怎么判断 |
架构设计:定义系统模块 | 知识建模:定义概念与关系 |
编码实现:写代码 | 知识表示:写本体、规则、图谱 |
测试:验证功能是否正常 | 知识验证:验证逻辑是否一致 |
部署运维:版本升级与监控 | 知识演进:规则更新与黄金回归 |
表格放下来看,你会发现两排活动惊人地相似。好像只是换了一批名词。但这个相似是假象。
软件工程的对象是代码,是函数,是接口。知识工程的对象是概念,是事实,是范畴。软件工程保证“程序按预期执行”。知识工程保证“推理按逻辑成立”。前者面向机器的运行,后者面向业务的认知。哪个出了问题都不行,但出问题的地方完全不同。
想象一下,你建了一个报销系统。软件工程负责审批流程正确,不出现重复支付。但“这笔报销为什么不合规”,这是知识工程的问题。因为“合规”是一个业务语义,需要概念定义和规则表达。
场景与用途:各回各家,各找各妈
软件工程适合做什么?业务规则明确、流程固定、功能可穷尽的事情。比如ERP、MES、银行交易系统、电商订单系统、移动App。它的用途是固化流程、自动化操作、保证性能与数据一致。在这些系统里,你不需要机器理解“风险”的含义,只需要它按照字段和逻辑正确计算。
知识工程适合做什么?问题需要专家判断、跨源口径、复杂关系、可解释推理的领域。
举一些例子。
医疗领域。药品不良反应监测,需要判断“这个案例属于已知不良事件还是新信号”。这依赖药物成分、适应症、不良反应、患者人群这些概念之间的关系,以及证据等级规则。纯软件工程只能做一个查询系统,做不了判定。
金融领域。反洗钱可疑交易识别。枚举规则可以写,但更多时候需要穿透复杂的持股关系和交易链路,判断是否存在利益输送。这需要把企业知识、人物关系、交易模式建模成可推理的知识结构。
采购供应链。某港口封港,哪些PO会延误?哪些成品的交付会受影响?需不需要启动备选供应商?这个问题依赖“供应商—物料—BOM—产品”的语义关系和一系列风险规则。没有本体和规则,AI只能从文档里找出“港口封港”这段文字,然后束手无策。
大模型出现后,知识工程的用途进一步扩大。RAG让模型先检索再回答,减少幻觉。本体提供口径,防止“你说的是A我说的是B”。规则引擎做硬性判定,不让模型自由发挥。评测集做回归,让系统越用越稳。知识工程已经变成AI工程的内核之一。
软件工程则继续承载AI系统的运行底座。训练平台、推理服务、API网关、权限管理、日志监控、自动回滚,一个都离不开它。
相同点:它们都是工程
说了这么多区别,别忘了它们共享的本质。
它们都是工程。不是艺术,不是手感,不是天才火花的产物。工程意味着有流程,有标准,有评审,有门禁。
它们都强调可追溯。软件工程要求需求可追溯,代码可追溯,缺陷可追溯。知识工程要求概念可追溯,规则可追溯,结论可追溯。不然出了问题,连查都无从查起。
它们都重视测试。软件工程有单元测试、集成测试、回归测试。知识工程有逻辑一致性检查、规则覆盖矩阵、黄金用例回归。本质上都是同一件事:防止改坏已有能力。
它们都需要持续运维。软件不运维就会腐化,版本不更新就出事。知识不维护也会腐化,规则不更新就会过时。上线不是终点,是新的起点。
这四条,让两个学科成为共同体。
差异:一张表看清实质
维度 | 软件工程 | 知识工程 |
|---|---|---|
诞生背景 | 软件危机、大型项目失控 | 专家知识瓶颈、AI系统不智能 |
核心对象 | 需求、功能流程、代码 | 概念、事实、关系、规则、本体 |
主要产出 | 可运行软件与服务 | 知识库、规则集、本体、推理服务 |
质量指标 | 正确性、性能、可用性、可维护性 | 一致性、覆盖率、可解释性、误报率 |
变化节奏 | 功能版本迭代 | 概念稳定、规则随业务变、事实高频变 |
不确定性 | 用异常处理、状态机、测试兜底 | 用约束、置信度、人工复核、黄金回归 |
与AI的关系 | 创建模型运行与调用的底座 | 赋予业务语义、约束判断、减少幻觉 |
这张表的核心,在“变化节奏”这一行。
软件工程面向的功能需求,可以按版本稳定一段时间。知识工程里的概念基本不变,规则跟随政策调整,事实则每秒都在发生。处理变化的方式不同,决定了方法论的分道扬镳。
软件工程遵循“需求变更走管理流程”。知识工程遵循“事实更新走数据管道,规则更新走评审,概念更新走本体治理”。差别不在有没有流程,而在每一层的变化频率相差几个数量级。
还有一点很关键。软件工程里的“需求”是外部输入的,用户说想要什么,就做什么。知识工程里的“需求”往往藏在业务专家的大脑里,你连问什么都不知道。软件需求的难点在于“确认”,知识需求的难点是“发现”。
AI时代:两个工程必须叠起来用
现在我们已经到达最现实的问题:AI项目里,软件工程和知识工程怎么分工?
一个生产级企业AI系统,通常分五层。
软件工程层。任务是提供可靠底座。包括系统架构、API服务、权限认证、日志监控、持续集成、灰度发布。这一层出问题,系统直接宕机或者安全漏洞。它决定稳定。
数据工程层。任务是采集、清洗、存储、对齐。结构化数据进数据仓库,非结构化文档进向量库。主数据、元数据在这里管理。这一层决定输入质量。
知识工程层。任务是构建语义上下文。包括叙词表统一术语、本体定义概念、规则表达业务约束、图谱承载复杂关系、黄金用例做功能回归。这一层决定AI是否“懂行”。
模型工程层。任务模型选择、微调、Prompt设计、RAG编排。让大模型的生成能力适配具体任务。
Agent与业务流程层。把模型能力封装成可执行的动作,调用工具,发起审批,写回业务系统。同时记录决策依据。
这五层里,知识工程层是很多企业最陌生的。他们以为建了个向量库就是知识工程,买了套大模型就是AI落地。结果系统流畅但不可靠,答得漂亮但不敢用。为什么?因为知识没有经过建模,没有规则约束,没有口径统一,没有一致性验证。而软件的运行底座再稳,也只能保证它“稳定地胡说八道”。
大白话总结
软件工程是AI时代的钢筋混凝土。没有它,AI落不了地。
知识工程是AI时代的神经系统。没有它,AI只是一个大而不当的计算器。
一个管身体,一个管灵魂。
不要用做软件工程的思路去糊弄知识工程,也不要用知识工程替代软件工程。它们从来不是二选一,而是一前一后叠起来用。先让系统稳定地跑,再让AI真正地懂。这才是AI时代的完整工程观。
如果你感觉写得好,请点击右上角,设为星标+关注+转发,谢谢!