第44章 FactMemory
FactMemory(事实记忆)是 LongMemory 中专门用于保存、查询、验证和维护**事实(Fact)**的记忆机制。
如果 LongMemory 解决:
“过去发生过什么、过去保存了什么?”
那么 FactMemory 进一步解决:
“这个事实是什么?是否真实有效?现在还能不能作为认知依据?”
Fact 是 ICAI 进行理解、推理和决策的重要基础。
1. Fact 定义
Fact(事实)是经过记录、识别或验证后,可以作为认知依据的结构化信息单元。
最基本的形式:
Subject
↓
Property
↓
Value
例如:
Company_A
↓
location
↓
Shenzhen
表示:
Company_A 的 location 是 Shenzhen。
Fact 也可以表示关系:
Company_A
↓
provides
↓
Service_A
因此 Fact 不只是“属性事实”,还可以表示:
对象事实
属性事实
关系事实
状态事实
时间事实
地点事实
事件事实
例如:
Customer_A
location = Shenzhen
Customer_A
uses
Service_A
Order_001
state = completed
Order_001
completed_at = 2026-08-23
这些都可以成为 Fact。
2. Fact 结构
Fact 必须具有明确结构,不能只是保存一段没有上下文的文字。
基本结构:
Fact
{
id
subject
predicate
value
type
source
state
confidence
created_at
updated_at
}
例如:
{
"id": 1001,
"subject": "Company_A",
"predicate": "location",
"value": "Shenzhen",
"type": "property",
"source": "source_001",
"state": "confirmed",
"confidence": 0.95,
"created_at": "2026-08-20",
"updated_at": "2026-08-20"
}
其中:
subject
表示事实主体。
predicate
表示事实关系或属性。
value
表示事实值。
因此:
Fact
=
Subject
+
Predicate
+
Value
是 Fact 最基础的结构。
Fact关系结构
当 Fact 表示对象之间的关系时,可以扩展为:
Fact
{
subject: "Company_A",
predicate: "provides",
object: "Service_A"
}
形成:
Company_A
↓
provides
↓
Service_A
此时 object 与普通属性 Fact 中的 value 不完全相同。
例如:
location = Shenzhen
是:
Subject + Property + Value
而:
Company_A → provides → Service_A
是:
Subject + Relation + Object
因此 FactMemory 可以同时保存两种结构。
3. Fact 保存
Fact 保存的基本流程:
Information
↓
Perception
↓
Element
↓
Object / Property / Relation
↓
Fact
↓
Fact Validation
↓
FactMemory
不是所有获取到的信息都应该立即成为 confirmed Fact。
例如:
输入信息
↓
识别
↓
Fact Candidate
↓
验证
↓
Confirmed Fact
因此可以存在:
candidate
confirmed
uncertain
conflict
invalid
等事实状态。
一个简单的保存结构:
FactMemory
{
"facts": [
{
"id": 1001,
"subject": "Company_A",
"predicate": "location",
"value": "Shenzhen",
"state": "confirmed"
}
]
}
保存时首先需要判断:
是否已经存在?
↓
是 → 查询已有 Fact
↓
否 → 创建新 Fact
这样可以避免重复保存完全相同的事实。
4. Fact 查询
FactMemory 的查询必须支持结构化条件。
例如:
subject = Company_A
查询:
Company_A
可以得到:
Company_A
location = Shenzhen
provides = Service_A
status = active
按属性查询
例如:
subject = Company_A
predicate = location
结果:
Company_A
location
Shenzhen
按值查询
例如:
predicate = location
value = Shenzhen
可以找到:
Company_A
Company_B
Company_C
按关系查询
例如:
subject = Company_A
predicate = provides
得到:
Company_A
↓
provides
↓
Service_A
Service_B
Service_C
按状态查询
例如:
state = confirmed
只返回已经确认的事实。
因此 Fact 查询可以形成:
Query
↓
Subject
↓
Predicate
↓
Value
↓
State
↓
Time
↓
Source
↓
Fact Result
5. Fact 验证
Fact 验证是 FactMemory 非常重要的机制。
因为:
被获取的信息 ≠ 已确认事实。
例如系统获取:
Company_A
location = Shenzhen
首先只能形成:
FactCandidate
然后进入验证。
基本流程:
FactCandidate
↓
结构验证
↓
来源验证
↓
一致性验证
↓
历史匹配
↓
冲突检查
↓
Fact State
① 结构验证
判断:
subject 是否存在?
predicate 是否存在?
value 是否有效?
例如:
subject = Company_A
predicate = location
value = Shenzhen
结构完整。
② 来源验证
Fact 应记录来源:
source = source_001
这样 ICAI 后续可以追溯:
Fact
↓
Source
↓
原始信息
③ 一致性验证
如果已有:
Company_A
location = Shenzhen
新信息又出现:
Company_A
location = Shenzhen
两者一致:
MATCH
可以提高事实稳定性。
④ 冲突验证
如果新信息是:
Company_A
location = HongKong
而历史 Fact 是:
Company_A
location = Shenzhen
则不能直接覆盖。
应该产生:
CONFLICT
然后进一步判断:
哪个时间更新?
哪个来源可靠?
是否两个事实都曾经成立?
是否发生了对象状态变化?
6. Fact 更新
Fact 更新不能简单理解为:
旧值 → 新值
因为 Fact 可能具有历史意义。
例如:
Company_A
location = Shenzhen
后来:
Company_A
location = HongKong
合理的处理方式是:
旧 Fact
↓
历史保留
新 Fact
↓
当前有效
形成:
Fact 001
Company_A
location = Shenzhen
valid_to = 2026-08-31
Fact 002
Company_A
location = HongKong
valid_from = 2026-09-01
valid_to = null
这样 ICAI 可以知道:
过去:
Shenzhen
现在:
HongKong
而不是失去历史。
Fact 更新状态
可以定义:
NEW
ACTIVE
UPDATED
STALE
CONFLICT
INVALID
ARCHIVED
例如:
NEW
↓
ACTIVE
↓
UPDATED
↓
STALE
↓
ARCHIVED
如果发现事实错误:
ACTIVE
↓
INVALID
如果存在冲突:
ACTIVE
↓
CONFLICT
↓
VERIFY
↓
ACTIVE / INVALID
7. FactMemory 示例
下面用一个完整案例说明 FactMemory。
假设 ICAI 获取到:
Company_A 位于深圳,
提供家具运输服务,
某订单于 2026-08-23 完成。
经过 Perception 后形成:
Object:
Company_A
Property:
location = Shenzhen
Relation:
provides → FurnitureDelivery
Event:
Order_001 completed
进一步形成 Fact:
Fact 001:
Company_A
location
Shenzhen
Fact 002:
Company_A
provides
FurnitureDelivery
Fact 003:
Order_001
state
completed
保存到 FactMemory:
FactMemory
│
├── Fact 001
│ ├── subject: Company_A
│ ├── predicate: location
│ ├── value: Shenzhen
│ └── state: confirmed
│
├── Fact 002
│ ├── subject: Company_A
│ ├── predicate: provides
│ ├── value: FurnitureDelivery
│ └── state: confirmed
│
└── Fact 003
├── subject: Order_001
├── predicate: state
├── value: completed
└── state: confirmed
之后再次收到:
Company_A 位于香港。
系统发现:
旧 Fact:
Company_A → location → Shenzhen
新 Fact:
Company_A → location → HongKong
首先:
Conflict Detection
然后检查时间:
Shenzhen
↓
历史有效
HongKong
↓
当前有效
最终 FactMemory 可以保存:
Company_A
│
└── location
│
├── Shenzhen
│ └── historical
│
└── HongKong
└── active
这样,FactMemory 就同时拥有:
事实
+
事实来源
+
事实状态
+
事实历史
+
事实验证结果
FactMemory 与 LongMemory 的关系
两者不能混淆。
LongMemory
│
├── FactMemory
│
├── RelationMemory
│
├── StateMemory
│
├── ExperienceMemory
│
└── HistoryMemory
LongMemory 是长期记忆体系。
FactMemory 是其中专门管理 Fact 的部分。
因此:
LongMemory
↓
长期保存历史认知资源
FactMemory
↓
长期保存结构化事实
进一步形成 ICAI 的认知链:
Information
↓
Perception
↓
Elements
↓
Objects / Relations / Properties
↓
Fact
↓
Fact Validation
↓
FactMemory
↓
Cognition
↓
Understanding
↓
Reasoning
↓
Decision
本章核心定义
FactMemory 是 ICAI Memory 体系中专门用于保存、查询、验证、更新和维护结构化事实的长期记忆机制。
其核心模型为:
Fact
=
Subject
+
Predicate
+
Value
扩展后:
FactMemory
=
Fact
+
Source
+
State
+
Validation
+
History
+
Time
因此 FactMemory 的真正作用不是“存数据”,而是:
让 ICAI 能够知道一个事实是什么、来自哪里、是否有效、是否发生变化,以及在后续认知过程中能否继续作为可靠的事实依据。