第4章 SAI Framework 与 Web Framework
本章大纲
- Web Framework 是什么
- ThinkPHP 的工程思想
- MVC
- Request
- Response
- Controller
- Model
- View
- Route
- Container
- Middleware
- Plugin
- SAI 对这些思想的重新定义
- Web 是 SAI 的应用方式之一
- SAI 为什么不属于 Web
- Web 与 SAI 的关系
- 本章完整运行流程
4.1 Web Framework 是什么
Web Framework(Web 框架)是一套用于组织 Web 应用程序的软件工程基础。
一个典型 Web 请求可以表示为:
Browser
↓
HTTP Request
↓
Web Server
↓
Framework
↓
Application
↓
Response
↓
Browser
例如用户访问:
/hello
Web 框架接收到 HTTP Request 后,需要完成:
Request
↓
Route
↓
Controller
↓
Model
↓
View
↓
Response
最终返回:
<h1>Hello</h1>
所以 Web Framework 主要解决的是:
如何高效、规范、可维护地开发和运行 Web 应用。
4.2 ThinkPHP 的工程思想
ThinkPHP 是 PHP 生态中具有代表性的 Web Framework。
这里学习 ThinkPHP,并不是要把 SAI Framework 做成 ThinkPHP,而是学习其中成熟的软件工程组织思想。
例如:
Application
Controller
Model
View
Route
Container
Middleware
Extension
这些概念解决了不同层面的工程问题。
其中非常重要的一点是:
框架不是业务本身,而是组织业务程序运行的基础结构。
例如 Controller 不等于业务。
Controller 是:
请求进入
↓
调用业务
↓
返回结果
Model 负责数据和数据相关操作。
View 负责表现。
Route 负责入口映射。
Container 负责对象组织和依赖管理。
这些思想对于 SAI Framework 同样具有参考价值。
但是进入 SAI 后,这些概念的职责必须重新定义。
4.3 MVC
MVC 是 Web Framework 中非常经典的工程思想:
Model
View
Controller
基本关系:
Request
↓
Controller
↓
Model
↓
Data
↓
Controller
↓
View
↓
Response
Model
负责:
数据
对象
数据操作
View
负责:
表现
模板
页面
输出
Controller
负责:
接收请求
调用系统
组织结果
MVC 的价值并不是三个字母本身,而是:
通过职责分离降低系统复杂度。
SAI 可以借鉴这个思想,但不会简单照搬 MVC。
因为 SAI 的核心不是:
Request → Controller → Model → View
而是:
Information
↓
Perception
↓
Cognition
↓
Reasoning
↓
Decision
↓
Behavior
因此,SAI 中的 MVC 只能成为一种应用工程组织方式,而不是 SAI 智能机制本身。
4.4 Request
Web 中的 Request 是外部请求。
例如:
GET /user?id=10
Request 可以包含:
Method
URL
Parameter
Header
Cookie
Body
在 Web 应用中:
Request
↓
Route
↓
Controller
但是 SAI 面对的输入远远不止 HTTP Request。
例如:
文字
语言
传感器
摄像设备
温度
位置
速度
设备状态
API
数据库
文件
环境
场景
所以 SAI 中不能把所有信息都理解为 Request。
SAI 更适合:
Information
作为统一的信息入口。
例如:
Web Request
↓
Information
Sensor Data
↓
Information
Device State
↓
Information
Scene Data
↓
Information
因此:
Request 是 Web 的输入概念,Information 是 SAI 更广泛的输入概念。
4.5 Response
Web 中 Request 通常对应 Response:
Request
↓
Processing
↓
Response
Response 可以是:
HTML
JSON
XML
File
HTTP Status
例如:
{
"status": "success"
}
但 SAI 的最终输出不一定是 Web Response。
可能是:
HTML
JSON
UI
Terminal Output
Robot Command
Motor Action
Light Action
Vehicle Control
Machine Command
因此 SAI 更适合使用:
Expression
Action
Output
来表达内部结果。
然后根据应用环境进行转换:
SAI Action
↓
Expression
↓
Renderer / Adapter
↓
External World
所以:
Web Response
只是 SAI 外部表现的一种形式。
4.6 Controller
Controller 是 Web Framework 中非常重要的入口控制组件。
例如:
class UserController
{
public function index()
{
// ...
}
}
请求:
/user/index
映射:
Route
↓
UserController
↓
index()
但是不能因此把 Controller 当成 SAI 的 Central。
二者职责完全不同。
Controller
主要负责:
外部请求
↓
调用系统
↓
返回结果
Central
主要负责:
Individual 内部协调
↓
调度信息
↓
调度感知
↓
调度认知
↓
调度推理
↓
调度决策
↓
调度行为
因此:
Controller ≠ Central
这是 SAI Framework 与 Web Framework 关系中的一个重要边界。
4.7 Model
Web MVC 中的 Model 主要用于组织:
数据
数据库
业务对象
数据操作
例如:
class User
{
public function find($id)
{
// 查询用户
}
}
SAI 中同样需要对象模型,但 SAI 的 Object 范围更加广泛。
例如:
Person
Car
Robot
Room
Door
Temperature
Task
Device
SAI 的 Object 不只是数据库记录。
一个 SAI Object 可以具有:
Identity
Property
State
Relation
Method
例如:
Robot
├── Property
│ ├── position
│ └── speed
│
├── State
│ └── moving
│
├── Relation
│ └── located_in
│
└── Method
├── move()
└── stop()
所以:
SAI 的 Object 是认知和行为世界中的对象,而不仅仅是数据库 Model。
4.8 View
Web Framework 中 View 负责表现。
例如:
Controller
↓
View
↓
HTML
SAI 中也需要表现层,但表现形式更加广泛。
可以是:
Web
UI
API
Terminal
Display
Robot
Vehicle
Machine
因此 SAI 可以形成:
Behavior
↓
Action
↓
Expression
↓
Template
↓
Renderer / Adapter
↓
External World
例如:
Behavior:
TurnOnLight
可以表现为:
Web:
显示“灯已打开”
API:
{"light":"on"}
Device:
发送开灯命令
相同的内部行为,可以产生不同的外部表现。
这也是 SAI 中 Template、Renderer、Adapter 的意义。
4.9 Route
Route 在 Web Framework 中负责:
把外部请求映射到程序入口。
例如:
GET /user
映射:
UserController@index
可以理解为:
URL
↓
Route
↓
Controller
SAI 当然也可以使用 Route。
例如 Web Individual:
/user/message
进入:
InformationReceiver
但是一个机器人可能根本没有 URL。
它可能是:
Sensor
↓
InformationReceiver
或者:
Device
↓
DeviceAdapter
↓
InformationReceiver
所以 Route 不是 SAI 的核心。
它只是:
当 SAI 运行在 Web 环境中时,用于组织 Web 入口的一种机制。
4.10 Container
Container 通常用于管理对象和依赖关系。
例如:
Container
├── InformationReceiver
├── PerceptionEngine
├── CognitionEngine
├── MemoryEngine
├── ReasoningEngine
└── DecisionEngine
当某个模块需要:
ReasoningEngine
时,可以由 Container 提供。
这样就不需要每个类自己创建大量依赖对象。
例如:
$reasoning = $container->get('reasoning');
SAI 可以利用这种思想组织:
Object
Engine
Manager
Renderer
Adapter
Device
因此 Container 的意义在 SAI 中仍然成立。
但是它的作用属于:
工程基础设施
而不是:
认知机制
4.11 Middleware
Middleware 是 Web Framework 中用于处理请求过程的一种机制。
例如:
Request
↓
Middleware
↓
Controller
可以处理:
身份验证
权限
日志
异常
请求过滤
数据检查
SAI 也可以借鉴 Middleware 思想。
例如:
Information
↓
Filter
↓
Validation
↓
Security
↓
Perception
或者:
Action
↓
Safety Check
↓
Device Adapter
↓
Device
但是 SAI 中 Middleware 的作用需要重新定义。
它不能成为:
Cognition
Reasoning
Decision
的替代品。
它更适合承担:
过滤
验证
安全检查
日志
生命周期检查
异常拦截
输入输出保护
4.12 Plugin
Plugin 是开放扩展机制。
Web Framework 可以通过 Plugin 增加:
功能
模块
服务
管理页面
接口
工具
SAI Framework 同样需要开放扩展。
例如:
SAI Core
│
├── Robot Extension
├── Vehicle Extension
├── Sensor Extension
├── Device Extension
└── Custom Engine
但是 SAI Extension 的重点不是 Web 功能,而是 Individual 能力的扩展。
例如增加:
RobotAdapter
或者:
VisionSensor
或者:
NavigationEngine
这样 Framework 可以保持核心稳定,同时支持不同应用场景。
4.13 SAI 对这些思想的重新定义
到这里可以看到:
SAI 并不是拒绝 Web Framework 的工程思想,而是把其中适合的思想重新放入模拟人工个体的体系。
可以建立对应关系:
| Web Framework | SAI Framework 中的重新定义 |
|---|---|
| Request | Information |
| Response | Expression / Action / Output |
| Controller | External Entry Controller |
| Model | Object / Data Model |
| View | Expression / Template / Renderer |
| Route | Input Route / External Route |
| Container | Object / Service Container |
| Middleware | Filter / Validation / Security |
| Plugin | Extension |
| Application | Individual Runtime |
| MVC | Web Application Organization |
| Framework | Individual Construction Framework |
这里最重要的是:
Web Framework
↓
工程思想
SAI Framework
↓
模拟人工个体工程体系
SAI 不是简单修改几个类名。
而是重新确定这些工程思想在 Individual 中的位置和职责。
4.14 Web 是 SAI 的应用方式之一
SAI 可以运行在 Web 环境中。
例如:
Browser
↓
HTTP Request
↓
SAI Web Entry
↓
Information
↓
Perception
↓
Cognition
↓
Reasoning
↓
Decision
↓
Behavior
↓
Expression
↓
Web Response
这里 Web 只是外部环境。
SAI 的核心仍然是:
Information
↓
Cognition
↓
Decision
↓
Behavior
因此可以说:
Web 是 SAI 的一个运行和表现环境,而不是 SAI 的定义。
4.15 SAI 为什么不属于 Web
判断一个 Framework 属于什么领域,关键要看它的核心目标。
Web Framework 的核心目标是:
HTTP
Request
Response
Web Application
而 SAI Framework 的核心目标是:
Individual
SAI 的运行环境可以是:
Web
API
CLI
Robot
Vehicle
Drone
Industrial Device
Embedded System
Custom Environment
因此:
Web
├── SAI 可以运行
├── SAI 可以输出
└── SAI 可以交互
但:
SAI ≠ Web
更准确的关系是:
SAI Framework
│
┌─────────────┼─────────────┐
│ │ │
Web Robot Device
│ │ │
API/UI Sensor Machine
Web 只是其中一个分支。
4.16 Web 与 SAI 的关系
可以从三个层次理解。
第一层:Web 作为输入环境
Browser
↓
HTTP Request
↓
SAI Information
例如用户输入:
“房间温度是多少?”
进入 SAI:
Information
↓
Perception
↓
Cognition
第二层:Web 作为输出环境
SAI 产生:
Expression
通过:
WebRenderer
转换成:
HTML
JSON
返回浏览器。
第三层:Web 作为外部系统
SAI 也可以访问:
API
Database
Web Service
External System
这些都可以成为 InformationSource。
因此 Web 对 SAI 可以同时承担:
Input
Output
External Environment
但 SAI 的核心运行机制仍然独立于 Web。
4.17 本章完整运行流程
现在用一个 Web SAI Individual 作为完整案例。
假设:
用户通过浏览器询问房间温度,SAI 获取温度信息、进行判断,并返回结果。
4.17.1 Web Request
浏览器:
GET /temperature
进入 Web Server。
然后:
Request
↓
Route
Route 找到:
TemperatureController
4.17.2 Controller
Controller 不直接进行认知。
它只负责把 Web 请求转换成 SAI 可以处理的信息。
Controller
↓
InformationReceiver
形成:
Information
{
type: request,
source: web,
subject: temperature
}
4.17.3 Information
SAI 接收信息:
Information
↓
InformationReceiver
↓
InformationManager
然后进入:
Perception
4.17.4 Perception
PerceptionEngine 对信息进行组织:
temperature
room_01
形成:
Element
然后识别对象:
Room
属性:
temperature
4.17.5 Object
形成:
Room
└── temperature = 32
进一步建立:
Property
temperature = 32
以及相关 Relation。
4.17.6 Cognition
CognitionEngine 对当前信息进行认知组织:
Object
+
Property
+
Relation
得到:
Room.temperature = 32
4.17.7 Memory
SAI 可以查询:
Memory
确认:
当前房间
当前温度
最近状态
历史经验
4.17.8 Reasoning
如果存在规则:
IF temperature > 30
THEN temperature_state = HOT
则:
32 > 30
得到:
temperature_state = HOT
4.17.9 Decision
如果 Individual 的任务只是回答温度:
Decision
=
ReturnTemperature
如果同时存在自动控制任务:
Decision
=
TurnOnFan
这说明:
同一个 Web Request 并不等于整个 SAI 的决策。
Request 只是触发信息进入系统的一种方式。
4.17.10 Behavior
如果需要控制设备:
Decision
↓
Behavior
↓
Action
例如:
Fan.turnOn()
如果只是回答用户:
Decision
↓
Behavior
↓
Expression
形成:
Temperature = 32℃
4.17.11 Renderer
WebRenderer 接收 Expression:
Expression
{
temperature: 32,
state: hot
}
转换为:
{
"temperature": 32,
"state": "hot"
}
然后形成:
Response
4.17.12 返回 Web
最终:
SAI
↓
Expression
↓
WebRenderer
↓
HTTP Response
↓
Browser
完整流程就是:
Browser
↓
HTTP Request
↓
Route
↓
Controller
↓
Information
↓
InformationReceiver
↓
Perception
↓
Element
↓
Object
↓
Relation / Property
↓
Cognition
↓
Memory
↓
Reasoning
↓
Decision
↓
Behavior
↓
Expression
↓
WebRenderer
↓
Response
↓
Browser
如果存在设备控制,则可以变成:
Decision
↓
Behavior
↓
Action
↓
Adapter
↓
Device
↓
Feedback
↓
Information
↓
Perception
于是 Web 和 SAI 形成了一个完整闭环:
┌──────────────────────┐
│ SAI Individual │
│ │
Web Request ──────>│ Information │
│ ↓ │
│ Perception │
│ ↓ │
│ Cognition │
│ ↓ │
│ Reasoning │
│ ↓ │
│ Decision │
│ ↓ │
│ Behavior │
│ ↓ │
│ Expression │
└──────┬───────────────┘
│
WebRenderer
│
↓
HTTP Response
│
↓
Browser
如果接入真实设备:
SAI Individual
│
Decision
│
Behavior
│
Action
│
Adapter
│
Device
│
Feedback
│
Information
│
└──────────→ SAI
本章核心认识
本章最重要的不是记住:
Request = Information
Controller = Central
Model = Object
View = Template
因为这些并不是完全等价关系。
真正应该理解的是:
SAI 可以借鉴 Web Framework 的工程思想,但必须根据模拟人工个体的运行机制重新定义这些思想。
因此:
Web Framework
│
│ 借鉴工程思想
↓
SAI Framework
│
↓
Individual
而不是:
Web Framework
↓
修改名称
↓
SAI
二者的核心目标不同。
Web Framework 的核心
HTTP
↓
Request
↓
Application
↓
Response
SAI Framework 的核心
Information
↓
Perception
↓
Cognition
↓
Memory
↓
Reasoning
↓
Decision
↓
Behavior
↓
Action
↓
Feedback
↓
Experience
↓
Learning
最终可以用一句话概括:
SAI Framework 可以运行于 Web,但不依赖 Web;可以借鉴 Web Framework 的工程思想,但其最终目标不是构建 Web 应用,而是构建能够持续运行的模拟人工个体 Individual。