第13章 Model
本章大纲
- Model 定义
- Web Model
- SAI Model
- Element Model
- Object Model
- Property Model
- Relation Model
- State Model
- Memory Model
- Experience Model
- Model 与 Engine
- Model 实际案例
13.1 Model 定义
在软件框架中,Model主要负责对系统中的数据、对象及其状态进行组织、描述、读取、保存和管理。
在 SAI Framework 中,Model 不是“智能本身”,也不是 Cognition、Reasoning 或 Decision。
它主要解决的是:
数据是什么
↓
数据如何描述
↓
数据之间有什么关系
↓
数据当前是什么状态
↓
数据如何读取
↓
数据如何保存
因此可以定义:
SAI Model 是用于描述、组织、读取、保存和管理 SAI 内部对象、元素、属性、关系、状态、记忆和经验等数据资源的软件层。
Model 的核心职责可以表示为:
定义
↓
组织
↓
读取
↓
修改
↓
保存
↓
提供给 Engine
例如:
Object Model
↓
提供对象数据
↓
Object Engine
↓
对象处理
Model 提供数据,Engine 使用数据执行处理。
13.2 Web Model
在传统 Web Framework 中,Model 通常处于 MVC 的 **M(Model)**层。
典型结构:
Request
↓
Controller
↓
Model
↓
Database
↓
Model
↓
Controller
↓
View
↓
Response
例如一个用户系统:
User
├── id
├── name
├── email
└── status
Model 可以负责:
查询 User
创建 User
修改 User
删除 User
保存 User
因此 Web Model 通常更加关注:
数据
数据库
持久化
业务数据
但是 SAI Framework 中的 Model 范围更广。
13.3 SAI Model
SAI Model 不只是数据库 Model。
SAI 中存在大量需要被描述和管理的内部资源:
Element
Object
Property
Relation
State
Fact
Memory
Experience
因此可以形成:
SAI Model
│
├── Element Model
├── Object Model
├── Property Model
├── Relation Model
├── State Model
├── Memory Model
└── Experience Model
这些 Model 负责描述不同类型的数据。
例如:
Object Model
│
├── Object ID
├── Object Type
├── Properties
├── State
└── Relations
然后由相应 Engine 对这些数据进行处理。
核心关系:
Model
↓
数据与结构
↓
Engine
↓
计算与处理
所以:
Model 负责“有什么”,Engine 负责“怎么处理”。
13.4 Element Model
Element 是 SAI 中的基础信息元素。
例如:
temperature
32
fan
ON
room
这些信息经过组织之后,可以成为 Element。
Element Model 可以描述:
Element
├── id
├── type
├── name
├── value
├── source
└── time
PHP OOP 示例:
<?php
namespace SAI\Model;
class ElementModel
{
protected $data = array();
public function create($id, $type, $value)
{
$this->data[$id] = array(
'id' => $id,
'type' => $type,
'value' => $value
);
return $this->data[$id];
}
public function get($id)
{
return isset($this->data[$id])
? $this->data[$id]
: null;
}
}
这里 Model 只是负责保存和读取 Element 数据。
它本身并不进行认知。
13.5 Object Model
Element 可以进一步组织成为 Object。
例如:
Element
├── fan
├── speed
├── state
└── room
经过对象组织:
Fan
├── id = fan01
├── speed = 3
├── state = OFF
└── location = room01
Object Model 可以负责:
创建对象
读取对象
修改对象
保存对象
删除对象
结构:
Object Model
│
├── Identity
├── Property
├── State
├── Method
└── Relation
因此 Object Model 是 SAI 对象数据的主要管理层之一。
13.6 Property Model
Property 描述 Object 的特征。
例如:
Fan
├── speed = 3
├── state = ON
├── power = 50W
└── location = room01
其中:
speed
state
power
location
都是 Property。
Property Model 可以表示:
<?php
namespace SAI\Model;
class PropertyModel
{
protected $properties = array();
public function set($objectId, $name, $value)
{
$this->properties[$objectId][$name] = $value;
}
public function get($objectId, $name)
{
if (!isset($this->properties[$objectId])) {
return null;
}
if (!isset($this->properties[$objectId][$name])) {
return null;
}
return $this->properties[$objectId][$name];
}
}
例如:
$model->set('fan01', 'speed', 3);
$model->set('fan01', 'state', 'ON');
Model 保存:
fan01.speed = 3
fan01.state = ON
13.7 Relation Model
SAI 中的 Object 并不是孤立存在的。
Object 之间可以存在 Relation。
例如:
Person
│
└── located_in ──→ Room
或者:
Fan
│
└── located_in ──→ Room
Relation 可以采用:
Subject
Relation
Object
结构:
Person
│
│ located_in
↓
Room
Relation Model 负责保存这种关系:
<?php
namespace SAI\Model;
class RelationModel
{
protected $relations = array();
public function add($subject, $relation, $object)
{
$this->relations[] = array(
'subject' => $subject,
'relation' => $relation,
'object' => $object
);
}
public function all()
{
return $this->relations;
}
}
例如:
$model->add(
'fan01',
'located_in',
'room01'
);
形成:
fan01
↓
located_in
↓
room01
Relation Model 不负责推理。
它只是保存关系。
13.8 State Model
State 表示对象当前的动态状态。
例如:
Fan
state = OFF
执行:
turnOn()
之后:
Fan
state = ON
State Model 可以管理:
Object
↓
Current State
↓
State History
例如:
fan01
├── state = ON
├── speed = 3
└── updated_at = ...
状态非常重要,因为 SAI 的行为通常与状态有关。
例如:
IF
temperature > 30
AND
fan.state = OFF
THEN
fan.turnOn()
这里:
temperature
fan.state
都是推理所需要的状态或事实数据。
但执行判断的是 Reasoning / Decision 等 Engine,而不是 State Model。
13.9 Memory Model
Memory 是 SAI 的记忆机制。
Memory Model 则负责管理记忆数据。
可以包括:
Memory Model
│
├── Fact Memory
├── State Memory
├── Short Memory
├── Long Memory
└── Experience Memory
例如:
Fact
temperature = 32
或者:
State
fan = OFF
Memory Model 可以保存:
memory_id
type
content
source
time
state
示例:
<?php
namespace SAI\Model;
class MemoryModel
{
protected $memory = array();
public function remember($type, $content)
{
$this->memory[] = array(
'type' => $type,
'content' => $content,
'time' => time()
);
}
public function all()
{
return $this->memory;
}
}
这里要特别注意:
Memory Model 是记忆数据管理层,不等于完整的 Memory Engine。
Model 保存和读取记忆。
Memory Engine 则可以进一步执行:
存储
↓
索引
↓
检索
↓
匹配
↓
调用
13.10 Experience Model
Experience 是 SAI 对过去行为过程及其结果的记录和组织。
例如:
场景:
房间温度 32℃
风扇 OFF
行为:
打开风扇
结果:
温度下降
可以形成一条经验:
Experience
├── Scene
├── Condition
├── Behavior
├── Action
├── Result
└── Time
Experience Model 可以保存:
experience_id
scene
condition
action
result
time
例如:
$experienceModel->save(array(
'scene' => 'room01',
'condition' => 'temperature > 30',
'action' => 'fan.on',
'result' => 'temperature_decreased'
));
形成:
场景
↓
条件
↓
行为
↓
结果
↓
经验
后续 Learning Engine 可以使用这些经验进行学习和更新。
因此:
Experience Model
↓
保存经验
↓
Learning Engine
↓
经验处理
↓
Knowledge / Ability / Memory Update
13.11 Model 与 Engine
Model 和 Engine 是 SAI Framework 中两个非常重要但职责不同的部分。
最简单的区分:
Model = 数据
Engine = 处理
例如:
Object Model
↓
保存 Fan
↓
Object Engine
↓
处理 Fan
再例如:
Memory Model
↓
保存 Fact
↓
Memory Engine
↓
检索 Fact
又例如:
Experience Model
↓
保存 Experience
↓
Learning Engine
↓
分析 Experience
可以形成:
Model
│
数据 / 对象 / 状态
│
▼
Engine
│
计算 / 判断 / 处理
│
▼
Result
Model 不应该承担所有智能功能。
例如不应该设计成:
Model
├── 读取数据
├── 推理
├── 决策
├── 学习
├── 行动
└── 控制设备
这样会导致 Model 职责过重。
更合理的是:
Model
↓
提供数据
↓
Engine
↓
处理数据
↓
Result
13.12 Model 实际案例
下面使用一个简单的房间风扇场景说明 SAI Model 如何工作。
说明:以下 PHP 代码是本教程的示例代码,用于说明 SAI Framework 的 Model 设计,并不代表当前已经实际创建或验证运行。
场景:
Room
temperature = 32
Person
state = PRESENT
Fan
state = OFF
首先使用 Object Model 保存对象:
$objectModel->create('room01', 'room');
$objectModel->create('person01', 'person');
$objectModel->create('fan01', 'fan');
Property Model 保存属性:
$propertyModel->set(
'room01',
'temperature',
32
);
$propertyModel->set(
'person01',
'state',
'PRESENT'
);
$propertyModel->set(
'fan01',
'state',
'OFF'
);
Relation Model 保存关系:
$relationModel->add(
'person01',
'located_in',
'room01'
);
$relationModel->add(
'fan01',
'located_in',
'room01'
);
此时 Model 层的数据可以理解为:
Room
├── temperature = 32
Person
├── state = PRESENT
└── located_in → Room
Fan
├── state = OFF
└── located_in → Room
然后交给 Engine:
Object Model
Property Model
Relation Model
State Model
│
▼
Cognition / Reasoning
│
▼
Decision
│
▼
Behavior
│
▼
fan.turnOn()
执行行为之后:
Fan
state = ON
State Model 更新:
OFF
↓
ON
随后外部环境发生变化:
temperature
32℃
↓
29℃
Feedback 进入 SAI:
Feedback
↓
Information
↓
Perception
↓
Memory
↓
Experience
Experience Model 保存:
Scene:
room01
Condition:
temperature > 30
Action:
fan.turnOn()
Result:
temperature decreased
最终形成一个完整的数据闭环:
Information
↓
Element Model
↓
Object Model
↓
Property Model
↓
Relation Model
↓
State Model
↓
Reasoning Engine
↓
Decision Engine
↓
Behavior Engine
↓
Action
↓
Feedback
↓
Memory Model
↓
Experience Model
↓
Learning Engine
↓
Model Update
本章小结
Model 是 SAI Framework 的数据与对象组织层,负责描述、保存、读取和管理系统中的各种数据资源。
核心 Model 可以表示为:
SAI Model
│
├── Element Model
├── Object Model
├── Property Model
├── Relation Model
├── State Model
├── Memory Model
└── Experience Model
Model 与 Engine 的关系:
Model
负责“有什么”
↓
Engine
负责“怎么处理”
因此,SAI Framework 中:
Model ≠ Intelligence
Model ≠ Cognition
Model ≠ Reasoning
Model ≠ Decision
Model ≠ Learning
Model 是 Individual 内部数据组织的重要基础,而真正的 SAI 运行机制需要由 Perception、Cognition、Memory、Reasoning、Decision、Behavior、Learning 等 Engine共同完成。