第18章 Ability
本章大纲
- Ability 定义
- 能力类型
- 能力属性
- 能力方法
- 能力调用
- 能力组合
- 能力状态
- 能力更新
- Individual Ability
- Ability 实际案例
18.1 Ability 定义
**Ability(能力)**是 SAI Individual 对某类知识、资源、方法和 Engine 进行实际应用的能力描述。
简单来说:
Ability 定义 Individual 能做什么,以及在什么条件下能够做。
在 SAI Framework 中,Ability 不是一个简单的字符串列表,也不是一个 Engine 本身。
例如:
Ability
├── 感知能力
├── 认知能力
├── 记忆能力
├── 推理能力
├── 决策能力
├── 行为能力
└── 学习能力
可以理解为:
Engine = 怎么执行某类处理
Ability = Individual 是否具有应用这种处理的能力
例如:
ReasoningEngine
↓
提供推理处理机制
↓
Individual
↓
拥有 Reasoning Ability
↓
可以实际进行推理
因此:
Engine ≠ Ability
Engine 是处理机制,Ability 是 Individual 对这种机制的实际能力组织。
18.2 能力类型
SAI Framework 可以按照 Individual 的生命周期建立能力体系。
18.2.1 感知能力
负责从 Information 中识别和组织元素、对象、状态等。
例如:
Perception Ability
├── Object Perception
├── State Perception
├── Motion Perception
├── Environment Perception
└── Event Perception
例如:
输入:
Room.temperature = 32
Fan.state = OFF
Person.state = PRESENT
感知:
发现
├── 房间
├── 温度
├── 风扇
└── 人
18.2.2 认知能力
认知能力负责理解已经感知到的信息。
Elements
+
Objects
+
Properties
+
Relations
+
Facts
↓
Cognition
↓
Understanding
例如:
Temperature = 32
Room = occupied
Fan = OFF
经过认知后形成:
当前房间温度较高
房间有人
风扇当前没有运行
18.2.3 记忆能力
记忆能力负责保存和读取信息、事实、状态和经验。
Memory Ability
├── Remember
├── Recall
├── Search
├── Update
└── Forget
例如:
remember(
room01,
temperature=32
)
之后:
recall(room01)
可以得到以前保存的信息。
18.2.4 推理能力
推理能力负责利用事实、关系、规则和经验产生结论。
Facts
+
Relations
+
Rules
+
Experience
↓
Reasoning Ability
↓
Conclusion
例如:
IF temperature > 30
AND person = PRESENT
THEN room = HOT
推理结果:
room = HOT
18.2.5 决策能力
决策能力负责从多个可能行动中选择合适的行动。
Candidates
↓
Condition
↓
Risk
↓
Priority
↓
Decision
例如:
候选行为:
A:开启风扇
B:关闭风扇
C:保持当前状态
根据当前状态:
temperature = 32
person = PRESENT
fan = OFF
最终:
Decision = TURN_ON_FAN
18.2.6 行为能力
行为能力负责把 Decision 转换为实际 Action。
Decision
↓
Behavior
↓
Action
↓
Executor / Adapter
例如:
Decision
↓
TurnOnFan
↓
FanAction
↓
FanAdapter
↓
Fan ON
18.2.7 学习能力
学习能力负责从反馈和经验中获取新的知识资源,并更新 Individual 的能力或记忆。
Action
↓
Feedback
↓
Experience
↓
Learning
↓
Knowledge / Ability Update
↓
Memory Update
因此:
学习不是简单保存数据,而是使 Individual 后续能够更有效地应用已有或新获得的资源。
18.3 能力属性
Ability 本身也应该具有属性。
一个基础 Ability 可以描述为:
Ability
├── id
├── name
├── type
├── description
├── status
├── level
├── enabled
├── priority
└── metadata
例如:
id = ability.reasoning
name = Reasoning
type = cognition
description = 根据事实和规则进行推理
status = ready
level = 1
enabled = true
priority = 10
这些属性描述的是:
这个能力是什么?
是否可用?
当前处于什么状态?
能力等级如何?
调用优先级是多少?
18.4 能力方法
Ability 不仅描述属性,还可以拥有方法。
例如:
<?php
namespace SAI\Individual;
class Ability
{
protected $id;
protected $name;
protected $type;
protected $enabled = true;
public function __construct($id, $name, $type)
{
$this->id = $id;
$this->name = $name;
$this->type = $type;
}
public function enable()
{
$this->enabled = true;
}
public function disable()
{
$this->enabled = false;
}
public function isEnabled()
{
return $this->enabled;
}
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function getType()
{
return $this->type;
}
}
这个 Ability 类主要负责描述:
ID
Name
Type
Enabled
真正的推理、记忆、决策等处理,则应该交给相应 Engine。
因此:
Ability
│
├── 属性
│
└── 能力描述
│
▼
Engine
│
▼
实际处理
18.5 能力调用
Individual 使用 Ability 时,并不是直接把所有处理逻辑写进 Individual。
更合理的方式是:
Individual
↓
Ability
↓
检查能力
↓
调用对应 Engine
↓
获得结果
例如:
$ability = $individual->getAbility('reasoning');
if ($ability && $ability->isEnabled()) {
$result = $reasoningEngine->process($facts);
}
运行过程:
Individual
↓
查找 Reasoning Ability
↓
Ability 可用
↓
ReasoningEngine
↓
处理 Facts / Rules
↓
Conclusion
这里有一个重要关系:
Individual 决定“我是否具有这种能力”
Engine 负责“具体怎么处理”
18.6 能力组合
一个 Individual 通常不是只有一个 Ability。
例如一个环境控制 Individual:
Individual
│
├── Perception Ability
├── Cognition Ability
├── Memory Ability
├── Reasoning Ability
├── Decision Ability
├── Behavior Ability
└── Learning Ability
这些能力可以组合起来形成完整运行能力。
例如:
感知能力
↓
认知能力
↓
记忆能力
↓
推理能力
↓
决策能力
↓
行为能力
↓
学习能力
形成:
Information
↓
Perception Ability
↓
Cognition Ability
↓
Memory Ability
↓
Reasoning Ability
↓
Decision Ability
↓
Behavior Ability
↓
Feedback
↓
Learning Ability
因此:
Individual 的智能表现不是来自某一个 Ability,而是多个 Ability 按照关系和生命周期组合产生的。
18.7 能力状态
Ability 本身也可能存在状态。
例如:
Ability State
├── unavailable
├── disabled
├── ready
├── running
├── blocked
├── failed
└── updating
例如:
Reasoning Ability
status = ready
调用之后:
ready
↓
running
↓
completed
↓
ready
如果出现错误:
ready
↓
running
↓
failed
也可以通过维护机制进行:
failed
↓
Detection
↓
Diagnosis
↓
Repair
↓
Verification
↓
ready
这说明 Ability 与 Individual State 之间存在联系,但二者不能混为一谈。
Individual State
↓
描述 Individual 当前状态
Ability State
↓
描述某一个能力当前状态
18.8 能力更新
Ability 并不是永远固定不变。
在 SAI Framework 中,学习系统可以根据反馈和经验更新 Ability。
基本过程:
Behavior
↓
Action
↓
Feedback
↓
Experience
↓
Learning
↓
Ability Update
例如:
原能力:
Reasoning Ability
level = 1
经过学习后,可以形成:
Reasoning Ability
level = 2
或者增加新的能力配置:
Reasoning Ability
├── temperature_rule
├── occupancy_rule
└── device_state_rule
也可以更新能力状态:
disabled
↓
updated
↓
verified
↓
enabled
这里需要特别区分:
Learning
↓
产生更新结果
Ability
↓
保存并应用更新后的能力资源
学习不是 Ability 本身。
18.9 Individual Ability
Ability 最终需要归属于 Individual。
因此 Individual 可以拥有一个 Ability 集合:
Individual
│
├── Identity
├── State
├── Ability
│ ├── Perception
│ ├── Cognition
│ ├── Memory
│ ├── Reasoning
│ ├── Decision
│ ├── Behavior
│ └── Learning
├── Memory
├── Cognition
├── Learning
└── Behavior
可以设计一个 AbilityManager:
<?php
namespace SAI\Individual;
class AbilityManager
{
protected $abilities = array();
public function add(Ability $ability)
{
$this->abilities[$ability->getId()] = $ability;
}
public function get($id)
{
if (!isset($this->abilities[$id])) {
return null;
}
return $this->abilities[$id];
}
public function has($id)
{
return isset($this->abilities[$id]);
}
public function all()
{
return $this->abilities;
}
}
Individual:
<?php
namespace SAI\Individual;
class Individual
{
protected $id;
protected $abilityManager;
public function __construct($id)
{
$this->id = $id;
$this->abilityManager = new AbilityManager();
}
public function addAbility(Ability $ability)
{
$this->abilityManager->add($ability);
}
public function getAbility($id)
{
return $this->abilityManager->get($id);
}
public function getAbilities()
{
return $this->abilityManager->all();
}
}
创建 Individual:
$individual = new Individual('SAI-001');
$individual->addAbility(
new Ability(
'ability.perception',
'Perception',
'perception'
)
);
$individual->addAbility(
new Ability(
'ability.reasoning',
'Reasoning',
'reasoning'
)
);
$individual->addAbility(
new Ability(
'ability.decision',
'Decision',
'decision'
)
);
于是:
SAI-001
│
├── Perception Ability
├── Reasoning Ability
└── Decision Ability
以上 PHP 代码是本章的设计示例,用于说明 SAI Framework 的 OOP 结构,未作为实际项目代码执行验证。
18.10 Ability 实际案例
下面使用一个简单的“房间环境 Individual”说明 Ability 如何参与完整运行。
初始 Individual
Individual
ID = SAI-001
Name = Room Assistant
具有:
Ability
├── Perception
├── Cognition
├── Memory
├── Reasoning
├── Decision
├── Behavior
└── Learning
第一步:接收信息
传感器提供:
Room.temperature = 32
Person.state = PRESENT
Fan.state = OFF
进入:
Information
第二步:感知能力
Information
↓
Perception Ability
↓
PerceptionEngine
得到:
Object: Room
Property: temperature
Value: 32
Object: Person
State: PRESENT
Object: Fan
State: OFF
第三步:认知能力
Perception
↓
Cognition Ability
↓
CognitionEngine
形成:
房间温度较高
房间有人
风扇没有运行
第四步:记忆能力
Cognition
↓
Memory Ability
↓
MemoryEngine
查询历史经验:
temperature > 30
+
person present
+
fan off
过去曾经出现:
开启风扇
并取得良好结果。
第五步:推理能力
Facts
+
Rules
+
Memory
↓
Reasoning Ability
↓
ReasoningEngine
规则:
IF temperature > 30
AND person = PRESENT
AND fan = OFF
THEN
fan should be ON
得到:
Conclusion = Fan should turn on
第六步:决策能力
Conclusion
↓
Decision Ability
↓
DecisionEngine
候选行为:
1. TurnOnFan
2. KeepFanOff
最终:
Decision = TurnOnFan
第七步:行为能力
Decision
↓
Behavior Ability
↓
BehaviorEngine
↓
Action
形成:
Action = Fan.turnOn()
第八步:外部执行
Action
↓
Adapter
↓
Fan
↓
ON
设备状态变化:
Fan.state
OFF
↓
ON
第九步:反馈
设备或者环境再次提供信息:
temperature = 29
fan = ON
形成:
Feedback
第十步:学习能力
Feedback
↓
Experience
↓
Learning Ability
↓
LearningEngine
↓
Memory / Ability Update
形成新的经验:
场景:
temperature > 30
person = PRESENT
fan = OFF
行为:
TurnOnFan
结果:
temperature 32 → 29
Individual 将这次运行结果作为后续能力应用的资源。
Ability 的完整关系
本章可以把 Ability 总结成下面的结构:
Individual
│
Ability
│
┌────────────────┼────────────────┐
│ │ │
Perception Cognition Memory
│ │ │
└────────────────┼────────────────┘
│
Reasoning
│
Decision
│
Behavior
│
Action
│
External World
│
Feedback
│
Learning
│
Ability Update
│
└──────→ Individual
因此,Ability 在 SAI Framework 中处于一个非常重要的位置:
Engine
↓
提供处理机制
Ability
↓
组织 Individual 能够应用的处理能力
Individual
↓
组合多个 Ability
Central
↓
协调这些 Ability 的运行
External World
↓
产生反馈
Learning
↓
更新 Ability / Memory
本章小结
Ability 的核心不是“列出几个功能名称”,而是建立 Individual 与 Engine、Memory、Learning、Behavior 之间的能力关系。
核心关系可以概括为:
Ability = Individual 可应用的能力资源
进一步:
Engine = 怎么处理
Ability = 能做什么
Individual = 谁拥有这些能力
Central = 如何协调这些能力
Learning = 如何更新这些能力
因此:
Individual
│
├── Identity → 我是谁
├── State → 我现在怎么样
├── Ability → 我能做什么
├── Memory → 我记住了什么
├── Cognition → 我如何理解
├── Learning → 我如何更新
└── Behavior → 我如何行动
到这里,Identity、State、Ability 已经形成 Individual 的三个基础结构:
Identity
↓
我是谁
State
↓
我现在怎么样
Ability
↓
我能做什么
这三个部分共同构成了后续 Memory、Cognition、Learning、Behavior 等系统进入 Individual 的基础。