第268章 Scene API|场景 API
268.1 场景 API 的提出背景
在机器认知系统中,单独获得对象、属性、关系和状态,并不能直接形成完整的当前世界认知。
对象描述“有什么”,属性描述“对象具有哪些特征”,关系描述“对象之间如何连接”,状态描述“对象当前处于什么状态”。但是,机器还需要将这些信息按照当前时间、空间、环境和目标组织起来,形成一个可以被认知系统直接处理的整体结构。
因此,需要建立 Scene API|场景 API。
场景 API 是 ICAI 系统中负责场景数据创建、更新、查询、验证、历史记录和场景重构的标准接口。
其基本作用可以表示为:
Element
↓
Object
↓
Attribute
↓
Relation
↓
State
↓
Scene API
↓
Scene
↓
Cognition
Scene API 并不负责最终认知决策,而是负责将当前机器世界中的对象、属性、关系、状态以及环境信息组织成一个当前场景实例。
因此:
Scene API 是动态机器世界进入认知系统的重要结构接口。
268.2 Scene API 的定义
Scene API|场景 API,是用于管理机器当前场景结构的程序接口。
其主要职责包括:
- 创建场景;
- 获取场景;
- 更新场景;
- 删除场景;
- 查询场景;
- 添加对象;
- 移除对象;
- 更新场景关系;
- 更新场景状态;
- 重构动态场景;
- 验证场景结构;
- 保存场景历史;
- 发布场景变化事件;
- 将当前场景提供给认知引擎。
场景可以形式化表示为:
Sct=F(Ot,At,Rt,St,Et,Pt,Tt,Gt)Sc_t=F(O_t,A_t,R_t,S_t,E_t,P_t,T_t,G_t)
其中:
- SctSc_t:时间 tt 的当前场景;
- OtO_t:当前场景中的对象集合;
- AtA_t:对象属性集合;
- RtR_t:对象之间的关系集合;
- StS_t:对象状态集合;
- EtE_t:环境信息;
- PtP_t:空间位置信息;
- TtT_t:时间信息;
- GtG_t:当前目标;
- FF:场景构造函数。
因此,场景不是简单的对象集合。
Scene≠∑ObjectScene \neq \sum Object
而是:
Scene=F(Object,Attribute,Relation,State,Environment,Space,Time,Goal)Scene=F(Object,Attribute,Relation,State,Environment,Space,Time,Goal)
这意味着同样的对象,在不同关系、状态、位置和环境条件下,可以形成完全不同的场景。
268.3 场景是动态结构
ICAI 中的场景不是静态数据。
现实世界不断发生变化:
对象位置变化
↓
属性变化
↓
关系变化
↓
状态变化
↓
场景变化
↓
认知变化
例如,一个手、一个鸡蛋和一个桌面可能形成:
Scene₁
手 → 靠近 → 鸡蛋
鸡蛋 → 位于 → 桌面
手 → 未接触 → 鸡蛋
当手继续移动:
Scene₂
手 → 接近 → 鸡蛋
手 → 接触 → 鸡蛋
鸡蛋 → 位于 → 桌面
继续施加作用:
Scene₃
手 → 接触 → 鸡蛋
手 → 握持 → 鸡蛋
鸡蛋 → 脱离 → 桌面
因此:
Sct→Sct+1Sc_t \rightarrow Sc_{t+1}
场景变化不是简单地替换一份数据,而是当前世界结构发生变化后的重新构造。
268.4 场景 API 与对象 API 的关系
Object API 负责对象实例:
Object API
↓
Object Instance
Scene API 负责组织多个对象及其结构:
Object₁
Object₂
Object₃
↓
Relation
↓
State
↓
Environment
↓
Space
↓
Time
↓
Scene
因此,两者的职责不同。
对象 API 回答:
当前系统中有哪些对象?
场景 API 回答:
这些对象在当前时间、空间和环境中形成了什么结构?
可以表示为:
Object=EntityObject=Entity
而:
Scene=Structure(Object,Relation,State,Environment)Scene=Structure(Object,Relation,State,Environment)
所以,Scene API 并不是 Object API 的简单扩展,而是更高一级的结构组织接口。
268.5 场景 API 的核心数据结构
一个基本场景对象可以定义为:
Scene
{
id
name
type
goal
objects
relations
states
environment
position
timestamp
status
}
其中:
id:场景唯一标识;name:场景名称;type:场景类型;goal:当前场景目标;objects:场景对象集合;relations:场景关系集合;states:场景状态集合;environment:环境信息;position:空间信息;timestamp:场景时间;status:场景当前状态。
场景的核心不是名称,而是其内部结构。
因此可以进一步表示:
Sc=(O,R,S,E,P,T,G)Sc=(O,R,S,E,P,T,G)
其中:
O={O1,O2,⋯ ,On}O=\{O_1,O_2,\cdots,O_n\}
表示对象集合;
R={R1,R2,⋯ ,Rm}R=\{R_1,R_2,\cdots,R_m\}
表示关系集合;
S={S1,S2,⋯ ,Sk}S=\{S_1,S_2,\cdots,S_k\}
表示状态集合。
268.6 Scene API 的基本接口
Scene API 可以提供以下标准接口:
/api/scene/create
/api/scene/get
/api/scene/update
/api/scene/delete
/api/scene/list
/api/scene/query
/api/scene/current
/api/scene/history
/api/scene/rebuild
/api/scene/validate
也可以采用资源型接口:
/api/scenes
/api/scenes/{scene_id}
/api/scenes/{scene_id}/objects
/api/scenes/{scene_id}/relations
/api/scenes/{scene_id}/states
/api/scenes/{scene_id}/history
/api/scenes/{scene_id}/rebuild
其中:
create 用于创建场景;
get 用于获取指定场景;
update 用于更新场景;
delete 用于删除场景;
list 用于获取场景集合;
query 用于按照条件查询场景;
current 用于获得当前运行场景;
history 用于获得场景变化历史;
rebuild 用于根据最新对象结构重新构建场景;
validate 用于验证场景结构是否合法。
268.7 场景创建
场景创建可以来自外部数据,也可以来自 ICAI Runtime 内部的动态场景构造。
基本过程:
Real-Time Data
↓
Element
↓
Object
↓
Attribute
↓
Relation
↓
State
↓
Scene API
↓
Scene
场景创建函数可以表示为:
CreateScene(O,A,R,S,E,P,T,G)→ScCreateScene(O,A,R,S,E,P,T,G)\rightarrow Sc
其结果不是简单保存对象,而是建立对象之间的结构关系。
例如:
Object:
Hand
Egg
Table
Relation:
Hand → Near → Egg
Egg → On → Table
State:
Hand = Moving
Egg = Stable
Table = Stable
Environment:
Indoor
Goal:
Grasp Egg
Scene API 将这些数据组织为:
Scene
├── Goal
├── Objects
│ ├── Hand
│ ├── Egg
│ └── Table
├── Relations
│ ├── Hand-Near-Egg
│ └── Egg-On-Table
├── States
│ ├── Hand-Moving
│ ├── Egg-Stable
│ └── Table-Stable
├── Environment
├── Space
└── Time
由此形成一个完整的当前场景。
268.8 当前场景
ICAI 系统运行时,需要始终存在一个与当前世界状态对应的场景结构。
定义:
CurrentScene=SctCurrentScene=Sc_t
当新的实时数据进入系统:
Dt+1→Elementt+1D_{t+1}\rightarrow Element_{t+1}
进一步产生:
Objectt+1→Attributet+1→Relationt+1→Statet+1Object_{t+1} \rightarrow Attribute_{t+1} \rightarrow Relation_{t+1} \rightarrow State_{t+1}
最终:
Sct→Sct+1Sc_t\rightarrow Sc_{t+1}
因此,Current Scene 不是永久固定的数据,而是系统当前认知周期中的世界结构。
268.9 场景更新
场景更新可以由对象变化、属性变化、关系变化和状态变化触发。
例如:
Attribute Changed
↓
Relation Recalculation
↓
State Recalculation
↓
Scene Update
或者:
Object Added
↓
Scene Update
也可以:
Object Removed
↓
Relation Removed
↓
State Recalculation
↓
Scene Update
场景更新可以形式化为:
Sct+1=Update(Sct,ΔO,ΔA,ΔR,ΔS,ΔE)Sc_{t+1}=Update(Sc_t,\Delta O,\Delta A,\Delta R,\Delta S,\Delta E)
其中:
- ΔO\Delta O:对象变化;
- ΔA\Delta A:属性变化;
- ΔR\Delta R:关系变化;
- ΔS\Delta S:状态变化;
- ΔE\Delta E:环境变化。
268.10 场景重构
在复杂动态环境中,有时不能只修改场景中的某一个字段,而需要根据最新数据重新构建场景。
因此 Scene API 提供:
/api/scene/rebuild
其基本过程为:
Current Objects
+
Current Attributes
+
Current Relations
+
Current States
+
Current Environment
+
Current Space
+
Current Time
↓
Scene Builder
↓
New Scene
形式化:
Sct+1=Build(Ot+1,At+1,Rt+1,St+1,Et+1,Pt+1,Tt+1,Gt+1)Sc_{t+1}=Build(O_{t+1},A_{t+1},R_{t+1},S_{t+1},E_{t+1},P_{t+1},T_{t+1},G_{t+1})
场景重构具有重要意义。
它使系统不需要提前建立所有可能的场景,而是在运行过程中,根据当前世界数据形成当前场景。
因此:
世界变化
↓
重新获得数据
↓
重新构造结构
↓
形成当前场景
而不是:
提前枚举所有场景
↓
寻找最接近的固定场景
ICAI 的场景工程属于动态场景构造机制。
268.11 场景验证
Scene API 必须保证进入认知引擎的场景具有基本结构完整性。
定义:
Valid(Sc)=Valid(O)∧Valid(R)∧Valid(S)∧Valid(T)Valid(Sc)=Valid(O)\land Valid(R)\land Valid(S)\land Valid(T)
其中:
Valid(O):对象合法;Valid(R):关系合法;Valid(S):状态合法;Valid(T):时间合法。
进一步可以验证:
Object Exists
+
Relation Target Exists
+
State Object Exists
+
Timestamp Valid
+
Scene Structure Valid
↓
Valid Scene
例如:
Hand → Grasp → Egg
如果 Egg 不存在,则该关系不能进入有效场景。
因此:
Valid(R)⇒Valid(Os)∧Valid(Ot)Valid(R)\Rightarrow Valid(O_s)\land Valid(O_t)
其中:
- OsO_s:关系源对象;
- OtO_t:关系目标对象。
268.12 场景查询
Scene API 不仅提供完整场景,还应该支持结构化查询。
例如:
查询当前场景中的所有对象
查询当前场景中的移动对象
查询 Hand 与哪些对象存在关系
查询距离 Hand 最近的对象
查询当前处于 Stable 状态的对象
查询与当前目标相关的对象
查询可以表示为:
Query(Sc,C)→ResultQuery(Sc,C)\rightarrow Result
其中:
- ScSc:当前场景;
- CC:查询条件;
Result:满足条件的场景结构或对象集合。
例如:
Query(Sc, State=Moving)→{O1,O2,⋯ }Query(Sc,\ State=Moving) \rightarrow \{O_1,O_2,\cdots\}
因此 Scene API 可以成为认知引擎获取当前世界结构的重要入口。
268.13 场景与目标
场景并不是与目标完全独立的。
在机器认知过程中,同一个世界可以因为目标不同而产生不同的认知关注结构。
因此可以表示:
Sct=F(Ot,At,Rt,St,Et,Pt,Tt,Gt)Sc_t=F(O_t,A_t,R_t,S_t,E_t,P_t,T_t,G_t)
例如:
目标:抓取鸡蛋
系统重点关注:
Hand
Egg
Table
Hand-Egg Relation
Egg-Table Relation
Hand Position
Egg Position
Hand Movement
Egg Stability
如果目标改变为:
目标:移动桌面上的瓶子
场景中的关注结构也会发生变化。
因此,目标可以参与场景结构组织。
268.14 场景与认知
Scene API 最终需要将场景提供给 Cognitive Engine。
基本关系:
Ct=F(Gt,Ot,At,Rt,St,Sct)C_t=F(G_t,O_t,A_t,R_t,S_t,Sc_t)
即:
Goal
+
Object
+
Attribute
+
Relation
+
State
+
Scene
↓
Cognition
因此:
Scene API
↓
Scene
↓
Cognitive Model
↓
Cognitive Engine
Scene API 不直接做认知决策。
它负责提供:
当前机器世界是什么结构。
Cognitive Engine 负责进一步计算:
在这个结构下应该形成什么认知。
这保持了 API 层、模型层和认知引擎层之间的边界。
268.15 Scene API 的 PHP OOP 工程结构
按照 ICAI 的 PHP OOP 架构,可以建立:
SceneApiController
↓
SceneService
↓
SceneEngine
↓
SceneModel
↓
SceneRepository
↓
MySQL
各类职责分别为:
SceneApiController
负责接收 API 请求:
class SceneApiController
{
public function create()
{
// Receive request
}
public function get()
{
// Get scene
}
public function update()
{
// Update scene
}
public function rebuild()
{
// Rebuild scene
}
}
SceneService
负责场景业务调用:
class SceneService
{
protected $engine;
public function createScene($data)
{
return $this->engine->build($data);
}
public function rebuildScene($data)
{
return $this->engine->rebuild($data);
}
}
SceneEngine
负责场景结构计算:
class SceneEngine
{
public function build($data)
{
$scene = array();
$scene['objects'] = $data['objects'];
$scene['relations'] = $data['relations'];
$scene['states'] = $data['states'];
$scene['environment'] = $data['environment'];
$scene['position'] = $data['position'];
$scene['timestamp'] = $data['timestamp'];
return $scene;
}
}
这里的 Engine 才是场景结构计算的位置。
Controller 不负责场景计算,API 也不直接承担认知计算。
268.16 SceneModel
SceneModel 表示软件系统中的场景对象。
例如:
class SceneModel
{
protected $id;
protected $type;
protected $objects;
protected $relations;
protected $states;
protected $environment;
protected $position;
protected $timestamp;
protected $goal;
public function getId()
{
return $this->id;
}
public function getObjects()
{
return $this->objects;
}
public function getRelations()
{
return $this->relations;
}
public function getStates()
{
return $this->states;
}
}
SceneModel 是场景的软件对象表示。
它与理论中的 Scene 对应,但不能将理论概念和数据库记录简单等同。
其结构关系是:
Scene Theory
↓
Scene Object Model
↓
SceneModel
↓
Runtime Scene Instance
268.17 SceneRepository
SceneRepository 负责场景数据持久化。
class SceneRepository
{
public function save($scene)
{
// Save scene
}
public function find($id)
{
// Find scene
}
public function update($id, $scene)
{
// Update scene
}
public function delete($id)
{
// Delete scene
}
public function history($id)
{
// Scene history
}
}
数据库可以设计:
cognitive_scenes
例如:
id
scene_type
goal
environment
position
timestamp
scene_status
created_at
updated_at
场景中的对象、关系和状态可以通过独立关联表进行管理:
cognitive_scene_objects
cognitive_scene_relations
cognitive_scene_states
cognitive_scene_history
这样可以保持:
Scene
├── Objects
├── Relations
├── States
└── History
268.18 场景历史
由于场景是动态变化的,因此系统应该保存场景变化历史。
定义:
HSc={(t1,Sc1),(t2,Sc2),⋯ ,(tn,Scn)}H_{Sc}=\{(t_1,Sc_1),(t_2,Sc_2),\cdots,(t_n,Sc_n)\}
其中:
- tit_i:时间;
- SciSc_i:该时间对应的场景。
例如:
t1 → Hand Far Egg
t2 → Hand Near Egg
t3 → Hand Touch Egg
t4 → Hand Grasp Egg
t5 → Hand Move Egg
这形成:
Sc1→Sc2→Sc3→Sc4→Sc5Sc_1\rightarrow Sc_2\rightarrow Sc_3\rightarrow Sc_4\rightarrow Sc_5
场景历史不仅可以用于记录系统运行过程,还可以成为后续行为分析和反馈认知的重要结构数据。
268.19 场景变化事件
Scene API 可以产生场景事件:
SceneCreated
SceneUpdated
SceneChanged
SceneRebuilt
ObjectAdded
ObjectRemoved
RelationChanged
StateChanged
SceneClosed
例如:
StateChanged
↓
SceneChanged
↓
Cognitive Engine
↓
Re-Cognition
或者:
ObjectAdded
↓
SceneUpdated
↓
Scene Rebuild
↓
Cognition Update
因此 Scene API 可以成为动态认知系统中的结构变化入口。
268.20 Scene API 与反馈闭环
ICAI 的核心运行过程不是单向的。
完整闭环为:
World
↓
Real-Time Data
↓
Element API
↓
Object API
↓
Attribute API
↓
Relation API
↓
State API
↓
Scene API
↓
Cognitive Engine
↓
Behavior Engine
↓
Action
↓
Device API
↓
Device
↓
World Change
↓
Feedback
↓
Element API
↓
Object Update
↓
Scene Update
↓
Re-Cognition
因此 Scene API 位于机器世界结构形成和机器认知之间。
其位置可以概括为:
World→Data→Structure→Scene→CognitionWorld\rightarrow Data\rightarrow Structure\rightarrow Scene\rightarrow Cognition
执行之后:
Cognition→Action→WorldChange→Feedback→SceneUpdateCognition\rightarrow Action\rightarrow WorldChange\rightarrow Feedback\rightarrow SceneUpdate
由此形成动态认知闭环。
268.21 Scene API 的统一模型
经过前面的 Element API、Object API、Attribute API、Relation API、State API,可以形成统一结构:
E→O→A→R→S→ScE\rightarrow O\rightarrow A\rightarrow R\rightarrow S\rightarrow Sc
其中:
- EE:Element;
- OO:Object;
- AA:Attribute;
- RR:Relation;
- SS:State;
- ScSc:Scene。
进一步进入:
Sc→C→M→B→ActionSc\rightarrow C\rightarrow M\rightarrow B\rightarrow Action
其中:
- CC:Cognition;
- MM:Method;
- BB:Behavior。
因此形成:
Element
↓
Object
↓
Attribute
↓
Relation
↓
State
↓
Scene
↓
Cognition
↓
Method
↓
Behavior
↓
Action
↓
Device
↓
Feedback
这不是几个独立 API 的简单集合,而是一个连续的机器认知对象结构链。
268.22 Scene API 的工程定位
Scene API 在 ICAI 系统中的工程定位可以定义为:
Scene API 是机器世界结构进入认知运行层之前的场景接口,负责将动态对象、属性、关系、状态、环境、空间、时间和目标组织成当前场景实例,并向认知系统提供统一的场景数据。
因此:
Element API
负责元素
↓
Object API
负责对象
↓
Attribute API
负责属性
↓
Relation API
负责关系
↓
State API
负责状态
↓
Scene API
负责场景
↓
Cognitive API
负责认知通信
每一层都有自己的对象边界和工程职责。
268.23 本章总结
第268章建立了 Scene API|场景 API。
Scene API 的核心不是保存一个“场景名称”,而是建立当前世界的结构化场景实例:
Sct=F(Ot,At,Rt,St,Et,Pt,Tt,Gt)Sc_t=F(O_t,A_t,R_t,S_t,E_t,P_t,T_t,G_t)
它将:
Object
+
Attribute
+
Relation
+
State
+
Environment
+
Space
+
Time
+
Goal
组织为:
Current Scene
随后:
Scene
↓
Cognitive Model
↓
Cognitive Engine
当现实世界发生变化时:
World Change
↓
Real-Time Data
↓
Element Update
↓
Object Update
↓
Attribute Update
↓
Relation Update
↓
State Update
↓
Scene Update
↓
Re-Cognition
由此,Scene API 完成了从对象结构到当前世界场景结构的工程连接。
第268章之后,ICAI API 层已经形成:
Element API
↓
Object API
↓
Attribute API
↓
Relation API
↓
State API
↓
Scene API
下一层将进入认知结构本身,使场景数据正式进入 Cognitive API|认知 API,完成从:
Scene→CognitionScene\rightarrow Cognition
的独立系统通信接口建设。