分形的边界¶
协调成本在每一个层级都存在。晶体管靠布线,多核靠缓存一致性广播,Unix 靠管道缓冲区,agent 靠编排层。从晶体管到 agent,抽象在上升,但协调的开销从未消失——它只是换了一副面孔。
如果前四篇文章给了你一种"一个模型解释一切"的舒适感,这篇文章的任务是把这份舒适感拿走一部分。不是因为分形模型错了,而是因为它是一张骨架图——骨架告诉你结构在哪里重复,但没有告诉你每层的物理特性有多不同。
一个模型在哪里停止工作,和它在哪里工作同样重要。接下来的四个维度——延迟、成本、协调、容错——不是随机的工程困难,它们有一个共同的根源:分形描述的是结构的自相似性,但运行时的物理特性在每个层级都不一样。
延迟:乘法,不是缩放¶
几何分形可以无限缩放而不改变性质。放大海岸线的一截,它和整条海岸线呈现相同的粗糙度。放大 Koch 雪花的一个分支,你看到的还是同样的雪花。尺度变了,性质不变——这是数学分形的核心承诺。
但在 agent 系统中,"尺度"不只是空间维度,还有时间维度。而时间维度上发生的不是缩放,是质变。
单次 prompt 调用的延迟通常在百毫秒到秒级——取决于模型大小、输入长度和基础设施。这是原子操作的时间尺度,和晶体管的纳秒级翻转在结构上处于同一位置:最小单元的一次完整执行。
一个 agent 循环(gather → act → verify → repeat)一般迭代数步到十数步,总延迟进入数十秒到分钟量级。注意这里的乘法关系:不是"一次调用加上一点额外开销",而是"N 次调用,每次都有自己的上下文构建、模型推理和结果解析"。
一个多 agent 协作系统——多个 agent 各自运行自己的循环,再加上彼此之间的信息交换——延迟进入分钟到数十分钟量级。即便工作者之间是并行执行的,编排器的综合步骤仍然是串行的:它需要等所有工作者返回,逐一解析结果,构建全局视图,然后决定下一步。并行化缩短了工作者层的延迟,但没有消除编排层的串行瓶颈。
每一次 agent 间的交接都不是零成本的。一次交接意味着:一次 API 调用的网络延迟,一次上下文的构建和填充,一次结果的解析和验证。如果工作者返回的结果不符合预期,还有重试和澄清的额外开销。这些开销本身不大,但它们是乘法性的——每增加一个协作层级,延迟不是加一个常数,而是乘以一个系数。
几何分形在不同尺度上保持自相似性,因为它的递归不消耗时间。Koch 雪花从第一次迭代到第一百次迭代,每一步只是描述上的展开,不是物理过程。但 agent 系统的递归是真实的物理过程——每一层的展开都消耗时间,而且消耗的时间随层级增加而增长。在时间维度上,分形的"无限嵌套"承诺在第三、四层就开始显现出代价:用户的耐心是有限的,任务的时效性是有限的,世界在等待期间可能已经变化了。
成本:超线性增长¶
延迟可以等,但 token 要花钱。
单个 agent 的 token 消耗主要来自两部分:输入(system prompt + 上下文 + 用户指令)和输出(推理 + 工具调用 + 结果生成)。当你把一个 agent 分解为编排器加若干工作者时,token 消耗不是简单地分摊——编排器要理解任务全貌才能分解,每个工作者要理解自己的子任务才能执行,工作者完成后编排器还要理解返回的结果才能综合。
理解这个超线性的来源很重要。假设一个任务被分解为三个子任务,每个工作者处理一个。编排器需要消耗 token 来理解原始任务并生成分解方案。三个工作者各自消耗 token 来理解子任务并执行。然后编排器再消耗 token 来理解三份返回结果并综合。这里面有大量的"理解"开销是重复的——编排器要理解任务全貌两次(分解时和综合时),每个工作者要重新理解一遍它所需的上下文。这些重复理解的 token 消耗,在单 agent 架构中根本不存在。
工程经验表明,多 agent 系统的总 token 消耗通常是同等复杂度单 agent 的数倍甚至一个数量级以上。具体倍数取决于任务性质、分解策略和上下文管理质量,但方向是确定的:超线性增长。
这里有一个真正的分形不具备的特征:有损压缩。当工作者 agent 完成子任务后,它不可能把自己完整的推理过程返回给编排器——那会超出编排器的上下文窗口。它只能返回一个摘要,一个压缩后的结果。这个压缩是有损的——某些细节在压缩过程中被丢弃了,而编排器无法知道被丢弃的是否是关键信息。
数学分形的递归不涉及信息损失。Mandelbrot 集的每一次迭代 \(z_{n+1} = z_n^2 + c\) 是精确的——没有舍入,没有遗漏,没有"摘要"。但 agent 系统的层级间通信天然是有损的。结构在重复,但信息在每一次跨层传递中都在衰减。
还有一个硬约束:上下文窗口。数学分形没有"画布大小"的限制——你可以无限放大,无限嵌套,不存在"到这里就画不下了"的问题。但每个 agent 的上下文窗口是有限的。这个有限性不只是存储限制——它决定了 agent 能处理的信息量、能维持的对话深度、能协调的子任务复杂度。更微妙的是,即便在窗口没有物理溢出的情况下,随着上下文越来越长,模型对早期信息的注意力也在衰减。上下文窗口不只是一个硬墙——它是一个逐渐变软的地板,越远的信息站得越不稳。
分形的递归可以无限深入,agent 的递归被这个有限且会退化的"画布"截断。
协调:从零到 O(n²)¶
协调成本是这一系列边界中最具结构性的一个,因为它直接决定了系统能扩展到多宽。
单次 prompt 调用的协调成本是零。一个请求,一个响应,没有需要同步的对象。这是最简单的情况——一个封闭的输入输出过程,不涉及任何其他参与者。
单个 agent 循环内部有隐式协调——上下文窗口本身就是共享状态。每一步的输出成为下一步的输入,不需要显式的同步协议。上下文窗口扮演了共享内存的角色,而只有一个"线程"在访问它,所以不存在竞争条件。协调是免费的,但有一个前提:只有一个参与者。
多 agent 协作把协调从隐式推向了显式。编排器需要跟踪每个工作者的状态,工作者之间可能需要共享中间结果,任务的依赖关系需要被显式管理。最坏情况下,N 个 agent 之间的两两通信通道是 O(n²) 的——每多一个参与者,不是多一条通信线路,而是多 N-1 条。即便用编排器模式把拓扑简化为星形,编排器本身也成为了 O(n) 的瓶颈——它需要理解每个工作者的输出,而"理解"在 LLM 语境下意味着把输出放进上下文窗口并推理,这本身就消耗 token 和时间。编排器的上下文窗口越装越满,推理质量开始退化,这是一个隐蔽但真实的瓶颈。
工程中可以观察到的现象是:随着 agent 数量增加,边际收益递减得很快。从 1 个到 3 个工作者,任务完成质量和速度通常有明显提升——每个工作者处理一个独立子任务,编排器的综合负担还在可控范围内。从 3 个到 10 个,提升变得不确定——有些任务受益于更细的分解,有些反而因为编排器的综合负担加重而整体退化。超过这个范围,协调成本往往开始吞噬并行带来的收益。Amdahl 定律的回声在这里很清晰:编排器的综合步骤是串行瓶颈,无论你加多少并行工作者,瓶颈不会消失。
这不是新故事。MESI 协议的困境在这里回响——核心数越多,缓存一致性广播的开销越大,消费级处理器很少超过 16 核。Agent 系统面对的是同一类问题,只是介质不同。MESI 协议在总线上广播的是精确的缓存行状态——Modified、Exclusive、Shared、Invalid,四种状态,没有歧义。Agent 之间传递的是自然语言——一段摘要、一个指令、一份结果。自然语言的协调精度比总线广播低了不止一个数量级,这意味着协调失败的概率也高了不止一个数量级。同一类结构性约束,在更高抽象层级上表现得更严峻而非更宽松。
容错:错误不衰减,放大¶
传统软件中,一个组件失败了会怎样?它抛出一个异常,返回一个错误码,或者干脆崩溃。无论哪种,信号是明确的:这里出了问题。下游组件可以捕获异常、检查错误码、或者被监控系统重启。错误是离散的、可识别的事件。
Agent 失败的方式完全不同。一个 agent 在推理过程中犯了错——比如误解了任务要求,或者错误地调用了工具——它不会抛出异常。它会输出一段看起来完全合理的文本,语法正确,逻辑连贯,格式规范,只是内容是错的。错误以"合理但错误的输出"的形态出现。
这段输出到达下游 agent 时,下游 agent 没有任何内建的机制来区分"这是正确的输入"和"这是上游犯的错"。它没有错误码可以检查,没有异常可以捕获,没有 CRC 校验和可以验证——它面对的只是一段自然语言文本,而自然语言没有"语义校验和"。下游 agent 会把这段错误的输出当作可靠的输入,在此基础上继续推理,继续犯错——而且可能犯得更离谱,因为它在一个被污染的基础上构建了新的推理链。
这就是错误级联:错误在层级间传播时不衰减,反而放大。传统软件的错误传播模型建立在一个假设上——每一步面对的是正确的前置状态,故障是独立事件,总概率是各步故障概率的乘积。但在 agent 系统中,这个独立性假设不成立:前一步的错误改变了后一步面对的问题本身。一个 agent 改错了函数签名,下游 agent 调用这个函数时面对的是一个"看起来合理但语义错误"的接口——它不只是可能犯自己的错,还被上游的错误引导向了错误的方向。这是耦合放大,不是独立累积。
分形结构意味着嵌套:外层包含内层,内层的输出是外层的输入。在这个结构中,错误放大不是偶然的 bug,而是结构性的风险。嵌套层级越深,错误在到达最外层之前经过的放大步骤越多。而且放大的方式特别隐蔽——不像传统软件那样用异常或错误码大声报警,agent 的错误输出穿着"正确答案"的外衣,在层级之间安静地传播、变形、累积。等最外层发现结果不对时,回溯排查的成本已经很高了——你需要逐层检查每个 agent 的输出,才能找到错误的源头,而每一层的输出都是"看起来合理"的。
数学分形的递归是精确的——每一步的输出忠实地成为下一步的输入,\(z_n\) 多精确,\(z_{n+1}\) 就多精确。Agent 分形的递归是概率性的——每一步都可能在不发出任何警告的情况下引入偏差,而这个偏差会被后续步骤当作事实来处理。
Simon 的修正:近可分解性¶
到这里,四个维度的边界已经摆开:延迟质变、成本超线性、协调爆炸、错误放大。这些边界是否意味着分形模型应该被抛弃?
不是。它意味着分形模型需要一个修正项——一个能解释"为什么结构重复但物理特性不重复"的理论框架。
1962 年,Herbert Simon 在 The Architecture of Complexity 中提出了一个概念:近可分解性(near-decomposability)。Simon 不是在研究分形,他在研究一个更基本的问题:为什么复杂系统几乎总是呈现层级结构?他的答案是演化压力——他用钟表匠寓言说明,由稳定子组件构成的系统在演化中存活的概率远高于没有中间结构的系统。
而这些层级结构有一个共同特征——子系统内部的交互远强于子系统之间的交互。强,但不是绝对隔离;弱,但不是完全独立。"近可分解"这个"近"字,承载了所有的微妙之处。完全可分解意味着各子系统之间零交互,各自孤立——那只是一堆不相关的系统碰巧摆在一起。完全不可分解意味着所有部件等强度交互,无法区分子系统边界——那是一团无法理解的复杂性。现实中几乎所有值得研究的复杂系统都落在两者之间。
Simon 还指出了一个关键的动力学特征:频率分离。子系统内部的动态过程是高频的——变化快、局部影响;子系统之间的动态过程是低频的——变化慢、以聚合方式相互影响。不需要知道另一个子系统内部每个零件的状态,只需要知道它的聚合输出。
把这个框架叠加到 agent 系统上:
- 单个 agent 内部是高频动态——每一步 gather-act-verify 都在快速迭代,内部状态频繁变化
- Agent 之间是低频动态——编排器不需要知道工作者每一步的推理细节,只需要它的最终输出(聚合结果)
- 短期内各 agent 可以近似独立运行——这就是并行化之所以可行的结构性前提
- 长期行为通过聚合接口涌现——系统整体的表现不是各 agent 内部状态的简单加总,而是通过聚合输出的交互逐渐浮现的
这个频率分离不只是描述性的,它有设计含义。如果一个系统中不同层级以不同速率运动,那么试图用同一套协调策略管理所有层级就是错配的。内层的高频迭代需要轻量、低延迟的协调(上下文窗口内的隐式状态共享就够了);外层的低频交互需要的是结构化、可验证的协调(聚合摘要、类型化接口、显式状态确认)。把高频策略用在低频层级上——比如让编排器实时追踪每个工作者的每一步推理——是浪费;把低频策略用在高频层级上——比如让 agent 每一步都走一遍正式的结构化汇报流程——是瓶颈。
分形模型说的是:结构在不同层级重复。Simon 的近可分解性补充的是:虽然结构重复,但不同层级的运行时物理特性是异质的。内层快、外层慢;内层紧耦合、外层松耦合;内层高频、外层低频。
修正后的模型
Agent 系统在结构上是分形的——相同的 input → process → output 模式在每个层级重复。但在运行时,它是层级异质的——延迟、成本、协调复杂度和容错特性在每个层级都发生质变。分形描述骨架,近可分解性描述肌肉和血液。
回头看前四个维度的边界,Simon 的框架给了它们统一的解释:
- 延迟质变——因为不同层级的动态过程运行在不同的时间尺度上,内层的高频迭代和外层的低频综合天然不在同一个节拍
- 成本超线性——因为近可分解系统的层级间通信是聚合性的,而聚合意味着压缩,压缩意味着信息损失和额外开销
- 协调爆炸——因为层级间的交互虽然弱但不可忽略,维持这些弱交互的成本随参与者数量增长
- 错误放大——因为聚合输出丢弃了内部细节,下游无法区分正确的聚合和错误的聚合
这四个边界不是四个独立的工程问题。它们是同一个结构性事实的四个投影:分形描述骨架,但骨架的每一层在不同的物理条件下运行。
这个修正不削弱分形模型的价值。恰恰相反——它给分形模型划定了适用范围,让它从一个"听起来很美但不知道怎么用"的隐喻,变成了一个有边界条件的分析工具。
边界即自由¶
延迟在层级间乘法增长,这使得层级间交互的同步/异步性质成为一个关键结构变量。同步等待意味着外层的时钟被内层的最慢路径锁定;异步交互则把层间耦合从时间维度上松开。
协调成本随参与者数量非线性增长,这意味着 agent 的并行宽度不是一个可以无限拓展的参数——它受制于协调开销与并行收益的交叉点。超过这个点,每多一个参与者带来的边际成本大于边际收益。
错误在层级间放大而非衰减,这使得层级边界处的信息质量成为系统可靠性的瓶颈。一个错误在三层放大之后的纠正成本,远高于它在第一次跨层传递时被发现的成本。
这些恰恰是分形模型被工程化使用时的前提条件。一张地图标注了悬崖和沼泽,是在告诉你哪些路是通的、哪些地方需要换装备。不标注悬崖的地图只是更危险的地图。
四个边界中每一个都在做同一件事:把分形从一个无限递归的理想模型修正为一个有限层级的实用模型。延迟设定了层级的深度上限。成本设定了每一层的资源预算。协调复杂度设定了同一层级内的并行宽度。容错特性设定了层级之间的信任模型。这四个维度一起,把"无限自相似"塑形为"有约束的自相似"。
边界划定了可用空间的形状,而可用空间的形状决定了你能在里面建什么。
分形给了骨架。近可分解性给了每一层不同的物理特性。边界条件给了工程约束。这三者叠在一起,才是完整的图景。那么在这些约束之内,分形结构到底给了工程师什么?它的回报是什么?
概念与实体¶
本文涉及的核心概念与实体,在项目知识库中有更详细的资料: