首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第203章 ExperienceEngine

第203章 ExperienceEngine

203.1 ExperienceEngine概述

在 ICAI 中,Memory 解决的是:

过去什么信息值得保留?

而 Experience 进一步解决:

过去发生过什么,并且在什么条件下形成了什么结果,这种历史模式是否可以用于当前认知?

因此 Experience 不是 Memory 的简单复制。

第164章定义:

Experience=(H,M,C,R,P)Experience=(H,M,C,R,P)

其中:

  • HH:History,形成经验的历史;
  • MM:Memory,与经验相关的记忆;
  • CC:Condition,经验形成条件;
  • RR:Result,历史结果;
  • PP:Pattern,从历史中形成的结构化模式。

本章定义:

ExperienceEngine=ExperienceCalculation+ExperienceCalling+ExperienceUpdatingExperienceEngine = ExperienceCalculation + ExperienceCalling + ExperienceUpdating

即:

ExperienceEngine 是 ICAI 中负责经验模式计算、经验调用和经验更新的确定性认知计算引擎。

其核心职责不是生成文字,而是从已有历史事实和记忆中计算:

History→Memory→Comparison→Pattern→ExperienceHistory \rightarrow Memory \rightarrow Comparison \rightarrow Pattern \rightarrow Experience

然后在新的 Runtime 中:

CurrentContext→ExperienceMatching→ExperienceCalling→DecisionCurrentContext \rightarrow ExperienceMatching \rightarrow ExperienceCalling \rightarrow Decision

最后根据新的结果:

NewResult→ExperienceComparison→ExperienceUpdateNewResult \rightarrow ExperienceComparison \rightarrow ExperienceUpdate

形成经验闭环。


203.2 Experience与Memory的区别

Memory:

保存过去有价值的信息。

Experience:

从多个历史事实和记忆之间的关系中形成可重复使用的结构化模式。

例如:

Memory A:

对象 O1 在状态 S1 下执行方法 M1。

Memory B:

方法 M1 执行成功。

Memory C:

相同条件下再次执行 M1 仍然成功。

这些 Memory 可以进一步形成:

ExperienceExperience

即:

当对象 O1 处于状态 S1,并满足条件 C1 时,方法 M1 具有较高的成功可能性。

因此:

Memory→Comparison→Pattern→ExperienceMemory \rightarrow Comparison \rightarrow Pattern \rightarrow Experience

所以:

Memory≠ExperienceMemory\neq Experience


203.3 ExperienceEngine核心模型

ExperienceEngine 可以定义为:

EE=(H,M,C,R,P,O,S,G,K,V,T)EE=(H,M,C,R,P,O,S,G,K,V,T)

其中:

  • EEEE:ExperienceEngine;
  • HH:History;
  • MM:Memory;
  • CC:Condition;
  • RR:Result;
  • PP:Pattern;
  • OO:Object;
  • SS:State;
  • GG:Goal;
  • KK:Knowledge;
  • VV:Verification;
  • TT:Time。

经验计算:

P=Calculate(H,M,C,R,V)P=Calculate(H,M,C,R,V)

经验调用:

Er=Recall(E,O,S,G,C,T)E_r=Recall(E,O,S,G,C,T)

经验更新:

Et+1=Update(Et,ΔF,V,C,T)E_{t+1}=Update(E_t,\Delta F,V,C,T)

其中:

  • EE:Experience;
  • ErE_r:Experience Recall Result;
  • ΔF\Delta F:新的事实变化。

203.4 ExperienceEngine三大功能

ExperienceEngine 的核心功能分为三个部分:

一、经验计算

History+Memory→Pattern→ExperienceHistory+Memory \rightarrow Pattern \rightarrow Experience

解决:

如何从过去形成经验?

二、经验调用

CurrentContext→ExperienceMatching→ExperienceRecallCurrentContext \rightarrow ExperienceMatching \rightarrow ExperienceRecall

解决:

当前是否存在可以参考的经验?

三、经验更新

NewResult→Comparison→Verification→ExperienceUpdateNewResult \rightarrow Comparison \rightarrow Verification \rightarrow ExperienceUpdate

解决:

新的事实是否改变已有经验?

因此:

ExperienceEngine=Calculate+Recall+UpdateExperienceEngine = Calculate + Recall + Update


203.5 经验候选

并不是每一次 History 都能形成 Experience。

首先产生经验候选:

History→ExperienceCandidateHistory \rightarrow ExperienceCandidate

ExperienceCandidate 可以定义:

EC=(H,M,C,R,P,V,T)EC=(H,M,C,R,P,V,T)

其中:

  • HH:历史集合;
  • MM:相关记忆;
  • CC:共同条件;
  • RR:结果;
  • PP:候选模式;
  • VV:验证程度;
  • TT:形成时间。

经验候选必须至少具有:

History∧Condition∧ResultHistory \land Condition \land Result

如果缺少必要事实:

ExperienceCandidate=InvalidExperienceCandidate=Invalid


203.6 经验计算

经验计算的核心不是统计“成功多少次”,而是识别:

Condition→Action/Method→ResultCondition \rightarrow Action/Method \rightarrow Result

之间是否存在稳定关系。

例如:

历史:

H1:C1→M1→SuccessH_1: C_1\rightarrow M_1\rightarrow Success H2:C1→M1→SuccessH_2: C_1\rightarrow M_1\rightarrow Success H3:C1→M1→SuccessH_3: C_1\rightarrow M_1\rightarrow Success

可以形成:

P1=(C1,M1,Success)P_1=(C_1,M_1,Success)

进一步形成:

Experience1Experience_1


203.7 经验模式模型

Pattern 可以定义:

P=(C,A,R,F,V)P=(C,A,R,F,V)

其中:

  • CC:Condition;
  • AA:Action 或 Method;
  • RR:Result;
  • FF:Frequency;
  • VV:Verification。

例如:

P=(C1,M1,Success,5,Verified)P= (C_1,M_1,Success,5,Verified)

表示:

在条件 C1 下,方法 M1 曾经形成 5 次可验证的成功结果。

这里的次数是事实统计,而不是机器学习训练参数。

因此:

Frequency≠NeuralWeightFrequency\neq NeuralWeight


203.8 经验成功率

在具有足够历史样本时,可以计算:

SuccessRate=NsuccessNvalidSuccessRate= \frac{N_{success}} {N_{valid}}

其中:

  • NsuccessN_{success}:成功历史数量;
  • NvalidN_{valid}:有效历史数量。

例如:

Nsuccess=8N_{success}=8 Nvalid=10N_{valid}=10

则:

SuccessRate=0.8SuccessRate=0.8

但是必须强调:

SuccessRate 只是经验中的一个计算字段,不等于经验本身。

经验仍然必须包含:

Condition+Pattern+Result+EvidenceCondition + Pattern + Result + Evidence


203.9 经验稳定性

经验还可以计算稳定程度:

Stability=NconfirmedNobservedStability= \frac{N_{confirmed}} {N_{observed}}

其中:

  • NconfirmedN_{confirmed}:经过验证并与经验一致的历史;
  • NobservedN_{observed}:观察到的相关历史。

如果:

StabilityStability

较高,说明经验模式具有较强的历史一致性。

如果新事实持续与经验冲突,则:

Stability↓Stability\downarrow

最终:

Experience→OutdatedExperience \rightarrow Outdated


203.10 经验状态

Experience 可以具有以下状态:

SE∈{Candidate,Formed,Verified,Active,Used,Confirmed,Revised,Conflicted,Outdated,Archived}S_E\in \{ Candidate, Formed, Verified, Active, Used, Confirmed, Revised, Conflicted, Outdated, Archived \}

Candidate

经验候选。

Formed

已经形成经验结构。

Verified

经过验证。

Active

可以参与经验调用。

Used

已经被当前认知过程调用。

Confirmed

新的结果进一步支持该经验。

Revised

新事实导致经验被修订。

Conflicted

出现与经验明显冲突的事实。

Outdated

经验已经不适用于当前条件。

Archived

退出普通经验调用,但保留历史。


203.11 经验验证

经验不能因为出现一次就直接成为可靠经验。

定义:

ValidExperience=History∧Condition∧Result∧Evidence∧VerificationValidExperience = History \land Condition \land Result \land Evidence \land Verification

即:

ExperienceCandidate→Validation→Verification→ExperienceExperienceCandidate \rightarrow Validation \rightarrow Verification \rightarrow Experience

因此:

ObservedPattern≠VerifiedExperienceObservedPattern \neq VerifiedExperience

这是 ICAI 与简单统计系统的重要区别。


203.12 经验调用

经验调用是 ExperienceEngine 的第二个核心功能。

定义:

Er=Recall(E,C,O,S,G,T)E_r=Recall(E,C,O,S,G,T)

其中:

  • EE:已有经验;
  • CC:当前条件;
  • OO:当前对象;
  • SS:当前状态;
  • GG:当前目标;
  • TT:当前时间;
  • ErE_r:经验调用结果。

调用过程:

CurrentContext→LoadExperience→Match→Filter→Rank→RecallCurrentContext \rightarrow LoadExperience \rightarrow Match \rightarrow Filter \rightarrow Rank \rightarrow Recall


203.13 经验匹配

经验匹配维度包括:

ExperienceMatch=Object+State+Goal+Condition+Method+Result+TimeExperienceMatch = Object + State + Goal + Condition + Method + Result + Time

例如当前:

O=O1O=O_1 S=S1S=S_1 G=G1G=G_1 C=C1C=C_1

已有经验:

E1=(C1,M1,Success)E_1=(C_1,M_1,Success)

则:

Match(E1,CurrentContext)=MatchedMatch(E_1,CurrentContext)=Matched

如果条件部分一致:

PartialPartial

如果没有相关经验:

UnmatchedUnmatched

如果证据不足:

UnknownUnknown

如果当前条件与经验明确冲突:

ConflictedConflicted


203.14 ExperienceMatchResult

经验匹配结果定义为:

EMR=(E,O,S,G,C,M,R,V,T)EMR=(E,O,S,G,C,M,R,V,T)

其中:

  • EE:Experience;
  • OO:Object Match;
  • SS:State Match;
  • GG:Goal Match;
  • CC:Condition Match;
  • MM:Method Match;
  • RR:Result Pattern Match;
  • VV:Verification;
  • TT:Time。

返回状态:

MatchedMatched PartialPartial UnmatchedUnmatched UnknownUnknown ConflictedConflicted OutdatedOutdated


203.15 经验调用排序

当存在多个经验时,需要进行排序。

可以定义:

Score(Ei)=WcCi+WsSi+WoOi+WgGi+WvVi+WrRiScore(E_i) = W_cC_i + W_sS_i + W_oO_i + W_gG_i + W_vV_i + W_rR_i

其中:

  • CiC_i:条件匹配程度;
  • SiS_i:状态匹配程度;
  • OiO_i:对象匹配程度;
  • GiG_i:目标匹配程度;
  • ViV_i:验证程度;
  • RiR_i:结果一致性;
  • Wc,Ws,Wo,Wg,Wv,WrW_c,W_s,W_o,W_g,W_v,W_r:规则权重。

然后:

Experience1,…,Experiencen→Score→Sort→RecallExperience_1,\ldots,Experience_n \rightarrow Score \rightarrow Sort \rightarrow Recall

这仍然是确定性计算。


203.16 经验调用不是决策

这是 ExperienceEngine 最重要的工程边界之一。

ExperienceEngine:

提供历史经验参考。

DecisionEngine:

根据当前所有条件选择方案。

所以:

ExperienceRecall≠DecisionExperienceRecall \neq Decision

正确流程:

ExperienceEngine→RelevantExperience→DecisionEngineExperienceEngine \rightarrow RelevantExperience \rightarrow DecisionEngine

DecisionEngine 还必须同时考虑:

  • Current State;
  • Capability;
  • Method;
  • Risk;
  • Conflict;
  • Knowledge;
  • Goal;
  • Resource。

因此经验不能直接强制系统执行过去的方法。


203.17 当前事实优先于经验

和 Memory 一样:

CurrentVerifiedFact>ExperienceCurrentVerifiedFact > Experience

例如过去经验:

E1:S1→M1→SuccessE_1: S_1\rightarrow M_1\rightarrow Success

但是当前:

State=S2State=S_2

并且:

S2S_2

与经验条件冲突。

那么:

ExperienceMatch=ConflictedExperienceMatch=Conflicted

不能继续直接采用:

M1M_1

必须重新经过:

Matching→Risk→DecisionMatching \rightarrow Risk \rightarrow Decision


203.18 经验更新

Experience 的更新模型:

Et+1=Update(Et,ΔF,V,C,T)E_{t+1} = Update(E_t,\Delta F,V,C,T)

其中:

  • EtE_t:当前经验;
  • ΔF\Delta F:新的事实;
  • VV:验证;
  • CC:条件;
  • TT:时间;
  • Et+1E_{t+1}:新经验。

主要更新类型:

CreateCreate ConfirmConfirm StrengthenStrengthen ReviseRevise ConflictConflict WeakenWeaken OutdateOutdate ArchiveArchive


203.19 经验确认

如果新的历史再次符合已有经验:

NewHistory≈ExperiencePatternNewHistory \approx ExperiencePattern

则:

Experience→ConfirmedExperience \rightarrow Confirmed

并更新:

NobservedN_{observed}

以及:

NconfirmedN_{confirmed}

例如:

原经验:

Nconfirmed=3N_{confirmed}=3

新事实验证成功:

Nconfirmed=4N_{confirmed}=4

同时可以重新计算:

StabilityStability


203.20 经验强化

如果连续的新事实支持原经验:

Et→Et+1E_t \rightarrow E_{t+1}

经验的历史支持程度增加。

可以定义:

Confidence=NconfirmedNvalidConfidence= \frac{ N_{confirmed} }{ N_{valid} }

这里的 Confidence 仍然是明确统计计算,而不是神经网络参数。

如果:

Nconfirmed=9N_{confirmed}=9 Nvalid=10N_{valid}=10

则:

Confidence=0.9Confidence=0.9


203.21 经验冲突

如果新的事实与经验模式冲突:

NewFact⊭PatternNewFact \not\models Pattern

则:

Experience→ConflictedExperience \rightarrow Conflicted

但是不能马上删除经验。

应该保留:

OriginalExperienceOriginalExperience

并记录:

ConflictHistoryConflictHistory

然后分析:

  1. 是否对象发生变化;
  2. 是否条件发生变化;
  3. 是否状态发生变化;
  4. 是否方法发生变化;
  5. 是否环境发生变化;
  6. 是否原经验本身错误。

因此:

Conflict→Diagnosis→RevisionConflict \rightarrow Diagnosis \rightarrow Revision

而不是:

Conflict→DeleteConflict \rightarrow Delete


203.22 经验修订

如果新事实证明原经验只适用于部分条件:

原:

C1→M1→SuccessC_1\rightarrow M_1\rightarrow Success

新事实发现:

C1∧S1→M1→SuccessC_1\land S_1 \rightarrow M_1 \rightarrow Success

但:

C1∧S2→M1→FailureC_1\land S_2 \rightarrow M_1 \rightarrow Failure

则经验应该修订为:

C1∧S1→M1→SuccessC_1\land S_1 \rightarrow M_1 \rightarrow Success

而不是继续保留过于宽泛的:

C1→M1→SuccessC_1\rightarrow M_1\rightarrow Success

这就是经验结构化的重要意义。


203.23 经验与LearningEngine

ExperienceEngine 负责:

History→Pattern→ExperienceHistory \rightarrow Pattern \rightarrow Experience

LearningEngine 负责:

Experience+Evidence+Verification→Knowledge/Capability/MethodUpdateExperience + Evidence + Verification \rightarrow Knowledge/Capability/Method Update

因此:

ExperienceEngine≠LearningEngineExperienceEngine\neq LearningEngine

正确关系:

ExperienceEngine→LearningEngineExperienceEngine \rightarrow LearningEngine

例如经验发现:

方法 M1 在条件 C1 下成功率较高。

LearningEngine 可以进一步判断:

是否应该更新 Method M1 的适用条件?

所以:

Experience→LearningCandidate→Learning→MethodUpdateExperience \rightarrow LearningCandidate \rightarrow Learning \rightarrow MethodUpdate


203.24 Experience与Knowledge

Experience:

个体过去形成的结构化实践模式。

Knowledge:

当前系统认可并可计算、验证、应用的知识。

关系:

Experience→KnowledgeCandidate→Verification→KnowledgeExperience \rightarrow KnowledgeCandidate \rightarrow Verification \rightarrow Knowledge

因此:

Experience≠KnowledgeExperience\neq Knowledge

经验可以成为知识更新的依据,但未经验证的经验不能自动成为知识。


203.25 ExperienceEngine与DecisionEngine

完整关系:

Goal→Capability→Method→ExperienceRecall→Risk→DecisionGoal \rightarrow Capability \rightarrow Method \rightarrow ExperienceRecall \rightarrow Risk \rightarrow Decision

ExperienceEngine 可以告诉 DecisionEngine:

过去类似条件下哪些方法发生过什么结果。

但 DecisionEngine 最终仍然需要计算:

Candidate+Condition+Capability+Risk+Experience→DecisionCandidate + Condition + Capability + Risk + Experience \rightarrow Decision


203.26 ExperienceEngine完整PHP实现

首先建立基础 Engine:

<?php

abstract class Engine
{
    public function calculate($input)
    {
        return array();
    }
}

然后定义 Experience 对象:

class Experience
{
    protected $id;
    protected $individualId;
    protected $history;
    protected $memory;
    protected $condition;
    protected $result;
    protected $pattern;
    protected $state;
    protected $confidence;
    protected $createdAt;
    protected $updatedAt;

    public function __construct($data = array())
    {
        $this->id = isset($data['id'])
            ? $data['id']
            : null;

        $this->individualId = isset($data['individual_id'])
            ? $data['individual_id']
            : null;

        $this->history = isset($data['history'])
            ? $data['history']
            : array();

        $this->memory = isset($data['memory'])
            ? $data['memory']
            : array();

        $this->condition = isset($data['condition'])
            ? $data['condition']
            : array();

        $this->result = isset($data['result'])
            ? $data['result']
            : array();

        $this->pattern = isset($data['pattern'])
            ? $data['pattern']
            : array();

        $this->state = isset($data['state'])
            ? $data['state']
            : 'candidate';

        $this->confidence = isset($data['confidence'])
            ? (float)$data['confidence']
            : 0.0;

        $this->createdAt = isset($data['created_at'])
            ? $data['created_at']
            : time();

        $this->updatedAt = isset($data['updated_at'])
            ? $data['updated_at']
            : time();
    }

    public function getId()
    {
        return $this->id;
    }

    public function getHistory()
    {
        return $this->history;
    }

    public function getMemory()
    {
        return $this->memory;
    }

    public function getCondition()
    {
        return $this->condition;
    }

    public function getResult()
    {
        return $this->result;
    }

    public function getPattern()
    {
        return $this->pattern;
    }

    public function getState()
    {
        return $this->state;
    }

    public function getConfidence()
    {
        return $this->confidence;
    }

    public function setState($state)
    {
        $this->state = $state;
    }

    public function setConfidence($confidence)
    {
        $this->confidence = (float)$confidence;
    }

    public function toArray()
    {
        return array(
            'id' => $this->id,
            'individual_id' => $this->individualId,
            'history' => $this->history,
            'memory' => $this->memory,
            'condition' => $this->condition,
            'result' => $this->result,
            'pattern' => $this->pattern,
            'state' => $this->state,
            'confidence' => $this->confidence,
            'created_at' => $this->createdAt,
            'updated_at' => $this->updatedAt
        );
    }
}

203.27 ExperienceEngine类

class ExperienceEngine extends Engine
{
    protected $rules;

    public function __construct($rules = array())
    {
        $this->rules = $rules;
    }

    public function calculate($input)
    {
        $experienceCalculation =
            $this->calculateExperience($input);

        $experienceCalling =
            $this->callExperience(
                isset($input['experiences'])
                    ? $input['experiences']
                    : array(),
                isset($input['context'])
                    ? $input['context']
                    : array()
            );

        $experienceUpdate =
            $this->calculateUpdate($input);

        return array(
            'calculation' => $experienceCalculation,
            'calling' => $experienceCalling,
            'update' => $experienceUpdate,
            'time' => time()
        );
    }
}

203.28 经验计算PHP实现

经验计算从 History 开始:

public function calculateExperience($input)
{
    $history = isset($input['history'])
        ? $input['history']
        : array();

    $result = array();

    foreach ($history as $item) {

        if (!$this->validHistory($item)) {
            continue;
        }

        $condition =
            $this->extractCondition($item);

        $action =
            $this->extractAction($item);

        $resultData =
            $this->extractResult($item);

        $pattern = array(
            'condition' => $condition,
            'action' => $action,
            'result' => $resultData
        );

        $result[] = array(
            'history' => $item,
            'condition' => $condition,
            'action' => $action,
            'result' => $resultData,
            'pattern' => $pattern,
            'verification' =>
                $this->calculateHistoryVerification($item),
            'time' => time()
        );
    }

    return $this->groupPatterns($result);
}

203.29 History有效性验证

protected function validHistory($item)
{
    if (!is_array($item)) {
        return false;
    }

    if (!isset($item['result'])) {
        return false;
    }

    if (!isset($item['condition'])) {
        return false;
    }

    return true;
}

其理论关系:

ValidHistory=Condition∧ResultValidHistory = Condition \land Result

如果还要求实际证据:

ValidHistory=Condition∧Result∧EvidenceValidHistory = Condition \land Result \land Evidence


203.30 条件提取

protected function extractCondition($item)
{
    if (isset($item['condition'])) {
        return $item['condition'];
    }

    return array();
}

203.31 Action/Method提取

protected function extractAction($item)
{
    if (isset($item['method'])) {
        return array(
            'type' => 'method',
            'id' => $item['method']
        );
    }

    if (isset($item['action'])) {
        return array(
            'type' => 'action',
            'id' => $item['action']
        );
    }

    return array();
}

这样 Experience 可以同时描述:

Condition→Method→ResultCondition \rightarrow Method \rightarrow Result

或者:

Condition→Action→ResultCondition \rightarrow Action \rightarrow Result


203.32 Result提取

protected function extractResult($item)
{
    if (isset($item['result'])) {
        return $item['result'];
    }

    return array();
}

203.33 历史验证

protected function calculateHistoryVerification($item)
{
    if (isset($item['verification'])) {

        if ($item['verification'] === true) {
            return 1.0;
        }

        return $this->normalize(
            $item['verification']
        );
    }

    if (isset($item['result_status'])) {

        if ($item['result_status'] === 'success') {
            return 1.0;
        }

        if ($item['result_status'] === 'failed') {
            return 0.5;
        }
    }

    return 0.0;
}

203.34 Pattern分组

多个历史如果具有相同的:

Condition+Action+ResultTypeCondition + Action + ResultType

可以形成一个 Experience Pattern。

protected function groupPatterns($items)
{
    $groups = array();

    foreach ($items as $item) {

        $key = $this->buildPatternKey(
            $item['condition'],
            $item['action'],
            $item['result']
        );

        if (!isset($groups[$key])) {
            $groups[$key] = array(
                'condition' =>
                    $item['condition'],

                'action' =>
                    $item['action'],

                'result' =>
                    $item['result'],

                'history_count' => 0,

                'verified_count' => 0
            );
        }

        $groups[$key]['history_count']++;

        if ($item['verification'] >= 1.0) {
            $groups[$key]['verified_count']++;
        }
    }

    foreach ($groups as $key => $group) {

        $groups[$key]['stability'] =
            $this->calculateStability(
                $group['verified_count'],
                $group['history_count']
            );
    }

    return array_values($groups);
}

203.35 Pattern Key

protected function buildPatternKey(
    $condition,
    $action,
    $result
) {
    return md5(
        serialize(
            array(
                $condition,
                $action,
                $result
            )
        )
    );
}

这里的 md5() 只是用于生成结构键,不是用于 AI 计算。


203.36 稳定性计算

Stability=NverifiedNhistoryStability = \frac{N_{verified}} {N_{history}}

PHP:

protected function calculateStability(
    $verified,
    $total
) {
    if ($total <= 0) {
        return 0.0;
    }

    return $this->normalize(
        $verified / $total
    );
}

203.37 经验调用PHP实现

public function callExperience(
    $experiences,
    $context
) {
    $results = array();

    foreach ($experiences as $experience) {

        $match =
            $this->matchExperience(
                $experience,
                $context
            );

        if ($match['status'] === 'unmatched') {
            continue;
        }

        $score =
            $this->calculateExperienceScore(
                $match
            );

        $results[] = array(
            'experience' => $experience,
            'match' => $match,
            'score' => $score
        );
    }

    usort(
        $results,
        array($this, 'sortExperience')
    );

    return $results;
}

203.38 经验匹配

protected function matchExperience(
    $experience,
    $context
) {
    $objectMatch = false;
    $stateMatch = false;
    $goalMatch = false;
    $conditionMatch = false;

    if (isset($experience['object_id']) &&
        isset($context['object_id'])) {

        $objectMatch =
            $experience['object_id'] ==
            $context['object_id'];
    }

    if (isset($experience['state']) &&
        isset($context['state'])) {

        $stateMatch =
            $experience['state'] ==
            $context['state'];
    }

    if (isset($experience['goal_id']) &&
        isset($context['goal_id'])) {

        $goalMatch =
            $experience['goal_id'] ==
            $context['goal_id'];
    }

    if (isset($experience['condition']) &&
        isset($context['condition'])) {

        $conditionMatch =
            $this->matchCondition(
                $experience['condition'],
                $context['condition']
            );
    }

    $matchedCount = 0;
    $dimensionCount = 0;

    if (isset($experience['object_id'])) {
        $dimensionCount++;

        if ($objectMatch) {
            $matchedCount++;
        }
    }

    if (isset($experience['state'])) {
        $dimensionCount++;

        if ($stateMatch) {
            $matchedCount++;
        }
    }

    if (isset($experience['goal_id'])) {
        $dimensionCount++;

        if ($goalMatch) {
            $matchedCount++;
        }
    }

    if (isset($experience['condition'])) {
        $dimensionCount++;

        if ($conditionMatch) {
            $matchedCount++;
        }
    }

    if ($dimensionCount == 0) {
        return array(
            'status' => 'unknown',
            'score' => 0.0
        );
    }

    $score =
        $matchedCount / $dimensionCount;

    if ($score >= 1.0) {
        $status = 'matched';
    } elseif ($score > 0) {
        $status = 'partial';
    } else {
        $status = 'unmatched';
    }

    return array(
        'object_match' => $objectMatch,
        'state_match' => $stateMatch,
        'goal_match' => $goalMatch,
        'condition_match' => $conditionMatch,
        'status' => $status,
        'score' => $score
    );
}

203.39 Condition匹配

条件匹配不能简单依赖字符串完全相等。

可以使用结构化条件。

protected function matchCondition(
    $experienceCondition,
    $currentCondition
) {
    if (!is_array($experienceCondition) ||
        !is_array($currentCondition)) {

        return false;
    }

    foreach ($experienceCondition as $key => $value) {

        if (!array_key_exists(
            $key,
            $currentCondition
        )) {
            return false;
        }

        if ($currentCondition[$key] != $value) {
            return false;
        }
    }

    return true;
}

其逻辑:

Match(Ce,Cc)=⋀iMatch(cei,cci)Match(C_e,C_c) = \bigwedge_i Match(c_{e_i},c_{c_i})


203.40 Experience Score

经验排序:

protected function calculateExperienceScore(
    $match
) {
    $score = 0.0;

    $score +=
        $match['score'] * 0.6;

    if (!empty($match['state_match'])) {
        $score += 0.1;
    }

    if (!empty($match['goal_match'])) {
        $score += 0.1;
    }

    if (!empty($match['condition_match'])) {
        $score += 0.2;
    }

    return $this->normalize($score);
}

这里的 0.6 / 0.1 / 0.1 / 0.2 是明确的规则权重。

生产系统中应该从规则配置读取,而不是把所有业务规则永久硬编码在 Engine 中。


203.41 经验排序

protected function sortExperience(
    $a,
    $b
) {
    if ($a['score'] == $b['score']) {
        return 0;
    }

    return ($a['score'] > $b['score'])
        ? -1
        : 1;
}

所以:

Score(E1)>Score(E2)Score(E_1)>Score(E_2)

则:

E1E_1

优先被调用。


203.42 经验更新PHP实现

public function calculateUpdate($input)
{
    $experiences = isset($input['experiences'])
        ? $input['experiences']
        : array();

    $newFact = isset($input['new_fact'])
        ? $input['new_fact']
        : array();

    $updates = array();

    foreach ($experiences as $experience) {

        $comparison =
            $this->compareExperience(
                $experience,
                $newFact
            );

        $updateType =
            $this->determineUpdateType(
                $comparison
            );

        $updates[] = array(
            'experience' => $experience,
            'comparison' => $comparison,
            'update_type' => $updateType,
            'time' => time()
        );
    }

    return $updates;
}

203.43 经验比较

protected function compareExperience(
    $experience,
    $newFact
) {
    $conditionSame =
        $this->sameValue(
            isset($experience['condition'])
                ? $experience['condition']
                : array(),
            isset($newFact['condition'])
                ? $newFact['condition']
                : array()
        );

    $resultSame =
        $this->sameValue(
            isset($experience['result'])
                ? $experience['result']
                : array(),
            isset($newFact['result'])
                ? $newFact['result']
                : array()
        );

    $actionSame =
        $this->sameValue(
            isset($experience['action'])
                ? $experience['action']
                : array(),
            isset($newFact['action'])
                ? $newFact['action']
                : array()
        );

    if ($conditionSame &&
        $actionSame &&
        $resultSame) {

        return 'confirmed';
    }

    if ($conditionSame &&
        $actionSame &&
        !$resultSame) {

        return 'conflict';
    }

    if ($conditionSame &&
        !$actionSame) {

        return 'revised';
    }

    return 'unrelated';
}

203.44 更新类型计算

protected function determineUpdateType(
    $comparison
) {
    switch ($comparison) {

        case 'confirmed':
            return 'strengthen';

        case 'conflict':
            return 'conflict';

        case 'revised':
            return 'revise';

        case 'unrelated':
        default:
            return 'no_change';
    }
}

因此:

Comparison→UpdateTypeComparison \rightarrow UpdateType


203.45 经验真正更新

计算出更新候选后,再执行更新。

public function updateExperience(
    $experience,
    $update
) {
    if (!is_array($experience)) {
        return array(
            'status' => 'invalid'
        );
    }

    $type =
        isset($update['update_type'])
            ? $update['update_type']
            : 'no_change';

    switch ($type) {

        case 'strengthen':

            $experience =
                $this->strengthenExperience(
                    $experience
                );

            break;

        case 'conflict':

            $experience =
                $this->markExperienceConflict(
                    $experience
                );

            break;

        case 'revise':

            $experience =
                $this->reviseExperience(
                    $experience,
                    $update
                );

            break;

        case 'no_change':
        default:
            break;
    }

    return array(
        'status' => 'updated',
        'experience' => $experience,
        'type' => $type,
        'time' => time()
    );
}

203.46 经验强化

protected function strengthenExperience(
    $experience
) {
    $confirmed =
        isset($experience['confirmed_count'])
            ? (int)$experience['confirmed_count']
            : 0;

    $observed =
        isset($experience['observed_count'])
            ? (int)$experience['observed_count']
            : 0;

    $confirmed++;
    $observed++;

    $experience['confirmed_count'] =
        $confirmed;

    $experience['observed_count'] =
        $observed;

    if ($observed > 0) {
        $experience['confidence'] =
            $confirmed / $observed;
    }

    $experience['state'] =
        'confirmed';

    $experience['updated_at'] =
        time();

    return $experience;
}

203.47 经验冲突

protected function markExperienceConflict(
    $experience
) {
    $experience['state'] =
        'conflicted';

    $experience['updated_at'] =
        time();

    if (!isset(
        $experience['conflict_count']
    )) {
        $experience['conflict_count'] = 0;
    }

    $experience['conflict_count']++;

    return $experience;
}

注意:

Conflict≠DeleteConflict \neq Delete

冲突经验仍然保留,因为它是历史事实的一部分。


203.48 经验修订

protected function reviseExperience(
    $experience,
    $update
) {
    if (isset(
        $update['new_condition']
    )) {
        $experience['condition'] =
            $update['new_condition'];
    }

    if (isset(
        $update['new_action']
    )) {
        $experience['action'] =
            $update['new_action'];
    }

    if (isset(
        $update['new_result']
    )) {
        $experience['result'] =
            $update['new_result'];
    }

    $experience['state'] =
        'revised';

    $experience['updated_at'] =
        time();

    return $experience;
}

203.49 通用值比较

protected function sameValue(
    $a,
    $b
) {
    return serialize($a) ===
        serialize($b);
}

该方法用于确定两个结构化事实是否完全一致。


203.50 数值归一化

protected function normalize($value)
{
    $value = (float)$value;

    if ($value < 0) {
        return 0.0;
    }

    if ($value > 1) {
        return 1.0;
    }

    return $value;
}

这样所有内部评分都可以统一到:

0≤X≤10\leq X\leq1


203.51 ExperienceEngine统一入口

最终可以提供:

public function process($input)
{
    $calculation =
        $this->calculateExperience(
            $input
        );

    $calling =
        $this->callExperience(
            isset($input['experiences'])
                ? $input['experiences']
                : array(),
            isset($input['context'])
                ? $input['context']
                : array()
        );

    $updates =
        $this->calculateUpdate(
            $input
        );

    return array(
        'experience_calculation' =>
            $calculation,

        'experience_calling' =>
            $calling,

        'experience_updates' =>
            $updates,

        'status' => 'calculated',

        'time' => time()
    );
}

这样形成:

ExperienceEngine.process()ExperienceEngine.process()

统一执行:

Calculation→Calling→UpdatingCalculation \rightarrow Calling \rightarrow Updating


203.52 一个完整的实际计算数据结构

输入:

$input = array(
    'history' => array(
        array(
            'object_id' => 1001,
            'condition' => array(
                'state' => 'ready',
                'temperature' => 'normal'
            ),
            'method' => 2001,
            'result' => array(
                'status' => 'success'
            ),
            'verification' => true
        ),

        array(
            'object_id' => 1001,
            'condition' => array(
                'state' => 'ready',
                'temperature' => 'normal'
            ),
            'method' => 2001,
            'result' => array(
                'status' => 'success'
            ),
            'verification' => true
        )
    ),

    'context' => array(
        'object_id' => 1001,
        'state' => 'ready',
        'condition' => array(
            'state' => 'ready',
            'temperature' => 'normal'
        )
    ),

    'experiences' => array(
        array(
            'id' => 5001,
            'object_id' => 1001,
            'condition' => array(
                'state' => 'ready',
                'temperature' => 'normal'
            ),
            'action' => array(
                'type' => 'method',
                'id' => 2001
            ),
            'result' => array(
                'status' => 'success'
            ),
            'state' => 'active',
            'confidence' => 0.8
        )
    ),

    'new_fact' => array(
        'object_id' => 1001,
        'condition' => array(
            'state' => 'ready',
            'temperature' => 'normal'
        ),
        'action' => array(
            'type' => 'method',
            'id' => 2001
        ),
        'result' => array(
            'status' => 'success'
        )
    )
);

执行:

$engine =
    new ExperienceEngine();

$result =
    $engine->process($input);

得到的结果结构可以类似:

array(
    'experience_calculation' => array(
        // 根据历史计算出的经验候选
    ),

    'experience_calling' => array(
        // 与当前对象、状态、条件匹配的经验
    ),

    'experience_updates' => array(
        // confirmed / strengthen / conflict / revise
    ),

    'status' => 'calculated',

    'time' => 1726000000
);

这里的关键不是返回某一个固定数值,而是完整保留:

Input→Pattern→Match→Score→UpdateInput \rightarrow Pattern \rightarrow Match \rightarrow Score \rightarrow Update

整个计算过程。


203.53 PHP工程中的Service边界

ExperienceEngine 不应该直接承担数据库事务。

正确结构:

Controller
    ↓
ExperienceService
    ↓
ExperienceEngine
    ↓
ExperienceRepository
    ↓
MySQL

ExperienceService:

class ExperienceService
{
    protected $engine;
    protected $repository;

    public function __construct(
        $engine,
        $repository
    ) {
        $this->engine = $engine;
        $this->repository = $repository;
    }

    public function calculate($input)
    {
        return $this->engine->process($input);
    }
}

因此:

ExperienceService=流程协调ExperienceService = 流程协调 ExperienceEngine=经验计算ExperienceEngine = 经验计算 ExperienceRepository=经验持久化ExperienceRepository = 经验持久化


203.54 数据库结构

ExperienceEngine 对应的持久化层可以使用:

experiences
experience_history
experience_conditions
experience_patterns
experience_relations
experience_verifications
experience_usage
experience_conflicts
experience_updates

其中:

experiences

保存正式经验。

experience_history

保存经验形成所依据的历史。

experience_conditions

保存经验适用条件。

experience_patterns

保存结构化模式。

experience_relations

保存经验之间的关系。

experience_verifications

保存验证记录。

experience_usage

保存经验何时被调用。

experience_conflicts

保存经验冲突。

experience_updates

保存经验更新过程。


203.55 ExperienceEngine与MemoryEngine的工程关系

上一章 MemoryEngine:

History→MemoryHistory \rightarrow Memory

本章 ExperienceEngine:

History+Memory→ExperienceHistory + Memory \rightarrow Experience

所以:

MemoryEngine→ExperienceEngineMemoryEngine \rightarrow ExperienceEngine

例如:

History
  ↓
MemoryEngine
  ↓
Memory
  ↓
ExperienceEngine
  ↓
Experience

但不能理解成:

Memory=ExperienceMemory=Experience

二者必须保持独立的数据结构。


203.56 ExperienceEngine与LearningEngine

经验形成以后,可以进入 LearningEngine:

Experience
   ↓
Evidence
   ↓
Verification
   ↓
Learning Candidate
   ↓
Knowledge / Capability / Method

因此:

ExperienceEngine→LearningEngineExperienceEngine \rightarrow LearningEngine

但是:

ExperienceEngine≠LearningEngineExperienceEngine \neq LearningEngine

ExperienceEngine 发现模式。

LearningEngine 判断是否应该改变系统未来的认知基础。


203.57 ExperienceEngine与RiskEngine

经验还可以帮助风险计算:

Experience→RiskCandidateExperience \rightarrow RiskCandidate

例如:

过去:

C1→M1→FailureC_1\rightarrow M_1\rightarrow Failure

重复出现。

RiskEngine 可以得到:

RiskCandidate=C1+M1+HistoricalFailureRiskCandidate = C_1+M_1+HistoricalFailure

然后计算:

RiskScoreRiskScore

因此:

ExperienceEngine→RiskEngineExperienceEngine \rightarrow RiskEngine

但 ExperienceEngine 本身不负责风险处理。


203.58 ExperienceEngine与DecisionEngine

完整关系:

ExperienceRecall→CandidateEvidence→DecisionEngineExperienceRecall \rightarrow CandidateEvidence \rightarrow DecisionEngine

Experience 只是 Decision 的依据之一。

最终:

Decision=f(Goal,State,Capability,Method,Risk,Conflict,Knowledge,Memory,Experience)Decision = f( Goal, State, Capability, Method, Risk, Conflict, Knowledge, Memory, Experience )

仍然采用确定性规则和离散计算。


203.59 ExperienceEngine完整认知闭环

完整经验闭环:

Execution→Result→Feedback→History→Memory→ExperienceExecution \rightarrow Result \rightarrow Feedback \rightarrow History \rightarrow Memory \rightarrow Experience

然后:

Experience→Recall→Decision→Behavior→Action→ExecutionExperience \rightarrow Recall \rightarrow Decision \rightarrow Behavior \rightarrow Action \rightarrow Execution

形成:

Experience→Decision→Execution→Result→Feedback→ExperienceExperience \rightarrow Decision \rightarrow Execution \rightarrow Result \rightarrow Feedback \rightarrow Experience

如果新的事实支持经验:

Experience→StrengthenExperience \rightarrow Strengthen

如果新的事实不一致:

Experience→Conflict→Diagnosis→RevisionExperience \rightarrow Conflict \rightarrow Diagnosis \rightarrow Revision

如果长期失效:

Experience→Outdated→ArchivedExperience \rightarrow Outdated \rightarrow Archived


203.60 ExperienceEngine确定性原则

ExperienceEngine 必须保持确定性和可解释性。

对于相同:

History+Memory+Condition+RuleHistory + Memory + Condition + Rule

应得到相同的:

PatternPattern

对于相同:

Experience+RuntimeExperience + Runtime

应得到相同的:

MatchMatch

和:

ScoreScore

因此:

f(X)=Yf(X)=Y

而不是:

f(X)=Random(Y)f(X)=Random(Y)

ExperienceEngine 不需要:

  • LLM;
  • Transformer;
  • Embedding;
  • Vector Search;
  • Prompt Engineering;
  • Neural Network;
  • LLM API。

它使用:

History+Memory+Condition+Result+Relation+Rule+VerificationHistory + Memory + Condition + Result + Relation + Rule + Verification

形成经验计算。


203.61 ExperienceEngine可解释性

每一次经验计算必须能够追溯:

经验从哪些历史形成?

哪些 Memory 支持经验?

经验适用什么条件?

为什么当前调用这个经验?

为什么这个经验排名较高?

为什么经验被确认?

为什么经验发生冲突?

为什么经验被修订?

因此:

History→Evidence→Pattern→ExperienceHistory \rightarrow Evidence \rightarrow Pattern \rightarrow Experience

调用:

Runtime→Match→Score→RecallRuntime \rightarrow Match \rightarrow Score \rightarrow Recall

更新:

NewFact→Compare→Verify→UpdateNewFact \rightarrow Compare \rightarrow Verify \rightarrow Update

整个过程都可以通过结构化数据追踪。


203.62 ExperienceEngine最终架构

                         ExperienceEngine
                                │
             ┌──────────────────┼──────────────────┐
             ↓                  ↓                  ↓
     ExperienceCalculation ExperienceCalling ExperienceUpdating
             │                  │                  │
             ↓                  ↓                  ↓
          History             Context          New Fact
             │                  │                  │
             ↓                  ↓                  ↓
          Pattern            Matching          Comparison
             │                  │                  │
             ↓                  ↓                  ↓
        Verification          Ranking          Conflict
             │                  │                  │
             ↓                  ↓                  ↓
        Experience            Recall           Revision
             │                  │                  │
             └──────────────────┼──────────────────┘
                                ↓
                       Experience Result
                                │
              ┌─────────────────┼─────────────────┐
              ↓                 ↓                 ↓
       DecisionEngine     RiskEngine       LearningEngine

203.63 第203章总结

ExperienceEngine 的核心不是保存历史,而是从历史和记忆中形成可以再次调用的结构化经验。

核心模型:

Experience=(H,M,C,R,P)Experience=(H,M,C,R,P)

核心引擎:

ExperienceEngine=ExperienceCalculation+ExperienceCalling+ExperienceUpdatingExperienceEngine = ExperienceCalculation + ExperienceCalling + ExperienceUpdating

经验计算:

History+Memory→Comparison→Pattern→ExperienceHistory + Memory \rightarrow Comparison \rightarrow Pattern \rightarrow Experience

经验调用:

CurrentContext→Matching→Ranking→RecallCurrentContext \rightarrow Matching \rightarrow Ranking \rightarrow Recall

经验更新:

NewFact→Comparison→Verification→Confirm/Strengthen/Revise/ConflictNewFact \rightarrow Comparison \rightarrow Verification \rightarrow Confirm/Strengthen/Revise/Conflict

最终闭环:

Result→Feedback→History→Memory→Experience→Decision→Behavior→Execution→ResultResult \rightarrow Feedback \rightarrow History \rightarrow Memory \rightarrow Experience \rightarrow Decision \rightarrow Behavior \rightarrow Execution \rightarrow Result

因此,在 ICAI 的完整认知体系中:

Memory=过去有价值的信息Memory = 过去有价值的信息 Experience=过去形成的结构化模式Experience = 过去形成的结构化模式 Knowledge=经过验证并可计算应用的认知知识Knowledge = 经过验证并可计算应用的认知知识 Learning=改变未来认知基础的更新过程Learning = 改变未来认知基础的更新过程

四者形成:

Memory→Experience→Learning→Knowledge/Capability/MethodMemory \rightarrow Experience \rightarrow Learning \rightarrow Knowledge/Capability/Method

而 ExperienceEngine 正处于这一认知链条的关键位置。

它使 ICAI 不仅能够“记住过去”,还能够从过去形成结构化经验,并将经验重新带回当前的决策、风险、方法和行为计算中。

Leave a Reply

Your email address will not be published. Required fields are marked *