第188章 StateEngine
188.1 StateEngine的定义
在ICAI系统中,Object描述对象,State描述对象在某一时间、某一条件和某一运行环境下的实际状态。
前面已经定义:
S=(O,V,T,C,R)S=(O,V,T,C,R)
其中:
- OO:Owner,状态所属对象;
- VV:Value,状态值;
- TT:Time,状态发生或成立的时间;
- CC:Context,状态上下文;
- RR:Reason,状态形成或变化的原因。
**StateEngine(状态计算引擎)**是根据当前对象、当前状态、事件、条件和状态转换规则,对状态进行计算、判断、转换和验证的确定性计算Engine。
可以定义:
StateEngine=StateCalculation+StateTransition+StateVerificationStateEngine= StateCalculation+ StateTransition+ StateVerification
即:
状态计算 → 状态转换 → 状态验证
StateEngine回答三个核心问题:
- 当前状态是什么?
- 在当前事件和条件下能否转换到新状态?
- 转换之后的新状态是否真实、合法、有效?
因此:
StateEngine=(S,E,R,C,D,T,V)StateEngine=(S,E,R,C,D,T,V)
其中:
- SS:Current State,当前状态;
- EE:Event,触发事件;
- RR:Rule,状态规则;
- CC:Condition,状态条件;
- DD:Discrete Calculation,离散状态计算;
- TT:Transition,状态转换;
- VV:Verification,状态验证。
188.2 StateEngine与StateService的区别
StateEngine与前面的ObjectEngine一样,必须和Service层保持明确边界。
可以定义:
StateService=State OrchestrationStateService=State\ Orchestration StateEngine=State ComputationStateEngine=State\ Computation
StateService负责:
Request
→ Load State
→ Call StateEngine
→ Receive Result
→ Persist State
→ Save History
→ Return Result
StateEngine负责:
Current State
+ Event
+ Condition
+ Rule
→ Calculate
→ Evaluate
→ Transition
→ Verify
→ EngineResult
因此:
StateService负责“状态处理流程”。
StateEngine负责“状态计算规则”。
如果把状态规则全部写进StateService,Service会逐渐变成大量if/else组成的巨大程序。
而StateEngine将状态计算集中起来,使状态规则成为可以独立验证、复用和维护的计算机制。
188.3 StateEngine的基本模型
根据第186章的Engine统一模型:
Engine=(I,R,C,D,O)Engine=(I,R,C,D,O)
StateEngine进一步表示为:
SE=(S,E,R,C,D,O)SE=(S,E,R,C,D,O)
其中:
- SS:当前状态;
- EE:事件;
- RR:状态转换规则;
- CC:转换条件;
- DD:离散计算;
- OO:计算结果。
基本计算:
O=F(S,E,R,C)O=F(S,E,R,C)
如果条件满足,则产生候选状态:
Snew=T(S,E,C,R)S_{new}=T(S,E,C,R)
但:
SnewS_{new}
只是计算结果,并不意味着系统已经完成状态更新。
真正的状态更新必须经过:
Current State
→ State Calculation
→ Transition Candidate
→ Transition Validation
→ StateService
→ Persist
因此:
StateEngine可以计算“应该变成什么状态”,但不能绕过验证和Service直接修改数据库。
188.4 一、状态计算
188.4.1 状态计算的定义
**状态计算(State Calculation)**是根据对象当前事实、当前状态、事件、时间、上下文和规则,计算当前状态或候选状态的过程。
例如一个设备:
power = on
temperature = 85
alarm = false
系统规则:
Temperature>80→OverheatTemperature>80 \rightarrow Overheat
StateEngine计算:
current state = normal
temperature = 85
rule = temperature > 80
candidate state = overheat
这里的overheat首先是一个状态计算结果。
它还没有被最终保存。
188.5 状态是时间相关的
状态不能脱离时间理解。
可以表示为:
StS_t
其中:
- SS:状态;
- tt:状态成立的时间。
当发生事件:
EtE_t
StateEngine计算:
St+1=F(St,Et,Ct,R)S_{t+1}=F(S_t,E_t,C_t,R)
因此:
St≠St+1S_t\neq S_{t+1}
并不意味着旧状态错误。
例如:
10:00 → pending
10:05 → active
10:30 → completed
三个状态都可能是正确的,只是成立时间不同。
因此:
当前State描述“现在是什么”,State History描述“过去发生过什么”。
188.6 状态计算的输入
StateEngine可以使用以下输入:
Current Object
Current State
Event
Condition
Rule
Time
Context
Relation
Verified Fact
History
形成:
StateInput=Object+State+Event+Condition+Rule+Context+TimeStateInput= Object+ State+ Event+ Condition+ Rule+ Context+ Time
但历史数据不能自动覆盖当前事实。
例如历史记录:
2026-09-01 stock = 100
而当前对象:
2026-09-11 stock = 0
StateEngine必须优先使用当前有效事实。
因此:
CurrentFact>HistoricalFactCurrentFact>HistoricalFact
历史信息只能作为辅助判断依据。
188.7 二、状态条件计算
状态转换并不是任意发生的。
定义:
C(S,E,O)=trueC(S,E,O)=true
表示当前状态、事件和对象满足转换条件。
例如:
Current State = pending
Payment = confirmed
Inventory = available
规则:
pending+payment_confirmed+inventory_available→activepending + payment\_confirmed + inventory\_available \rightarrow active
StateEngine首先计算:
payment_confirmed = true
inventory_available = true
然后:
C=trueC=true
才允许产生:
pending → active
如果库存不足:
inventory_available = false
则:
C=falseC=false
状态不能转换。
188.8 三、状态转换
188.8.1 状态转换的定义
**状态转换(State Transition)**是指对象在当前状态、事件和条件满足状态规则时,由一个合法状态进入另一个合法状态的过程。
定义:
T(S1,E,C)→S2T(S_1,E,C)\rightarrow S_2
其中:
- S1S_1:原状态;
- EE:触发事件;
- CC:转换条件;
- S2S_2:目标状态。
例如:
pending+approve→activepending+approve\rightarrow active
或者:
active+complete→completedactive+complete\rightarrow completed
或者:
running+error→failedrunning+error\rightarrow failed
188.9 状态转换不是简单赋值
错误的状态处理:
$state = 'completed';
这种写法直接改变状态,却没有检查:
当前状态是什么?
是否允许转换?
触发事件是什么?
条件是否满足?
转换是否经过验证?
正确流程:
Current State
→ Event
→ Find Transition Rule
→ Evaluate Condition
→ Calculate Target State
→ Validate Transition
→ Generate Transition Result
→ StateService
→ Save
因此:
Transition≠AssignmentTransition\neq Assignment
状态转换是一个受规则约束的计算过程。
188.10 状态转换图
一个典型对象生命周期可以表示为:
Created
↓
Initialized
↓
Ready
↓
Active
↓
Updated
↓
Inactive
↓
Archived
异常路径:
Active
↓
Failed
↓
Diagnosis
↓
Repair
↓
Ready
取消路径:
Ready
↓
Cancelled
阻塞路径:
Ready
↓
Blocked
这些状态不是简单字符串集合,而是由Transition Rule约束。
188.11 状态转换规则
可以定义状态转换规则:
TR=(S1,E,C,S2,V)TR=(S_1,E,C,S_2,V)
其中:
- S1S_1:源状态;
- EE:事件;
- CC:条件;
- S2S_2:目标状态;
- VV:验证要求。
例如:
Source:
pending
Event:
payment_confirmed
Condition:
inventory > 0
Target:
active
Verification:
payment_record_exists
只有:
S1=pendingS_1=pending
且:
E=payment_confirmedE=payment\_confirmed
且:
inventory>0inventory>0
才能产生:
S2=activeS_2=active
188.12 状态转换合法性
状态转换必须经过合法性判断:
ValidTransition=CurrentState∧Event∧Condition∧RuleValidTransition= CurrentState \land Event \land Condition \land Rule
如果其中任何必要条件不满足:
ValidTransition=falseValidTransition=false
例如:
Current = archived
Event = activate
如果规则不存在:
archived → active
则:
transition = invalid
StateEngine不能为了满足业务调用而强行产生目标状态。
188.13 四、状态验证
188.13.1 状态验证的定义
**状态验证(State Verification)**是判断计算得到或实际保存的状态是否与对象事实、转换规则、条件和证据一致的过程。
定义:
V(S)=F∧R∧C∧EV(S)=F\land R\land C\land E
其中:
- FF:Fact,事实存在;
- RR:Rule,规则符合;
- CC:Condition,条件满足;
- EE:Evidence,证据存在。
只有:
V(S)=trueV(S)=true
才能认为该状态具有有效依据。
188.14 状态计算与状态验证的区别
二者不能混淆。
例如:
temperature = 90
规则:
temperature>80→overheattemperature>80\rightarrow overheat
StateEngine计算:
candidate_state = overheat
这是:
状态计算。
随后系统检查:
temperature sensor value exists
timestamp valid
sensor state valid
rule active
验证:
verified = true
这是:
状态验证。
因此:
CalculatedState≠VerifiedStateCalculatedState\neq VerifiedState
这和第184章Learning中的原则完全一致:
计算结果不等于已经验证的事实。
188.15 状态验证的证据
状态验证需要Evidence。
可以定义:
Evidence=(Source,Type,Value,Time)Evidence=(Source,Type,Value,Time)
例如:
Source = sensor_01
Type = temperature
Value = 90
Time = 2026-09-11 12:30:00
StateEngine根据这个证据判断:
temperature = 90
是否足以支持:
overheat
如果证据缺失:
state = unknown
而不能强行判断:
state = overheat
因此:
NoEvidence≠VerifiedNoEvidence\neq Verified
188.16 状态验证结果
状态验证可以产生:
verified
unverified
invalid
outdated
conflicted
unknown
例如:
verified
事实存在
+
规则符合
+
条件满足
+
证据有效
unverified
存在状态候选
但证据不足
invalid
状态违反规则
outdated
状态曾经有效
但当前时间窗口已经失效
conflicted
存在相互冲突的状态证据
unknown
缺少足够数据
这种多状态验证结果能够让后续DecisionEngine、DiagnosisEngine和LearningEngine进行更加准确的处理。
188.17 五、状态计算、转换、验证三者关系
三者必须保持严格顺序:
Current State
↓
State Calculation
↓
Transition Candidate
↓
Transition Validation
↓
State Verification
↓
New State
更完整地表示:
St→Calculate→Candidate(St+1)→Validate→Verify→St+1S_t \rightarrow Calculate \rightarrow Candidate(S_{t+1}) \rightarrow Validate \rightarrow Verify \rightarrow S_{t+1}
其中最关键的一点是:
Candidate State不是Final State。
只有通过合法转换和验证之后,才能形成有效的新状态。
188.18 六、StateEngine与ObjectEngine
第187章建立了ObjectEngine。
两者的关系可以表示为:
Object
↓
ObjectEngine
↓
Object Facts
↓
StateEngine
↓
State Calculation
例如Object:
Machine A
temperature = 90
power = on
ObjectEngine负责计算对象属性:
temperature = 90
power = on
StateEngine进一步根据规则:
temperature>80temperature>80
计算:
candidate state = overheat
因此:
ObjectEngine→FactsObjectEngine\rightarrow Facts StateEngine→StateStateEngine\rightarrow State
两个Engine不能合并。
188.19 七、StateEngine与RelationEngine
StateEngine也需要处理关系变化带来的状态影响。
例如:
Object A
→ depends_on
→ Object B
如果B进入:
failed
规则规定:
A depends_on B
+
B failed
→
A blocked
这里:
RelationEngine负责确定:
A depends_on B
StateEngine负责根据关系事实计算:
A → blocked
因此:
RelationEngine
→ Relation Fact
StateEngine
→ State Result
形成:
Relation→StateRelation \rightarrow State
188.20 八、StateEngine与BehaviorEngine
Behavior执行过程中会不断发生状态变化。
例如:
Behavior
Created
→ Ready
→ Running
→ Completed
BehaviorEngine负责行为执行过程。
StateEngine负责状态转换规则。
因此:
BehaviorEngine
→ Execute Behavior
StateEngine
→ Calculate Behavior State
完整过程:
Behavior
→ Action
→ Execution
→ Result
→ StateEngine
→ State Transition
188.21 九、StateEngine与FeedbackEngine
Feedback可以触发状态重新计算。
例如:
Expected:
completed
Actual:
failed
FeedbackEngine接收:
Actual Result = failed
然后StateEngine根据规则:
running
+
execution_failed
→
failed
产生:
new state = failed
因此:
Feedback→StateEngine→StateUpdateFeedback \rightarrow StateEngine \rightarrow StateUpdate
反馈不是状态本身。
反馈是导致状态重新判断的重要输入。
188.22 十、StateEngine与RiskEngine
状态是风险判断的重要基础。
例如:
stock = 0
StateEngine得到:
inventory_state = empty
RiskEngine进一步判断:
empty inventory
→
delivery risk
因此:
StateEngine
→ Current State
→ RiskEngine
→ Risk
如果风险解除,也可以通过新的状态事实重新进行判断。
188.23 十一、StateEngine与DiagnosisEngine
当状态出现异常:
Expected State = active
Actual State = failed
StateEngine负责确认:
actual state = failed
但它不负责分析:
为什么失败?
DiagnosisEngine负责:
failed
→ Evidence
→ Cause Analysis
→ Diagnosis
因此:
StateEngine≠DiagnosisEngineStateEngine\neq DiagnosisEngine
状态计算和原因诊断必须分开。
188.24 十二、StateEngine与LearningEngine
StateEngine产生的是状态事实和状态计算结果。
LearningEngine处理的是经过验证的学习数据。
例如:
Object A
100次运行
→ 92次 completed
→ 8次 failed
StateEngine只负责每一次运行的状态判断:
running
→ completed
或
running
→ failed
LearningEngine则可以把这些经过验证的历史数据形成:
Learning Data
并进一步影响:
Knowledge
Capability
Method
Decision
所以:
StateEngine→StateFactsStateEngine\rightarrow StateFacts LearningEngine→CognitiveUpdateLearningEngine\rightarrow CognitiveUpdate
188.25 十三、StateEngine的PHP结构
按照ICAI的PHP 5.6/7.0工程结构,可以定义:
abstract class Engine
{
abstract public function calculate($input);
}
StateEngine:
class StateEngine extends Engine
{
public function calculate($input)
{
$state = isset($input['state'])
? $input['state']
: array();
$event = isset($input['event'])
? $input['event']
: array();
$rule = isset($input['rule'])
? $input['rule']
: array();
$condition = isset($input['condition'])
? $input['condition']
: array();
$candidate = $this->calculateTransition(
$state,
$event,
$rule,
$condition
);
return $candidate;
}
protected function calculateTransition(
$state,
$event,
$rule,
$condition
) {
$valid = true;
$target = null;
if (isset($rule['from'])) {
if (!isset($state['value']) ||
$state['value'] != $rule['from']) {
$valid = false;
}
}
if ($valid && isset($rule['event'])) {
if (!isset($event['type']) ||
$event['type'] != $rule['event']) {
$valid = false;
}
}
if ($valid && isset($rule['to'])) {
$target = $rule['to'];
}
return array(
'valid' => $valid,
'current_state' => isset($state['value'])
? $state['value']
: null,
'target_state' => $target,
'event' => $event,
'condition' => $condition,
'rule' => $rule
);
}
}
这里的StateEngine只计算:
是否允许
+
目标状态是什么
它不直接执行:
UPDATE states ...
数据库更新仍然属于StateService和Repository的职责。
188.26 十四、状态转换的实际工程流程
完整流程:
Controller
↓
StateService
↓
Load Current State
↓
Load Event
↓
Load Rule
↓
Load Condition
↓
StateEngine
↓
Calculate Transition
↓
Validate Transition
↓
Verify Evidence
↓
StateService
↓
Save State
↓
Save State History
如果转换失败:
StateEngine
→ Invalid Transition
→ StateService
→ No State Update
→ Record Failure / Reason
这样系统不会因为一次非法请求而直接破坏当前状态。
188.27 十五、状态历史
状态变化必须形成历史。
当前状态:
active
状态历史:
created
initialized
ready
active
failed
repairing
ready
active
因此:
CurrentState≠StateHistoryCurrentState\neq StateHistory
StateEngine计算的是当前转换。
State History记录的是实际发生过的转换。
完整关系:
StateEngine
→ Transition Result
→ StateService
→ Current State
→ State History
历史记录不能反向直接覆盖当前状态。
188.28 十六、状态时间计算
状态通常存在有效时间。
可以定义:
Valid(S,t)=Condition(S,t)Valid(S,t)=Condition(S,t)
例如:
session active
有效期:
10:00 - 12:00
12:30时:
Valid(active,12:30)=falseValid(active,12:30)=false
StateEngine可以计算:
active
→ expired
因此时间本身也可以成为状态转换条件。
例如:
active+t>ExpirationTime→expiredactive+t>ExpirationTime \rightarrow expired
188.29 十七、状态冲突
系统可能同时获得:
Source A → active
Source B → failed
StateEngine不能随意选择一个状态。
首先产生:
state conflict
然后:
ConflictEngine
→ Conflict Evaluation
→ Evidence Comparison
→ DecisionEngine
或者要求人工确认。
因此:
ConflictingFacts→Conflict→Decision→VerifiedStateConflictingFacts \rightarrow Conflict \rightarrow Decision \rightarrow VerifiedState
这与第182章RiskConflictService形成直接连接。
188.30 十八、状态更新的最小原则
状态更新同样遵循最小更新原则。
如果对象有:
status = active
mode = automatic
power = on
现在只证明:
power = off
那么只产生:
power:
on → off
不能因为状态变化而自动改变:
status
mode
因此:
ΔS=VerifiedStateChange\Delta S = VerifiedStateChange
而不是:
ΔS=AllRelatedFields\Delta S = AllRelatedFields
这能够避免状态污染。
188.31 十九、状态验证失败
如果计算得到:
candidate = completed
但实际结果:
execution = failed
则:
completed
不能通过验证。
形成:
Candidate State
→ Verification
→ Failed
→ Actual State = failed
因此:
CandidateState≠ActualStateCandidateState\neq ActualState
系统必须以实际经过验证的结果为准。
188.32 二十、StateEngine的异常处理
StateEngine可能遇到:
Current State Missing
Event Missing
Rule Missing
Condition Missing
Invalid Transition
Conflicting State
Evidence Missing
Outdated Evidence
Invalid State
这些情况不能简单返回:
false
应该返回结构化结果。
例如:
array(
'status' => 'invalid_transition',
'current_state' => 'archived',
'event' => 'activate',
'target_state' => 'active',
'reason' => 'transition_not_allowed'
)
这样后续DiagnosisEngine可以直接读取。
188.33 二十一、StateEngine与VerificationService
虽然StateEngine可以执行状态计算,但最终验证可以调用独立的VerificationService。
结构:
StateEngine
→ Candidate State
→ VerificationService
→ Verification Result
→ StateService
原因是:
StateEngine解决:
根据规则计算什么状态。
VerificationService解决:
这个状态有没有足够事实和证据证明。
这样可以继续保持:
Calculation≠VerificationCalculation\neq Verification
188.34 二十二、StateEngine完整闭环
StateEngine的完整运行闭环:
Current Object
↓
Current State
↓
Event
↓
Condition
↓
Rule
↓
State Calculation
↓
Transition Candidate
↓
Transition Validation
↓
Evidence Verification
↓
New State
↓
State History
↓
Feedback
↓
Future State Calculation
公式表示:
St+1=Verify(Transition(St,Et,Ct,R))S_{t+1} = Verify( Transition( S_t,E_t,C_t,R ) )
如果验证失败:
St+1=StS_{t+1}=S_t
或者根据异常规则进入:
failed
blocked
unknown
conflicted
具体取值必须由明确规则决定,不能由系统随意猜测。
188.35 二十三、StateEngine在ICAI中的位置
目前ICAI基础Engine可以进一步形成:
Engine Layer
│
┌────────────────┼────────────────┐
│ │ │
ObjectEngine StateEngine RelationEngine
│ │ │
└────────────────┼────────────────┘
│
基础事实计算层
│
┌────────────────┼────────────────┐
│ │ │
KnowledgeEngine GoalEngine CapabilityEngine
│ │ │
MethodEngine DecisionEngine
│ │
BehaviorEngine ExecutionEngine
│ │
FeedbackEngine MemoryEngine
│ │
ExperienceEngine LearningEngine
│ │
RiskEngine ConflictEngine
│ │
DiagnosisEngine RepairEngine
ObjectEngine解决:
Object是什么、满足什么条件
StateEngine解决:
Object当前处于什么状态、能否转换到什么状态
RelationEngine解决:
Object之间具有什么关系
三者共同形成ICAI基础事实计算层。
188.36 二十四、StateEngine与完整ICAI闭环
完整认知运行链:
Individual
→ Object
→ State
→ Need
→ Goal
→ Capability
→ Method
→ Decision
→ Behavior
→ Action
→ Execution
→ Result
→ Feedback
→ StateEngine
→ State Update
→ Memory
→ Experience
→ Learning
→ Knowledge / Capability / Method Update
→ New Decision
在这个过程中,StateEngine承担的是一个非常关键的中间位置:
Result→Feedback→StateEngine→StateResult \rightarrow Feedback \rightarrow StateEngine \rightarrow State
状态又会影响:
State→Capability→Method→DecisionState \rightarrow Capability \rightarrow Method \rightarrow Decision
因此状态不是系统中的附属字段,而是ICAI运行过程中连接:
对象 → 行为 → 结果 → 反馈 → 决策
的重要动态变量。
188.37 二十五、StateEngine统一模型
最终可以把StateEngine定义为:
SE=(S,E,R,C,D,T,V,H)SE=(S,E,R,C,D,T,V,H)
其中:
- SS:当前状态;
- EE:事件;
- RR:状态规则;
- CC:状态条件;
- DD:状态计算;
- TT:状态转换;
- VV:状态验证;
- HH:状态历史。
完整过程:
(St,Et,R,C)→D→T→V→St+1(S_t,E_t,R,C) \rightarrow D \rightarrow T \rightarrow V \rightarrow S_{t+1}
同时:
St→HtS_t\rightarrow H_t
形成状态历史。
工程流程:
Current State
↓
State Calculation
↓
Transition Candidate
↓
Transition Validation
↓
State Verification
↓
New State
↓
State History
188.38 二十六、本章总结
StateEngine是ICAI Engine体系中的基础状态计算引擎,核心职责不是保存状态,而是对状态进行:
Calculation+Transition+VerificationCalculation+Transition+Verification
即:
状态计算、状态转换、状态验证。
状态计算解决:
当前对象根据事实和规则应该处于什么状态。
状态转换解决:
当前状态在事件和条件满足时是否能够进入下一个合法状态。
状态验证解决:
计算得到的状态是否有事实、条件、规则和证据支持。
三者形成:
St→Calculate→Candidate→Validate→Verify→St+1S_t \rightarrow Calculate \rightarrow Candidate \rightarrow Validate \rightarrow Verify \rightarrow S_{t+1}
同时:
St→StateHistoryS_t\rightarrow StateHistory
由此形成完整状态闭环:
Object
↓
Current State
↓
Event
↓
Condition
↓
StateEngine
├── State Calculation
├── State Transition
└── State Verification
↓
New State
↓
StateService
↓
State History
最终明确ICAI的状态工程原则:
State表达当前事实,StateEngine计算状态,StateService组织状态处理,Verification验证状态,StateHistory记录状态变化。
而状态变化又会反过来影响Capability、Method、Decision、Behavior、Risk、Diagnosis和Learning,使StateEngine成为ICAI动态认知闭环中的基础计算节点。
整个机制仍然建立在对象、状态、事件、规则、条件、关系、历史、证据和离散计算之上,不依赖LLM、Transformer、Embedding、Vector Search、Prompt Engineering、神经网络或LLM API。