什么是 Neuro-Symbolic Machine?
传统计算机里的“计算”,通常意味着一段程序从入口开始执行,经过一系列指令,最终返回结果。
这种定义非常成功。
它塑造了函数、进程、线程、系统调用,也塑造了我们今天绝大多数软件。
但当人工智能开始成为能够长期行动、使用工具、等待外部事件、修改自身策略并与其他智能体协作的实践主体时,这种计算模型开始显得过于狭窄。
一次真正的智能活动可能持续数分钟,也可能持续数月。它可能经历模型推理、数据库查询、程序执行、人工确认、设备操作、节点迁移和策略修改。它可能在等待期间处理其他工作,也可能在新的证据出现之后重新推翻旧结论。
因此,在 Neuro-Symbolic Machine 中,我们需要重新回答一个基础问题:
什么是一条计算?
计算不再等于一次函数调用
传统程序中的计算通常具有非常明确的形态:
input
↓
program
↓
output
即使内部包含并发、I/O 或异步操作,程序仍然通常围绕一次执行生命周期组织。
但一个 Agent 的工作往往不是这样。
设想一个研究任务:
提出问题
↓
搜索资料
↓
形成假设
↓
执行实验
↓
等待两天
↓
得到实验结果
↓
推翻原假设
↓
启动新的调查
↓
等待人工确认
↓
继续执行
↓
形成最终结论
这显然是一条连续的“计算”。
但它无法自然地表示成:
call → return
它跨越了时间、进程、机器,甚至可能跨越程序版本。
因此,Neuro-Symbolic Machine 中的计算首先应该被理解为:
一个具有身份、目标、状态和历史的持续过程。
计算本身必须成为一等对象。
#<COMPUTATION
:id investigation-42
:goal ...
:state :waiting
:owner researcher-agent
:history ...
:continuation ...>
它不因为当前没有 CPU 正在执行它而停止存在。
等待,本身也是计算的一种状态。
计算是一条持续的状态演化
可以把一条计算抽象为:
C₀ → C₁ → C₂ → ... → Cₙ
其中每个状态不仅包含程序局部变量,还可能包含:
目标
当前关注对象
已经接受的事实
候选假设
未完成的子计算
等待条件
已经产生的外部效果
可用能力
执行历史
因此一个计算状态更接近:
Computation State =
Local State
+ Epistemic State
+ Control State
+ Effect State
+ Provenance
这与传统 continuation 有相似之处,但范围更大。
传统 continuation 主要回答:
程序接下来从哪里继续执行?
Neuro-Symbolic Machine 中的 continuation 还需要回答:
- 当前为什么处于这里?
- 哪些外部动作已经发生?
- 哪些假设仍然成立?
- 哪些世界状态可能已经失效?
- 恢复之后哪些操作可以安全重试?
所以计算不是单纯的控制流。
它是一条具有因果连续性的实践过程。
Neural 与 Symbolic 都只是计算的一部分
在很多 Agent 系统中,LLM 被放在整个系统的中心:
LLM
↓
Tool
↓
Observation
↓
LLM
这种设计非常接近 ReAct,也足以构造许多有用的 Agent。
但在 Neuro-Symbolic Machine 中,我希望关系发生变化。
不是:
LLM owns the computation
而是:
Computation owns the interaction with the LLM
模型只是计算过程中可以调用的一种认知能力。
一条计算可能执行:
symbolic query
neural inference
deterministic program
constraint solving
external effect
human interaction
waiting
它们都是同一级别的计算步骤。
例如:
Computation
│
├── query symbolic world
│
├── invoke neural model
│
├── execute program
│
├── verify constraint
│
├── perform effect
│
└── await event
Neural 与 Symbolic 因此不再是两个彼此连接的“模块”。
它们是同一条计算中不同性质的操作。
Symbolic World 不是工具,而是计算发生的环境
如果只是让模型偶尔调用:
query-knowledge-graph()
或者:
run-symbolic-solver()
那么 Symbolic 仍然只是 Tool。
这还没有真正改变计算模型。
在 Neuro-Symbolic Machine 中,Symbolic World 应该成为计算持续存在的环境。
计算可以围绕一组稳定对象进行:
#<TASK task-42>
#<AGENT researcher>
#<HYPOTHESIS h-17>
#<DOCUMENT paper-3>
#<EXPERIMENT exp-8>
模型、程序和人类看到的不是互相独立的文本副本,而是同一批具有身份的对象。
于是:
LLM sees task-42
Human sees task-42
Program reads task-42
Runtime executes effects on task-42
它们引用的是同一个逻辑实体。
这使“上下文”从一串临时 token,变成一个持续存在的对象世界。
计算需要区分事实与假设
Neural Model 的一个基本特点是,它非常擅长提出候选解释。
但候选解释不等于事实。
因此一条 Neuro-Symbolic Computation 不能简单地把模型输出直接写入 Symbolic World。
系统至少需要区分:
Observation
Hypothesis
Derived Fact
Verified Fact
Decision
Effect
例如:
(hypothesis
:proposition '(overloaded node-b)
:confidence 0.64
:evidence (...))
和:
(observation
:proposition '(cpu-load node-b 0.97)
:source monitor-21
:time ...)
不是一回事。
计算可以:
提出假设
↓
查询世界
↓
收集证据
↓
执行验证
↓
接受 / 拒绝 / 保留
因此“思考”不再只是模型内部不可见的 token 过程。
其中一部分可以被外化为持久的 epistemic objects。
Cognitive Workspace
这意味着 Symbolic World 之外还需要一个更临时的空间。
我称它为:
Cognitive Workspace
它用于承载:
假设
候选计划
反事实
临时解释
搜索分支
尚未验证的结构
可以把整个系统理解为:
Neural Cognition
↕
Cognitive Workspace
↕
Semantic World
↕
Effect Runtime
↕
Reality
Neural Cognition 可以自由地产生模糊和不确定的结构。
但只有经过验证、提交或明确标记之后,它们才进入更稳定的 Semantic World。
这种关系有些类似数据库事务:
propose
↓
evaluate
↓
verify
↓
commit
只是这里被提交的不是普通数据,而是对世界的认识。
一条计算包含“认知”也包含“实践”
传统程序主要改变机器内部状态。
Agent 的计算则必须真正改变外部世界。
例如:
发送邮件
修改文件
创建订单
移动机器人
部署服务
启动实验
这些动作不能被当成普通函数。
因为:
(send-email ...)
和:
(+ 1 2)
具有完全不同的语义。
前者可能:
不可逆
需要权限
可能失败
可能重复执行
需要审计
需要等待外部确认
所以 Neuro-Symbolic Machine 中应该存在明确的:
Effect
#<EFFECT
:operation send-message
:target alice
:status :committed
:caused-by computation-42>
计算并不直接“修改世界”。
它提出 effect,Runtime 检查:
capability
constraint
policy
current state
然后决定:
execute
reject
simulate
wait
这使 Neural Agent 的开放式能力与系统的确定性边界可以共存。
Capability 是计算能够行动的边界
如果 Agent 可以修改自身程序,同时又可以任意调用外部资源,那么自我演化很快就会变成权限失控。
所以计算必须明确知道:
它可以做什么。
Capability 应该成为计算状态的一部分。
例如:
#<CAPABILITY
:operation deploy
:scope staging
:holder computation-42
:expires ...>
模型可以发现:
我想部署 production
但 Runtime 可以确定:
当前计算只有 staging capability
于是:
intent ≠ authority
这是 Neuro-Symbolic Machine 中非常重要的一条原则。
Neural Model 可以自由地产生目标和方案。
但它不能通过“想象自己拥有权限”而获得权限。
Computation 应该是 Durable 的
如果计算是持续实践过程,那么:
process crash
machine reboot
network partition
software upgrade
node migration
都不应该天然意味着计算死亡。
因此,计算必须拥有 durable semantics。
例如:
Running
↓
Awaiting
↓
Persisted
↓
Machine restart
↓
Restored
↓
Running
甚至:
Node A
↓ migrate
Node B
计算的逻辑身份都不改变。
这要求 Runtime 维护的不只是:
memory snapshot
而是:
logical state
effect history
continuation
version
ownership
pending events
空间上的分布与时间上的恢复,本质上是同一个问题:
计算的逻辑身份不能等同于当前执行位置。
Agent 不是计算
这一点值得明确。
Agent 与 Computation 不应该是同一个概念。
一个 Agent 可以同时拥有多条计算:
Agent A
├── Investigation #1 running
├── Investigation #2 waiting-human
├── Report #3 suspended
└── Monitoring #4 recurring
这些计算可以共享某些长期知识和策略,但各自拥有独立的局部状态。
所以可以把 Agent 理解成:
Agent =
Identity
+ Context
+ Memory
+ Policy
+ Capabilities
+ Computations
而一条 Computation 是:
Computation =
Goal
+ Local State
+ Cognitive State
+ Control State
+ Effect History
+ Continuation
这一区分非常重要。
否则 Agent 很容易再次退化成:
one mailbox
one loop
one conversation
无法表达真正长期、并发、可暂停的智能活动。
计算可以产生新的计算
当模型发现问题可以拆分时,它可以产生:
parent computation
│
├── child A
├── child B
└── child C
这些子计算可能:
并行运行
迁移到其他节点
交给其他 Agent
等待不同事件
因此 computation graph 应该是一等结构。
例如:
research
├── literature-review
├── reproduce-experiment
└── compare-results
其中任意节点都可能继续展开。
这时“workflow”不再是外部编排文件。
它是运行中的 computational object graph。
模型可以检查和修改它。
人也可以检查和修改它。
程序也只是计算的一种结晶
传统观念中:
Program → Execution
程序在前,执行在后。
Neuro-Symbolic Machine 中,两者关系可能更动态。
模型第一次遇到一个问题时,可能进行:
探索
→ 查询
→ 尝试
→ 修订
→ 成功
经过多次类似经验后,系统发现:
这个模式值得复用。
于是产生:
(defskill recover-overloaded-task (...)
...)
也就是说:
Computation History
↓
Reusable Program
程序可以被理解成:
被压缩、稳定化的计算经验。
这正是 Neural 与 Symbolic 能够互补的关键。
Symbolic Crystallization
我把这个过程称为:
Symbolic Crystallization
Neural exploration
↓
successful trajectory
↓
pattern discovery
↓
symbolic hypothesis
↓
evaluation
↓
reusable skill / rule / program
于是第一次解决问题时:
需要模型大量推理
后来:
只需要调用已有 symbolic skill
这使智能系统不仅“记住答案”,还可以把经验转化成新的计算结构。
反方向则是 Neuralization
Symbolic 也不应该无限增长。
如果某种模式已经拥有大量稳定轨迹:
Skill
Skill
Skill
Skill
...
它们可以重新成为:
training data
并通过:
fine-tuning
distillation
reinforcement learning
进入 Neural Model。
因此:
crystallization
Neural ───────────────→ Symbolic
▲ │
│ │
└───────────────────────┘
neuralization
两者之间形成双向流动。
这也是为什么 Neuro-Symbolic Machine 不应被理解成:
LLM + Symbolic Solver
而应该被理解成:
允许知识在 neural、symbolic、programmatic representation 之间持续迁移的机器。
学习不是一种操作
从这个角度看,“学习”至少有三种完全不同的形式。
Experience
│
├──→ Memory
│
├──→ Skill / Program
│
└──→ Neural Weights
它们分别对应:
记住
程序化
神经化
一个系统学会新知识,不一定要训练模型。
一次新的经验首先可能只是:
新增一条事实。
反复出现的经验可能变成:
新的规则或程序。
只有更长期、更普遍的模式才可能值得进入:
模型参数。
因此:
Learning is movement between representations.
这是 Neuro-Symbolic Machine 与单纯“大模型 + Memory”非常不同的一点。
Runtime 负责维持因果连续性
如果 Agent 可以:
重试
恢复
迁移
并发
修改策略
那么系统最容易失去的是因果关系。
例如:
为什么这封邮件发送了两次?
为什么这个结论依赖已经失效的实验?
为什么恢复之后又重新执行了一次支付?
为什么这个 Agent 获得了这个能力?
所以 Runtime 必须维护:
Identity
Causality
Provenance
Version
Effect History
一条计算的历史不是 debug log。
它本身就是计算的组成部分。
C₀
├── Observation O₁
├── Hypothesis H₁
├── Query Q₁
├── Effect E₁
└── Result R₁
↓
C₁
这使系统能够:
inspect
explain
replay
audit
rollback
learn
一条计算也可以被另一个计算理解
传统程序执行之后,通常只留下结果和日志。
Neuro-Symbolic Machine 中,一条计算本身应该是可查询对象。
例如:
(describe computation-42)
(explain computation-42)
(dependencies-of computation-42)
(effects-of computation-42)
(fork computation-42)
另一个 Agent 可以检查:
它做过什么?
依据是什么?
现在等待什么?
还有哪些候选分支?
然后继续接手。
这使 computation 第一次成为真正的协作对象。
人类也生活在同一套计算世界里
如果计算具有结构化身份、状态与历史,那么人类不应该只能通过聊天框观察它。
人可以直接进入这套计算世界。
例如一个正在运行的调查可能呈现为:
Investigation #42
Goal:
Diagnose repeated failures
Current state:
waiting for experiment-7
Hypotheses:
H1: node overload 0.71
H2: network failure 0.18
Subcomputations:
log-analysis completed
experiment-7 waiting
Available actions:
inspect
fork
cancel
approve experiment
LLM 看到的是同一批对象。
程序看到的也是同一批对象。
Human、Neural Model 和传统程序因此不是通过三套独立接口交互。
它们进入的是同一个 Semantic World。
从 Instruction Set 到 Practice Set
传统机器的基本动作是:
load
store
jump
call
return
高级语言再将这些动作组合成程序。
如果 Neuro-Symbolic Machine 真的形成自己的计算模型,它可能需要另一组更高层的 primitive:
observe
hypothesize
query
verify
propose
await
fork
effect
commit
invalidate
resume
learn
这些未必最终都成为 VM instruction。
但它们更接近智能实践真正反复出现的基本动作。
传统计算机擅长回答:
如何执行程序?
Neuro-Symbolic Machine 更需要回答:
如何让一个持续存在的智能主体认识世界、采取行动、保存经验并改变自己的方法?
一个可能的定义
因此,我目前更愿意这样定义 Neuro-Symbolic Machine 中的 Computation:
A computation is a durable, causally continuous process that transforms semantic state through neural judgement, symbolic operations, and verified effects.
中文可以表达为:
计算是一条持久的、保持因果连续性的实践过程,它通过神经判断、符号运算与受验证的现实作用不断改变语义状态。
其中:
durable
意味着它不依赖一次进程生命周期。
causally continuous
意味着它能够解释自己如何来到当前状态。
semantic state
意味着它操作的不是只有 bytes,而是有身份和关系的对象。
neural judgement
负责处理开放性、不确定性和语义理解。
symbolic operations
负责确定性的查询、计算、约束和复用。
verified effects
负责真正改变现实,并维护权限与执行语义。
Machine 的意义
这样看来,Neuro-Symbolic Machine 的目标并不是做一个更复杂的 Agent Framework。
它试图改变的是:
计算机究竟为谁、以什么方式组织计算。
传统计算机主要为程序提供:
CPU
Memory
File
Process
Network
Neuro-Symbolic Machine 则可能进一步提供:
Entity
Fact
Computation
Capability
Effect
History
传统 OS 使程序能够长期使用硬件。
Neuro-Symbolic Machine 希望使智能活动能够长期存在于世界中。
如果未来的 AI 不再只是一个回答问题的模型,而是一个能够持续学习、实践、协作和改变自身工作方式的主体,那么它所需要的也许不再只是:
Prompt
Context
Tool
而是一台真正为这种智能活动设计的机器。
计算,也就不再只是指令执行。
它会重新变成一种更加原始的东西:
一个主体持续认识和改变世界的过程。