第167章 Knowledge类
167.1 提出背景
在第162章至第166章中,ICAI已经建立了完整的对象结构基础。
Object用于描述对象:
Object
Attribute用于描述对象特征:
Object → Attribute
State用于描述对象当前状态:
Object → State
Relation用于描述对象之间的连接:
Subject → Relation → Object
Scene进一步将多个对象及其关系组织成整体结构:
Scene
├── Objects
├── Relations
├── State
└── Conditions
但是,到这一层仍然存在一个重要问题:
系统已经能够保存对象、属性、状态、关系和场景,那么这些结构如何形成可以被保存、调用、判断、验证和更新的知识?
例如系统获得:
Object A = 杯子
Object B = 水
Relation = 装有
于是形成:
杯子 → 装有 → 水
如果这个结构经过确认并被系统保存,那么它就不再只是当前场景中的一个瞬时关系,而可以成为系统能够再次使用的Knowledge。
因此,需要建立Knowledge类。
Knowledge,中文称为“知识”,是对对象、属性、状态、关系、场景以及其他结构化信息进行组织后形成的、能够被系统保存、调用、判断和更新的认知对象。
Knowledge的基本结构为:
Knowledge
├── Knowledge Type
├── Knowledge Relation
├── Knowledge State
└── Knowledge Update
其基本运行过程为:
Object / Relation / Scene
↓
Knowledge
↓
Knowledge Type
↓
Knowledge Relation
↓
Knowledge State
↓
Knowledge Update
因此,Knowledge不是简单的数据存储,而是ICAI内部可运行的结构化认知对象。
167.2 Knowledge的概念定义
Knowledge是由一个或多个结构化认知元素组成,并能够被系统保存、检索、判断、使用和更新的信息结构。
可以定义为:
K=(X,T,R,S,U)K=(X,T,R,S,U)
其中:
- KK:Knowledge,知识对象;
- XX:Knowledge Content,知识内容;
- TT:Knowledge Type,知识类型;
- RR:Knowledge Relation,知识关系;
- SS:Knowledge State,知识状态;
- UU:Knowledge Update,知识更新。
因此:
Knowledge
=
Content
+
Type
+
Relation
+
State
+
Update
知识的核心并不是“保存一段文字”,而是:
保存一个可以被系统理解为结构、关系、状态和条件的认知对象。
例如:
Knowledge
{
Subject: 杯子,
Relation: 装有,
Object: 水
}
其核心结构仍然是:
杯子 → 装有 → 水
因此Knowledge可以来源于Object、Relation和Scene,也可以进一步形成独立的Knowledge对象。
167.3 Knowledge与Information的区别
Information,中文称为“信息”,主要表示系统接收到的内容。
Knowledge则表示经过对象化、结构化和关系化处理后,可以参与系统运行的认知结构。
例如:
信息:
“桌子上有一个杯子。”
经过结构化以后,可以形成:
Object A = 桌子
Object B = 杯子
Relation = 位于
形成:
杯子 → 位于 → 桌子
进一步保存为Knowledge:
Knowledge
{
Subject: 杯子,
Relation: 位于,
Object: 桌子
}
因此:
Information
↓
Structure
↓
Knowledge
Knowledge的工程意义在于:
信息被转换为系统能够长期保存和重复使用的结构。
167.4 Knowledge Type
Knowledge Type是知识对象的类型。
不同Knowledge承担不同的认知作用,因此不能全部使用同一种类型。
例如:
fact
rule
relation
state
scene
experience
definition
condition
都可以作为Knowledge Type。
例如:
Knowledge Type = fact
表示事实知识。
例如:
Knowledge Type = rule
表示规则知识。
例如:
Knowledge Type = state
表示状态知识。
因此:
Knowledge
↓
Knowledge Type
↓
确定知识的结构和处理方式
167.5 Fact Knowledge
Fact Knowledge,中文称为事实知识,用于描述已经被系统记录的事实结构。
例如:
杯子 → 位于 → 桌子
可以建立:
Knowledge Type = fact
其结构为:
Subject = 杯子
Relation = 位于
Object = 桌子
形成:
Kfact=(S,R,O)K_{fact}=(S,R,O)
事实知识主要回答:
当前系统知道什么事实?
例如:
人A → 使用 → 手机B
手机B → 连接 → 网络C
都可以成为Fact Knowledge。
167.6 Rule Knowledge
Rule Knowledge,中文称为规则知识,用于描述:
当某些条件成立时,可以进行什么判断或产生什么结果。
例如:
如果杯子中有水
且人拿着杯子
则可以判断为饮水准备状态
可以结构化为:
Condition 1
AND
Condition 2
↓
Rule
↓
Result
因此Rule Knowledge不是普通事实,而是:
条件
→
规则
→
结果
这类知识将在后续Method、Behavior和Decision工程中发挥重要作用。
167.7 Knowledge Relation
Knowledge Relation表示知识对象之间的结构关系。
Knowledge自身也不是孤立存在的。
例如:
Knowledge A:
杯子 → 装有 → 水
Knowledge B:
人 → 拿着 → 杯子
两个Knowledge之间可以形成:
Knowledge A
↓
supports
↓
Knowledge B
或者:
Knowledge A
↓
depends_on
↓
Knowledge B
因此Knowledge之间同样可以建立关系网络。
167.8 Knowledge Relation与Object Relation的区别
Object Relation:
Object A → Relation → Object B
描述的是现实对象之间的关系。
Knowledge Relation:
Knowledge A → Relation → Knowledge B
描述的是知识结构之间的关系。
例如:
Object Relation:
杯子 → 位于 → 桌子
而:
Knowledge Relation:
“杯子位于桌子”
↓
支持
↓
“杯子可以从桌子上拿起”
因此:
Object Relation
=
对象之间的关系
Knowledge Relation
=
知识之间的关系
二者不能混为一谈。
167.9 Knowledge State
Knowledge State是知识对象当前所处的状态。
知识不是永久固定的。
一条Knowledge可能处于:
unknown
active
verified
unverified
changed
obsolete
invalid
等状态。
例如刚刚获得的知识:
Knowledge State = unknown
经过系统确认以后:
Knowledge State = verified
如果后来发现知识已经发生变化:
verified
↓
changed
如果知识不再适用:
changed
↓
obsolete
因此:
Knowledge
↓
Knowledge State
↓
描述知识当前是否有效以及处于什么阶段
167.10 Knowledge State与事实状态的区别
必须区分:
Object State
Relation State
Scene State
和:
Knowledge State
例如:
杯子状态 = 完整
表示Object State。
杯子 → 位于 → 桌子
Relation State = active
表示Relation State。
喝水场景 = 进行中
表示Scene State。
而:
Knowledge:
杯子 → 位于 → 桌子
Knowledge State = verified
表示系统当前认为这条知识已经被确认。
因此:
Object State
→ 对象状态
Relation State
→ 关系状态
Scene State
→ 场景状态
Knowledge State
→ 知识状态
这是四个不同的工程层次。
167.11 Knowledge Update
Knowledge Update表示知识内容发生变化时,对Knowledge对象进行更新。
例如原知识:
杯子 → 位于 → 桌子A
后来发现杯子已经被移动到桌子B:
杯子 → 位于 → 桌子B
因此Knowledge发生变化。
其过程为:
Old Knowledge
↓
Change Detection
↓
Knowledge Update
↓
New Knowledge
形式化表示:
Kold→Update→KnewK_{old}\rightarrow Update\rightarrow K_{new}
例如:
K1:
杯子 → 位于 → 桌子A
↓ Update
K2:
杯子 → 位于 → 桌子B
原Knowledge不能简单被物理删除,因为旧知识本身可能属于历史记录。
因此更新应同时考虑:
Current Knowledge
+
Knowledge History
167.12 Knowledge Update的原因
Knowledge Update可能由多种原因触发。
例如:
新对象发现
状态变化
关系变化
场景变化
条件变化
新事实进入
旧事实失效
知识验证
知识修正
统一表示为:
New Information
↓
Comparison
↓
Knowledge Change
↓
Knowledge Update
其中Comparison负责比较旧结构与新结构。
例如:
旧:
杯子 → 位于 → 桌子A
新:
杯子 → 位于 → 桌子B
比较:
Subject相同
Relation相同
Object不同
于是确定:
Knowledge Changed = true
再执行Update。
167.13 Knowledge的PHP OOP实现
按照前面各类的工程化设计,Knowledge也应该成为独立PHP类。
基础实现:
class Knowledge
{
protected $content;
protected $type;
protected $relations = array();
protected $state;
protected $history = array();
public function __construct($content, $type)
{
$this->content = $content;
$this->type = $type;
$this->state = 'unknown';
$this->recordHistory();
}
public function getContent()
{
return $this->content;
}
public function getType()
{
return $this->type;
}
public function getState()
{
return $this->state;
}
public function setState($state)
{
$this->state = $state;
$this->recordHistory();
}
public function addRelation($relation)
{
$this->relations[] = $relation;
}
public function getRelations()
{
return $this->relations;
}
protected function recordHistory()
{
$this->history[] = array(
'content' => $this->content,
'type' => $this->type,
'state' => $this->state,
'time' => time()
);
}
public function getHistory()
{
return $this->history;
}
}
该类已经形成:
Knowledge
├── Content
├── Type
├── Relations
├── State
└── History
167.14 Knowledge Update方法
进一步增加Knowledge更新能力:
public function update($content, $type = null)
{
$this->content = $content;
if ($type !== null) {
$this->type = $type;
}
$this->state = 'changed';
$this->recordHistory();
}
于是:
旧Knowledge
↓
update()
↓
新Knowledge
例如:
$knowledge = new Knowledge(
'杯子位于桌子A',
'fact'
);
$knowledge->update(
'杯子位于桌子B'
);
更新以后:
Knowledge Content
=
杯子位于桌子B
Knowledge State
=
changed
167.15 Knowledge验证
Knowledge需要能够被验证。
可以增加:
public function verify()
{
$this->state = 'verified';
$this->recordHistory();
}
运行过程:
Knowledge
↓
Verification
↓
verified
例如:
$knowledge->verify();
知识状态从:
unknown
变为:
verified
这样Knowledge就具有状态生命周期。
167.16 Knowledge生命周期
Knowledge的基本生命周期可以表示为:
Knowledge发现
↓
Knowledge创建
↓
Knowledge解析
↓
Knowledge结构化
↓
Knowledge验证
↓
Knowledge使用
↓
Knowledge变化检测
↓
Knowledge Update
↓
Knowledge重新验证
↓
Knowledge继续使用
↓
Knowledge失效
形式化表示:
Knew→Verify→Active→Change→Update→Verify→ActiveK_{new} \rightarrow Verify \rightarrow Active \rightarrow Change \rightarrow Update \rightarrow Verify \rightarrow Active
如果知识失效:
Active
↓
Invalid
因此Knowledge是具有生命周期的认知对象。
167.17 Knowledge与Object
Knowledge可以描述Object。
例如:
Object:
杯子
其属性:
颜色 = 白色
材质 = 陶瓷
这些结构可以形成Knowledge:
Knowledge A:
杯子颜色是白色
Knowledge B:
杯子材质是陶瓷
因此:
Object
↓
Attribute
↓
Knowledge
但是Knowledge不等于Object。
Object是被认知和操作的对象。
Knowledge是系统保存和使用的结构化认知内容。
167.18 Knowledge与Relation
Relation可以直接形成Knowledge。
例如:
杯子 → 位于 → 桌子
这是一个Relation。
当系统将其作为可以保存、验证和再次调用的事实结构时:
Relation
↓
Knowledge
形成:
Knowledge Type = fact
因此:
Relation
=
当前对象关系结构
Knowledge
=
可以被系统保存、使用和更新的结构化知识
同一个结构可以同时具有Relation层和Knowledge层的工程表达。
167.19 Knowledge与Scene
Scene可以产生场景知识。
例如:
Scene:
人正在喝水
其中包含:
人
杯子
水
桌子
以及:
人 → 拿着 → 杯子
杯子 → 装有 → 水
杯子 → 位于 → 桌子
如果这个场景结构被系统保存:
Scene
↓
Knowledge
可以形成:
Knowledge Type = scene
于是:
Scene Knowledge
成为系统可以再次使用的结构。
167.20 Knowledge与经验
Knowledge和Experience虽然存在联系,但不是同一个对象。
Knowledge主要回答:
系统知道什么?
Experience主要回答:
系统过去发生过什么,以及从过去过程中获得了什么结构?
例如:
Knowledge:
杯子可以装水。
而Experience可能记录:
过去执行取杯
→ 拿起杯子
→ 杯子没有破损
→ 成功装水
于是:
Experience
↓
结构提取
↓
Knowledge
因此Knowledge可以成为Experience学习后的稳定结构之一。
167.21 Knowledge Relation Network
当Knowledge数量增加以后,可以形成Knowledge Relation Network。
例如:
Knowledge A
杯子 → 装有 → 水
与:
Knowledge B
人 → 拿着 → 杯子
建立:
Knowledge A
↑
depends_on
↑
Knowledge B
再与:
Knowledge C
人正在喝水
建立:
Knowledge A
↓
supports
↓
Knowledge C
Knowledge B
↓
supports
↓
Knowledge C
于是:
Knowledge
↓
Knowledge Relations
↓
Knowledge Network
知识不再是孤立记录,而成为可以进行结构匹配的知识网络。
167.22 Knowledge状态更新模型
Knowledge运行过程中可以建立如下更新模型:
Current Knowledge
↓
New Information
↓
Comparison
↓
No Change ─────────→ Keep
↓
Change
↓
Knowledge Update
↓
State = changed
↓
Verification
↓
State = verified
因此:
Kcurrent+Inew→Compare→Update→VerifyK_{current}+I_{new} \rightarrow Compare \rightarrow Update \rightarrow Verify
其中:
- KcurrentK_{current}:当前知识;
- InewI_{new}:新信息;
- Compare:结构比较;
- Update:知识更新;
- Verify:知识验证。
167.23 Knowledge在ICAI中的位置
经过第162~167章,ICAI的核心对象链进一步扩展。
Individual
↓
Object
↓
Attribute
↓
State
↓
Relation
↓
Scene
↓
Knowledge
其中:
Object
→ 对象
Attribute
→ 对象特征
State
→ 对象状态
Relation
→ 对象关系
Scene
→ 对象关系形成的整体结构
Knowledge
→ 可以被系统保存、验证、调用和更新的结构化认知内容
因此Knowledge位于对象结构与认知结构之间的重要位置。
167.24 Knowledge的工程架构
在PHP OOP系统中,可以形成如下结构:
Knowledge
├── Knowledge Content
├── Knowledge Type
├── Knowledge Relations
├── Knowledge State
└── Knowledge History
外围可以建立:
KnowledgeManager
KnowledgeRepository
KnowledgeValidator
KnowledgeUpdater
KnowledgeMatcher
其中:
KnowledgeManager负责Knowledge对象管理。
KnowledgeRepository负责Knowledge持久化。
KnowledgeValidator负责知识状态验证。
KnowledgeUpdater负责知识更新。
KnowledgeMatcher负责知识结构之间的匹配。
这样Knowledge类就可以从单一对象进一步进入完整工程模块。
167.25 Knowledge Manager
可以建立基本的KnowledgeManager:
class KnowledgeManager
{
protected $knowledge = array();
public function addKnowledge(Knowledge $knowledge)
{
$this->knowledge[] = $knowledge;
}
public function getKnowledge()
{
return $this->knowledge;
}
public function count()
{
return count($this->knowledge);
}
}
运行结构为:
KnowledgeManager
↓
Knowledge Collection
↓
Knowledge
这样系统可以管理多个Knowledge对象。
167.26 Knowledge与数据库
当Knowledge需要长期保存时,可以映射到数据库。
例如建立:
knowledge
表。
基本字段可以包括:
id
knowledge_type
content
state
created_at
updated_at
如果Knowledge具有Subject、Relation、Object结构,还可以进一步保存:
subject_id
relation_type
object_id
于是数据库层可以表达:
Knowledge
├── Subject
├── Relation
├── Object
├── Type
├── State
└── Time
PHP Object层负责运行。
MySQL负责持久化。
形成:
PHP Knowledge Object
↓
Knowledge Repository
↓
MySQL
这使Knowledge真正进入可运行的软件工程结构。
167.27 Knowledge的认知运行链
Knowledge的完整认知运行链可以表示为:
Information
↓
Object
↓
Attribute
↓
Relation
↓
Scene
↓
Knowledge
↓
Knowledge Type
↓
Knowledge Relation
↓
Knowledge State
↓
Knowledge Update
↓
Knowledge Network
其中:
Information
是输入结构;
Object
是对象结构;
Relation
是关系结构;
Scene
是整体场景结构;
Knowledge
是可保存和使用的结构化认知结构。
167.28 Knowledge与认知决策
Knowledge最终需要进入认知运行过程。
例如:
Knowledge:
杯子中有水
Knowledge:
人手中有杯子
系统进行结构匹配:
Knowledge A
+
Knowledge B
↓
Condition
↓
Method
↓
Behavior
于是Knowledge成为后续Method和Behavior执行的重要依据。
其运行链为:
Knowledge
↓
Knowledge Matching
↓
Condition
↓
Method
↓
Behavior
↓
State Change
↓
New Knowledge
这形成知识驱动的对象运行闭环。
167.29 Knowledge Update与学习
Knowledge Update也是学习过程的重要工程基础。
当系统发现:
旧Knowledge
与:
新Information
不一致时:
Old Knowledge
+
New Information
↓
Comparison
↓
Difference
↓
Knowledge Update
例如:
旧知识:
杯子位于桌子A
新信息:
杯子位于桌子B
系统比较以后发现:
Object相同
Relation相同
Target Object不同
于是:
Knowledge Changed
↓
Update
↓
New Knowledge
这使学习不再只是增加数据,而成为:
对已有认知结构进行比较、修正和更新的过程。
167.30 本章总结
Knowledge类是ICAI从对象结构进入知识结构的重要基础类。
其核心模型为:
K=(X,T,R,S,U)K=(X,T,R,S,U)
其中:
- XX:Knowledge Content,知识内容;
- TT:Knowledge Type,知识类型;
- RR:Knowledge Relation,知识关系;
- SS:Knowledge State,知识状态;
- UU:Knowledge Update,知识更新。
因此:
Knowledge
├── Content
├── Type
├── Relation
├── State
└── Update
Knowledge的核心运行过程为:
Information
→ Structure
→ Knowledge
→ Verification
→ Usage
→ Change Detection
→ Update
→ Verification
从对象工程角度看:
Object
→ Attribute
→ State
→ Relation
→ Scene
→ Knowledge
形成了从对象到对象关系、从对象关系到场景结构、再从场景结构到可保存认知结构的连续工程链。
Knowledge并不是简单的信息存储,也不是普通文本集合,而是能够被系统作为对象进行:
创建
保存
验证
调用
匹配
判断
更新
的一种结构化认知对象。
因此,第167章建立的核心关系是:
Object
↓
Relation
↓
Scene
↓
Knowledge
↓
Knowledge State
↓
Knowledge Update
至此,ICAI已经从“对象工程”进一步进入“知识对象工程”,为后续的Knowledge Matching、Method、Behavior以及认知运行过程提供了直接的软件对象基础。