ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

第6章 SAI Framework 项目目录结构

第6章 SAI Framework 项目目录结构 第6章 SAI Framework 项目目录结构 2026年09月12日 东塬一老翁 第二篇 SAI Framework 开发基础第6章 SAI Framework 项目目录结构本章大纲根目录publicappCoreInformationSceneIndividualCentralCognitionMemoryReasoningDecisionBehaviorTemplateRendererAdapterDeviceFeedbackExperienceLearningMaintenanceExtensionconfigtemplatesstorageextensionsbootstrap.php完整目录关系6.1 根目录SAI Framework 的根目录是整个框架的工程边界。它不是某一个 Web 页面也不是某一个 PHP 类而是把核心代码Individual信息处理场景处理认知记忆推理决策行为模板输出外部设备学习自我维护扩展配置数据存储组织在一起。一个完整的 SAI Framework 根目录可以设计为sai/│├── app/├── config/├── templates/├── storage/├── extensions/├── public/│└── bootstrap.php这里需要特别区分代码配置模板运行数据扩展入口它们承担不同职责。6.2 publicpublic 是外部访问入口目录。如果 SAI 运行在 Web 环境中可以通过HTTP Request↓public/index.php进入 SAI。例如public/└── index.phpindex.php 的主要职责不是实现认知而是启动框架。例如?phprequire_once dirname(__DIR__) . /bootstrap.php;$app new \SAI\Core\Application();$app-run();因此public/index.php只是入口。它不是CognitionReasoningDecision的实现位置。非 Web 环境SAI 并不依赖 public。例如机器人、车辆或者工业设备可以直接通过Device↓Adapter↓SAI进入系统。所以public 是 SAI 的一种外部入口而不是 SAI Framework 的核心。6.3 appapp 是 SAI Framework 的核心代码目录。主要的 Individual 构建能力都放在这里。例如app/├── Core/├── Information/├── Scene/├── Individual/├── Central/├── Element/├── Object/├── Relation/├── Rule/├── Perception/├── Cognition/├── Memory/├── Reasoning/├── Decision/├── Behavior/├── Expression/├── Template/├── Renderer/├── Adapter/├── Device/├── Feedback/├── Experience/├── Learning/├── Maintenance/└── Extension/可以把 app 理解为SAI Framework 的内部能力空间。6.4 CoreCore 是框架基础层。它不负责直接产生“智能”而是提供框架运行所需要的基础工程能力。例如Core/├── Application.php├── Container.php├── Request.php├── Response.php├── Route.php├── Controller.php├── Model.php└── Engine.phpApplication负责整个 SAI 应用生命周期。Application↓启动↓初始化↓运行 Individual↓结束Container负责对象和服务的组织。例如$container-set(memory,new MemoryEngine());Request可以承载 Web 请求但不能认为 SAI 的所有输入都是 Request。Response负责一种外部响应形式。Controller负责外部入口控制。注意Controller ≠ CentralEngine定义框架中各种 Engine 的工程基础。例如CognitionEngineReasoningEngineLearningEngineMemoryEngine6.5 InformationInformation 负责信息。目录可以设计为Information/├── Information.php├── InformationType.php├── InformationSource.php├── InformationReceiver.php└── InformationManager.php基本信息结构$information array(type sensor,source temperature_sensor,content 32,time time(),state active,context room);信息可能来自人↓文字 / 语言 / 指令环境↓场景信息设备↓设备状态传感器↓传感数据外部系统↓API / 数据库 / 网络所以 SAI 的输入不是单一的Request而是Information6.6 SceneScene 负责场景。例如Scene/├── Scene.php├── SceneInformation.php├── SceneCollector.php├── SceneObject.php├── SceneState.php└── SceneManager.php一个场景可能包括Room├── Temperature├── Light├── Person├── Door├── Fan└── Window场景还包含位置距离方向运动状态环境对象例如Room.temperature 32Person.state PRESENTFan.state OFF这些信息共同构成一个场景状态。6.7 IndividualIndividual 是 SAI Framework 最重要的目标对象。目录Individual/├── Individual.php├── Identity.php├── State.php├── Ability.php└── IndividualManager.php一个 Individual 可以拥有IdentityStateAbilityMemoryCognitionLearningBehavior结构Individual├── Identity├── State├── Ability├── Memory├── Cognition├── Learning└── Behavior因此Framework 是构建工具Individual 才是最终构建对象。6.8 CentralCentral 是 Individual 内部的协调中心。目录Central/├── Central.php├── Dispatcher.php├── Coordinator.php├── Lifecycle.php└── StateManager.phpCentral 可以协调Information↓Perception↓Cognition↓Memory↓Reasoning↓Decision↓Behavior↓Feedback例如$central-receive($information);$central-process();但 Central 本身不应该把所有功能都写进去。错误设计Central├── 感知代码├── 认知代码├── 推理代码├── 决策代码├── 学习代码└── 行为代码正确设计Central↓协调↓调用不同模块6.9 CognitionCognition 负责认知。目录Cognition/├── Cognition.php├── CognitionEngine.php├── Understanding.php├── Matching.php└── CognitionManager.php认知的基本过程感知结果↓元素↓对象↓属性↓关系↓匹配↓理解例如temperature 32感知阶段只是获得32认知阶段可能得到Room.temperature 32进一步形成RoomProperty: temperatureValue: 326.10 MemoryMemory 负责 Individual 的记忆机制。目录Memory/├── Memory.php├── ShortMemory.php├── LongMemory.php├── FactMemory.php├── ExperienceMemory.php├── StateMemory.php├── MemoryIndex.php└── MemoryEngine.php可以划分Memory├── ShortMemory├── LongMemory├── FactMemory├── ExperienceMemory└── StateMemory例如FactMemory记录事实Room.temperature 32StateMemory记录状态Fan.state OFFExperienceMemory记录经验过去温度 30人员存在风扇开启结果温度下降Memory 因此不是简单的数据库而是 Individual 内部的信息保留机制。6.11 ReasoningReasoning 负责推理。目录Reasoning/├── Reasoning.php├── ReasoningEngine.php├── FactResolver.php├── RuleResolver.php└── Conclusion.php基本关系FactsObjectsRelationsRulesExperience↓Reasoning↓Conclusion例如Fact:Room.temperature 32Fact:Person.state PRESENTFact:Fan.state OFF规则IFRoom.temperature 30ANDPerson.state PRESENTANDFan.state OFFTHENFan.turnOn()Reasoning 得到Fan should turn on6.12 DecisionDecision 负责决策。目录Decision/├── Decision.php├── DecisionEngine.php├── Candidate.php├── Priority.php├── Risk.php└── DecisionResult.php推理结果并不一定直接成为最终行为。例如可能产生Candidate A打开风扇Candidate B打开空调Candidate C不执行Decision 进行条件分析↓风险分析↓优先级分析↓选择最终DecisionResult例如Action Fan.turnOn()6.13 BehaviorBehavior 负责行为。目录Behavior/├── Behavior.php├── BehaviorEngine.php├── BehaviorType.php├── Action.php└── BehaviorResult.php关系Decision↓Behavior↓Action例如Decision:turn_on_fan转化为Behavior:CoolingBehavior然后产生Action:Fan.turnOn()因此Decision ≠ BehaviorBehavior ≠ Action三者具有不同职责。6.14 TemplateTemplate 负责行为表达模板。目录Template/├── Template.php├── TemplateEngine.php├── TemplateManager.php├── TemplateCompiler.php└── TemplateRegistry.php模板可以把内部行为映射为外部表达。例如Behavior:Fan.turnOn()可以根据不同模板形成WebAPIUIDevice模板不是认知系统。它不负责ReasoningDecisionLearningMemory6.15 RendererRenderer 负责表达结果的呈现。例如Renderer/├── Renderer.php├── RendererManager.php├── WebRenderer.php├── UiRenderer.php├── ApiRenderer.php└── DeviceRenderer.php同一个行为Fan.turnOn()可能产生WebRenderer→ 页面状态ApiRenderer→ JSONUiRenderer→ UI状态DeviceRenderer→ 设备表达所以 Renderer 解决的是如何把结果表达出来。6.16 AdapterAdapter 负责外部设备和外部协议适配。目录Adapter/├── Adapter.php├── AdapterManager.php├── DeviceAdapter.php├── RobotAdapter.php├── SensorAdapter.php└── MachineAdapter.php例如SAI Action↓RobotAdapter↓机器人控制接口或者SAI Action↓MachineAdapter↓工业设备Adapter 解决的是SAI 内部对象如何与外部世界连接。6.17 DeviceDevice 把外部设备作为 SAI 可以认识和管理的对象。目录Device/├── Device.php├── DeviceState.php├── DeviceManager.php├── DeviceCommand.php└── DeviceResponse.php设备可以具有IdentityPropertyStateMethodRelation例如Fan├── id├── speed├── direction├── state└── turnOn()于是设备也可以进入 SAI 的对象体系Element↓Object↓Property↓Method↓Relation6.18 FeedbackFeedback 负责接收行为执行后的反馈。目录Feedback/├── Feedback.php├── FeedbackEngine.php└── FeedbackManager.php完整闭环Decision↓Behavior↓Action↓Device↓结果↓Feedback↓Information例如Fan.turnOn()设备返回Fan.state ON这个结果就是反馈信息。6.19 ExperienceExperience 负责经验。目录Experience/├── Experience.php├── ExperienceEngine.php└── ExperienceManager.php经验不是单独一个事实。例如Fact:temperature 32只是事实。而场景决策行为结果可以形成经验当室温超过30℃且有人存在时开启风扇能够降低室温。因此经验具有过程性。6.20 LearningLearning 负责学习。目录Learning/├── Learning.php├── LearningEngine.php├── KnowledgeExtraction.php├── AbilityUpdate.php└── LearningManager.php基本流程Feedback↓Experience↓Pattern↓Knowledge↓Ability Update↓Memory Update学习的目的不是简单保存数据而是获得知识↓形成能力资源↓改善以后行为6.21 MaintenanceMaintenance 负责 Individual 的自我维护。目录Maintenance/├── Detection.php├── Risk.php├── Conflict.php├── Diagnosis.php├── Repair.php└── Verification.php完整过程Detection↓Risk↓Conflict↓Diagnosis↓Repair↓Verification例如发现 MemoryIndex 异常↓判断风险↓定位问题↓执行修复↓重新检查Maintenance 不属于普通业务行为而是框架内部的维护能力。6.22 ExtensionExtension 是框架扩展机制。目录Extension/├── Extension.php├── ExtensionManager.php├── Registry.php└── Hook.php通过 Extension 可以扩展EngineAdapterRendererTemplateDeviceInformation Collector例如CustomRobotEngineCustomRobotAdapterCustomSensorAdapterCustomRenderer这样 SAI Framework 不需要修改核心代码就可以增加能力。6.23 configconfig 保存配置。例如config/├── app.php├── individual.php├── information.php├── scene.php├── memory.php├── behavior.php├── template.php├── device.php└── extension.php例如return array(name SAI Framework,version 0.1.0,debug true);配置与程序代码分离程序逻辑≠运行配置这样可以减少硬编码。6.24 templatestemplates 保存具体模板资源。例如templates/├── web/├── ui/├── api/├── device/└── custom/这里与app/Template/有所区别。app/Template保存模板引擎代码TemplateEngineTemplateManagerTemplateCompilertemplates保存实际模板HTMLJSONDevice CommandUI ExpressionCustom Expression因此Template Engine↓读取↓Template Resource6.25 storagestorage 是运行数据存储区域。例如storage/├── memory/├── experience/├── state/├── cache/├── logs/└── runtime/必须注意Storage 不等于 Memory。例如Memory是 SAI 的内部记忆机制。而storage/memory/只是保存数据的工程位置。关系是Memory Engine↓Storage↓文件 / 数据库 / 其他持久化方式6.26 extensionsextensions 是实际扩展模块的存放位置。例如extensions/├── information/├── scene/├── renderer/├── adapter/├── device/└── template/区别app/Extension/是扩展机制本身。而extensions/是实际扩展内容。例如app/Extension/↓ExtensionManager↓extensions/robot/↓RobotAdapter6.27 bootstrap.phpbootstrap.php 是框架启动文件。主要负责加载配置↓注册 Autoload↓初始化基础环境↓初始化核心服务↓准备 Application例如?phperror_reporting(E_ALL);ini_set(display_errors, 1);spl_autoload_register(function ($class) {$prefix SAI\\;if (strpos($class, $prefix) ! 0) {return;}$relative substr($class, strlen($prefix));$file __DIR__. /app/. str_replace(\\, /, $relative). .php;if (is_file($file)) {require_once $file;}});这里的代码只是教程中的示例实现不代表当前已经建立或验证了一个实际 SAI Framework 项目。6.28 完整目录关系综合前面的模块可以形成完整目录sai/│├── public/│ └── index.php│├── app/│ ││ ├── Core/│ │ ├── Application.php│ │ ├── Container.php│ │ ├── Request.php│ │ ├── Response.php│ │ ├── Route.php│ │ ├── Controller.php│ │ ├── Model.php│ │ └── Engine.php│ ││ ├── Information/│ ├── Scene/│ ├── Individual/│ ├── Central/│ ├── Element/│ ├── Object/│ ├── Relation/│ ├── Rule/│ ├── Perception/│ ├── Cognition/│ ├── Memory/│ ├── Reasoning/│ ├── Decision/│ ├── Behavior/│ ├── Expression/│ ├── Template/│ ├── Renderer/│ ├── Adapter/│ ├── Device/│ ├── Feedback/│ ├── Experience/│ ├── Learning/│ ├── Maintenance/│ └── Extension/│├── config/│ ├── app.php│ ├── individual.php│ ├── information.php│ ├── scene.php│ ├── memory.php│ ├── behavior.php│ ├── template.php│ ├── device.php│ └── extension.php│├── templates/│ ├── web/│ ├── ui/│ ├── api/│ ├── device/│ └── custom/│├── storage/│ ├── memory/│ ├── experience/│ ├── state/│ ├── cache/│ ├── logs/│ └── runtime/│├── extensions/│ ├── information/│ ├── scene/│ ├── renderer/│ ├── adapter/│ ├── device/│ └── template/│└── bootstrap.php6.29 SAI Framework 的纵向关系目录只是横向组织代码真正重要的是模块之间的运行关系。可以把核心运行结构理解为SAI Framework│▼Individual│▼Central│┌──────────────────┼──────────────────┐│ │ │▼ ▼ ▼Information Scene Individual│ │└──────────┬───────┘▼Perception│▼Element│▼Object│┌────┴────┐▼ ▼Property Relation│ │└────┬────┘▼Cognition│▼Memory│▼Reasoning│▼Decision│▼Behavior│▼Action│▼Expression│▼Template│┌──────┴──────┐▼ ▼Renderer Adapter│ │▼ ▼Output Device│ │└──────┬──────┘▼Feedback│▼Experience│▼Learning│▼Memory Update6.30 目录结构与 SAI 生命周期最终可以把目录与生命周期对应起来SAI 生命周期 Framework 模块信息接收 Information场景采集 Scene感知 Perception元素 Element对象 Object属性 Property关系 Relation认知 Cognition记忆 Memory推理 Reasoning决策 Decision行为 Behavior表达 Expression模板 Template输出 Renderer外部设备 Adapter / Device反馈 Feedback经验 Experience学习 Learning自我维护 Maintenance扩展 Extension这样目录就不再是简单的文件夹集合而是对应 SAI Individual 的内部结构。6.31 一个完整运行示例假设存在一个SAI IndividualID indoor_001环境中存在RoomTemperatureSensorFanPerson温度传感器产生32℃首先Sensor↓Information进入app/Information/然后进入Scene↓Perception形成Room.temperature 32再经过Element↓Object↓Property形成对象关系。然后Cognition↓Memory↓Reasoning匹配规则IF Room.temperature 30AND Person.state PRESENTAND Fan.state OFFTHEN Fan.turnOn()然后Reasoning↓Decision↓Behavior↓Action如果是设备Action↓Adapter↓Device↓Fan.turnOn()风扇返回state ON形成Feedback↓Experience↓Learning↓Memory Update最终再次进入下一轮Information↓Scene↓Perception↓...这就形成真正的闭环。6.32 Web 在目录结构中的位置这里可以进一步明确 SAI 与 Web Framework 的关系。Web 只是public/提供的一种入口和Renderer/提供的一种输出方式。例如Browser│▼public/index.php│▼Controller│▼Information│▼SAI Individual│▼Decision│▼Behavior│▼WebRenderer│▼Response│▼Browser因此Web 是 SAI Framework 的应用环境之一而不是 SAI Framework 的定义。同一个 SAI 可以离开 WebRobot↓Adapter↓SAI↓Decision↓Robot Action也可以运行在VehicleIndustrial MachineEmbedded DeviceDesktop ApplicationCommand LineServer6.33 本章完整结构图最终可以把整个 SAI Framework 压缩成下面这张结构图SAI Framework│▼Individual│▼Central│┌────────────────┼────────────────┐│ │ │▼ ▼ ▼Information Scene Core│ │└───────┬────────┘▼Perception│▼Element│▼Object/ \Property Relation\ /▼Cognition│▼Memory│▼Reasoning│▼Decision│▼Behavior│▼Action│▼Expression│▼Template│┌──────┴──────┐▼ ▼Renderer Adapter│ │▼ ▼Output Device│ │└──────┬──────┘▼Feedback│▼Experience│▼Learning│▼Memory Update│▼Maintenance│▼Extension同时工程支撑层位于外围┌─────────────────────────┐│ config/ ││ templates/ ││ storage/ ││ extensions/ ││ public/ ││ bootstrap.php │└────────────┬────────────┘│▼SAI Framework本章小结第6章解决的不是“某个类怎么写”而是首先确定 SAI Framework 的工程空间。核心关系可以记成根目录│├── public 外部入口├── app 核心代码│ ├── Core 框架基础│ ├── Information│ ├── Scene│ ├── Individual│ ├── Central│ ├── Cognition│ ├── Memory│ ├── Reasoning│ ├── Decision│ ├── Behavior│ ├── Template│ ├── Renderer│ ├── Adapter│ ├── Device│ ├── Feedback│ ├── Experience│ ├── Learning│ ├── Maintenance│ └── Extension│├── config 配置├── templates 模板资源├── storage 持久化数据├── extensions 实际扩展└── bootstrap.php 启动而从 SAI 的核心运行机制来看Information↓Scene↓Perception↓Element↓Object↓Relation↓Cognition↓Memory↓Reasoning↓Decision↓Behavior↓Action↓Expression↓Template↓Renderer / Adapter↓World / Device↓Feedback↓Experience↓Learning↓Memory Update因此SAI Framework 的目录结构实际上就是 SAI Individual 生命周期的工程化映射。需要再次强调本章目录、类名和代码均属于教程架构设计与示例并不表示这些文件目前已经实际创建、安装或运行验证。
返回列表