系统与流程的一种统一看法
我们一直在悄悄整理一个小小的统合视角 — 当你把一个流程剥到本质,剩下的是什么?我们发现几乎所有流程 — 生物的、计算的、组织的 — 都可以归到三个基本要素。这不是新理论,是一套语汇;分享出来是因为我们在自己的工程工作里反复用得上。
三个基本要素:信息、规则、执行器。信息是流程存在的理由 — 没有要处理的对象,就不需要流程。规则定义每一步该做什么 — 读、写、判断下一步去哪。执行器是真正完成每一步的那个东西。信息是流程的意义,规则定义其上限,执行器决定能不能够到那个上限。
一旦接受这三件套,流程图里常出现的六个分类 — 触发器、节点、控制流、状态、约束、终止 — 都坍缩到一个单元上:一个有"处理槽 + 路由槽"的节点。判断节点只有路由;入口节点有严格的输入契约;约束不是独立的东西,是连线的属性;控制流也不是独立的东西,是图本身的拓扑。整个系统变成同一种形态 — 同构节点 + 不同连接。
Figure 01
三件套 — 折叠成一个统一节点模型
信息、规则、执行器 — 任何流程剥到底都剩这三件。一旦接受这三件套,系统就只是「同构节点 + 不同配置的连线」。
primitive · 01
信息
流程存在的理由 — 被读、被写的对象。
primitive · 02
规则
读 + 写 + 判断下一步。规则定义上限。
primitive · 03
执行器
真正完成每一步的那个东西。决定能不能够到上限。
fold into one shape
统一节点
slot · A
处理槽
slot · B
路由槽
Synthesis
系统 = 同构节点 × 连接拓扑
下一个观察是这个结构是分形的。节点可以展开为子网络,稳定的子网络又能被打包成一个节点。打包的条件是稳定 — 只有稳定的子系统才能当黑箱用。这跟物理学家处理刚体、数学家处理公式是同构的:牛顿把开普勒三定律打包成万有引力公式;我们把小而可靠的服务打包成可部署的单位。抽象不是偷懒,是有意识地决定"在这一层什么不需要知道"。知道该忘什么,是理解的一部分。
在节点模型之上,可以看到任何系统能落入的六个粗略层级 — 封闭系统、被动开放系统、主动处理系统、自适应系统、有涌现秩序的自组织系统、能产生自己的自创生系统。软件里的工作流属于第三个 — 有目的、有边界、基本确定性,系统本身不变。有意思的边界是第四个层级 — 自适应,可以是改参数、改规则、改结构、改目标。爬得越高越难预测,对工程的细致程度要求也越高。
同一个三件套 — 这部分让我们意外 — 也出现在三个基础计算模型的核心。图灵机(1936)= 纸带上的信息 + 规则表 + 没有自身智能的读写头。Petri 网(1962)把它推广到多个并发流程争用同一资源的情形,并显式给出排队和同步的位置。神经网络(1943, 学习规则 1986)保留结构,但规则不再是人写的,而是从数据里学出来的。每种情况下都是:信息、规则、执行器。复杂性不寄居在执行器里,复杂性寄居在规则里。
Figure 02
系统能落入的六个层级
每上一层,多一种前一层没有的能力。判断问题真正在哪一层时很有用。
L1
封闭系统
不与外部交换
理想化孤立系统
L2
开放被动系统
+ 与外部交换
河流、天气、生态
L3
主动处理系统
+ 有目的地处理
工作流、软件、流水线
L4
自适应系统
+ 改变自身
恒温器、机器学习
L5
自组织 / 涌现
+ 自发产生秩序
蚁群、市场、城市
L6
自创生系统
+ 生产自己
活细胞、生命体
L3 → L4 boundary软件里的工作流大多落在 L3 — 有目的、有边界、系统本身不变。有意思的边界是 L4:参数、规则、结构甚至目标开始变化。
Petri 网尤其给了我们一个只看图灵机时容易错过的教训。图灵模型回答的是"什么是可计算的"。Petri 的问题不一样 — "多件事同时发生、争用同一资源时,怎么把设计写出来、并在我们做出来之前验证它"。在我们自己的系统里,这就是"写出代码"和"在部署前能论证它不会死锁也不会饿死"之间的差别。设计基础设施时,两个问题我们都尽量保持活在桌面上。
神经网络多加了一道弯。规则不再是人写的,是系统通过反复犯错并调整权重学来的。训练中,网络在参数层面是个自适应系统;冻结权重部署后,它退回成有目的的决定性处理器。同一个成果物根据学习是否启用,活在两种不同的工况里。
同样的语汇在分析基于 agent 的软件架构时也好用。用户请求是信息。Skill —— 一种被触发、范围窄、定义清楚的行为 —— 是规则。运行 Skill 的模型是执行器。一个 Skill 可以调另一个 Skill,于是流程变成嵌套网络。不管你叫它"agent 编排"还是"模块化设计",底下的形状仍然是图灵和 Petri 早就在画的节点-连线图。
Figure 03
分形递归 — 每个尺度都是同一个形状
节点可以展开为子网络,稳定的子网络可以包回成一个节点。函数 → 服务 → 产品 → 公司 — 都是同一张节点-连线图,只是在不同尺度上嵌套。
scale 01
scale 02
scale 03
scale 04
stability rule
只有稳定的子系统才能被当黑箱用。内部不稳定就没资格被封装。
递归路径
最小单元 → 组合 → 测试稳定 → 封装成一个单元 → 作为新单元 → 继续组合 → ...
还有一个值得放在旁边一起看的视角 — 热力学。一个在工作的流程,局部上是熵减 — 把无序变成有序。这件事永远不会免费发生。总要两个输入:驱动工作的能量,和把能量沿特定路径引导的信息(规则)。代价是全局的 — 一角秩序起来,宇宙整体就稍微热了一点。这是为什么计算不是免费的,为什么好工程有意义,为什么抽象不仅仅是优雅 — 它是物理的最深的理由。
我们不会假装这个统合视角是新的。它跟系统论、复杂适应系统、控制论传统、可计算性的基础研究是合韵的。我们觉得有用的是有一套简短的语汇可以指。当我们问"这个东西的信息是什么、规则是什么、执行器是谁"时,往往就能看到不稳定的部分、错误的边界、漏掉的抽象。这是个便宜的问题,回报却经常出现。
如果只从这篇笔记里带走一句话 — 系统是同构节点用配置过的连线连起来;每个节点读、写、判断;复杂性自下而上靠稳定和封装积累;所有流动的东西,从物理上看都是用更大的全局熵增换来的一小块局部熵减。其余都是细节。