跳转至

分形之道

从分析到理解

五篇文章走下来,我们做了一件事:从不同角度拆解同一个结构。

须弥芥子是直觉——部分与整体之间存在结构回声。递归生成器是机制——简单规则反复施加于自身产生自相似。世界中的世界是更深一层的洞察——每个层级不只是"像"整体,它就是一个完整的世界。从晶体管到 Agent 是历史验证——工程师在不同时代、不同领域、互不知情地走向了同一个结构。分形的边界是诚实的约束——延迟、成本、协调爆炸、故障传播,这些力限定了结构的适用范围。

分析完成了。当分形结构从外部概念变成内化的认知透镜,哪些工程洞察会自然浮现?

跨层原则迁移

Anthropic 在 Building Effective Agents 中有一句话:

"Think about your tools [...] tool descriptions deserve just as much prompt engineering attention as your overall prompts."

工具描述值得像系统提示词一样精心设计。这是一个在 prompt 层级得到的观察——写好 tool description,agent 就能更准确地选择和使用工具。大多数人读到这里点点头,然后把它归档为"prompt engineering 技巧"。

如果你内化了分形结构,这句话不会停在"工具"这个层级。它会自动在你脑中展开——不是因为你刻意去推导,而是因为你已经看到了三个层级共享同一副骨架。它不再是一条关于"工具"的孤立建议,而是一个原则的某一层投影。

三个层级——prompt、agent、swarm——共享相同的骨架:输入描述 → 理解 → 决策 → 执行。这是第三篇的结论:每一层不只是"像"整体,它就是一个完整的世界,运行着相同的逻辑。如果"描述的质量决定理解的质量"在 prompt 层成立,那么在 agent 层和 swarm 层,同一个原则应该同样成立——不是因为有人验证过,而是因为结构相同。

在 agent 层:一个 orchestrator 需要知道每个 sub-agent 能做什么,才能正确分配任务。Sub-agent 的能力描述和工具描述在结构上是同一个东西——它们都是"让上层理解下层能力边界"的接口契约。能力描述模糊,orchestrator 就会误分任务,和 tool description 模糊导致 agent 选错工具是同一种失败模式。

在 swarm 层:orchestrator 给 sub-agent 下发的任务描述,在结构上等价于系统提示词——它们都是"定义执行者行为边界"的上下文。任务描述含糊,sub-agent 的输出质量下降,和系统提示词含糊导致模型输出偏离是同一种失败模式。同一条原则在三个尺度上成立,不需要修改。

注意这里发生了什么。我们没有做三次独立的分析,没有在三个层级上分别收集经验数据,没有写三份白皮书。我们只是在一个层级上认真理解了一条原则,然后沿着分形结构的自相似性,把它映射到了相邻层级——映射成立,因为骨架相同。

这是分形结构的第一个认知收益:跨层原则迁移。当你在某一层发现一个有效的原则,不用重新发现它——检查一下相邻层级的对应结构,如果骨架相同,原则直接迁移。认知负荷从"每层独立思考"降维到"一层想透,逐层映射"。反过来也成立:如果你在某一层遇到了一个难以解决的问题,往上或往下看一层——同构的问题可能早就在另一个层级被解决过了。

递归分解的 base case

分形是递归的。但工程递归有一个数学递归不需要面对的硬约束:它必须停下来。

Koch 雪花可以无限迭代——数学不收你计算费,也不会因为第一百万次迭代里某条线段画歪了而导致整个图形坍塌。工程系统没有这个奢侈。每多一层递归,就多一份延迟、多一段 token 消耗、多一条可能断裂的调用链。没有终止条件的递归在数学里叫无穷,在工程里叫灾难。

Claude Code 的 sub-agent 架构有一个不起眼但关键的设计:sub-agent 不能再生成 sub-agent。AgentTool 在子进程中不可用。这就是 base case——递归分解到这一层就停了,剩下的事情由单次 prompt 调用直接完成,不再委派,不再拆分。

这个设计选择不是随意的。没有 base case 意味着什么?一个 agent 拆任务给 sub-agent,sub-agent 觉得任务还是太复杂,继续拆给 sub-sub-agent——链条可以无限延伸。每一层加一次网络往返延迟,每一层消耗一个完整的上下文窗口,每一层的错误都可能向上传播。更致命的是,当出了问题,你要在一条深度未知的调用链里找到故障点。

所以,任何递归分解都存在一个终止层级。在这个层级上,问题直接执行,不再向下委派。这个终止层级通常是一次 prompt 调用——输入足够具体,输出足够明确,不需要再拆。

Base case 的存在不是对分形结构的否定。恰好相反——正因为每一层是一个完整的世界(第三篇的结论),base case 层级的 agent 才能独立完成任务,不依赖进一步的分解。自相似保证了 base case 的自足性:一个 sub-agent 拿到一个足够具体的任务,它拥有和顶层 agent 完全相同的推理能力、工具访问权限、输入-处理-输出的循环结构。它不是一个"降级版"的 agent——它就是一个完整的 agent,只是作用域更小。

怎么判断递归该在哪里终止?一个自然的信号是:当任务的描述已经具体到可以在单次 prompt 交互中完成,继续分解不会降低复杂度,只会增加协调开销。这不是一条精确的分界线——它随模型能力、上下文长度、任务性质而变化。但"继续拆分是否还在降低复杂度"这个问题本身,是一个稳定的判断锚点。

层间解耦:Simon 的工程化

第五篇引入了 Simon 的近可分解性——子系统内部交互强,子系统之间交互弱但非零。这个概念在那篇文章里是作为理论工具出现的。当你把它和分形结构叠在一起看,一个更具体的图景浮现出来。

分形系统中,每一层是一个完整的世界。层内的组件共享同一个上下文窗口(或同一片状态空间),彼此高度耦合——这是正确的。一个 agent 内部的多步推理共享同一段对话历史;一个 sub-agent 处理任务时,前一步的输出直接构成后一步的输入。层内耦合是功能实现的前提,削弱它等于每一步都从零开始重建上下文。

层与层之间则相反。Claude Code 的 sub-agent 完成任务后,返回的是一段文本摘要,不是完整的上下文窗口。AgentTool 不会把子进程的全部对话历史注入父进程——它做的是有意的信息压缩。Sub-agent 内部可能经历了十轮工具调用、三次错误修复、两次策略调整,但向上传递的只是最终结论和关键发现。

这种"有损压缩"正是近可分解性在分形架构中的具体实现。层间交互不是零——orchestrator 确实需要知道 sub-agent 做了什么。但交互的粒度被刻意降低了:不是逐步骤的完整记录,而是聚合后的摘要。Simon 说的"子系统之间的长期行为仅以聚合方式相互影响",在这里有了一个几乎字面意义上的工程对应。

为什么是有损的?回到第五篇的协调成本分析:如果层间传递完整信息,每个 sub-agent 的全部上下文都注入 orchestrator,协调成本随参与者数量非线性增长——O(n²) 的信息交换。当 sub-agent 数量从两个变成五个,orchestrator 的上下文窗口会被下层细节淹没,留给自身决策的注意力预算急剧缩小。

为什么不能无损?因为并非所有信息都与上层决策相关。Sub-agent 在执行过程中遇到的具体语法错误、尝试过的替代路径、调用过的工具细节——这些是层内高频动态,对层间的低频决策没有贡献。压缩掉它们不是信息丢失,是噪声过滤。

层内高耦合保证执行效率,层间低耦合(有损压缩)控制协调成本。这两条不是独立的原则——它们是同一个结构性质(近可分解性)在分形系统中的两面。

Simon 在 1962 年描述近可分解性时,用的是物理系统和社会组织的例子。六十多年后,同一个结构性质在 agent 系统中以几乎未经修改的形态重新出现。这不令人意外——如果分形结构确实跨尺度保持自相似,那么约束分形结构的性质也应该跨尺度保持一致。近可分解性不是被"应用"到 agent 系统的——它是 agent 系统采用分形结构之后,自然附带的结构属性。

分形性检验

以上三个洞察——跨层迁移、base case、层间解耦——都是从分形结构中自然浮现的。但怎么判断一个具体的系统是否真的具备良好的分形性?

两个问题足够了。

分形性检验

1. 在第 N 层学到的设计原则,能否不加修改地应用到第 N+1 层?

这检验的是自相似性。如果 prompt 层的某个有效原则到了 agent 层就失效了,说明两层之间的结构骨架发生了断裂。断裂不一定是错误——可能是有意的设计选择(比如 base case 层有意终止递归)。但如果不是有意的,它值得调查。

2. 第 N 层的组件,能否作为原子单元被第 N+1 层直接使用?

这检验的是可组合性。一个 agent 能否被 orchestrator 当作和工具一样的"黑盒能力"来调用?如果上层需要了解下层的内部实现细节才能正确使用它,可组合性就被破坏了——你得到的不是分形,而是一团互相纠缠的意大利面条。

两个"是":系统具备良好的自相似性和可组合性,跨层原则迁移大概率有效。

一个"否":找到断裂点,判断它是有意的设计(如 base case)还是无意的耦合泄露。

这两个问题是诊断工具,不是教条。不是所有系统都需要分形性,也不是所有分形性的缺失都是问题。

举个反例:有些系统的不同层级面对的是本质不同的约束——比如底层受延迟支配,顶层受成本支配。在这种情况下,两层的设计原则本就不该相同,第一个问题的答案是"否",但这个"否"是正确的。诊断的价值不在于追求两个"是",而在于:当答案是"否"的时候,你能清楚地说出为什么,以及那个断裂点是不是你有意放在那里的。

它们的价值在于:当你面对一个复杂系统感到困惑时,这两个问题能快速定位结构上的不一致——然后你自己判断那个不一致意味着什么。

正交 × 分形

正交告诉你力的方向——在模型能力持续增强的前提下,你的工程投入该指向哪里。方向对了,投入累积;方向错了,投入消耗。

分形告诉你结构的纹理——当一个系统在不同尺度上重复相同的骨架时,你理解一层就等于理解了所有层。它的认知收益是降维:不是每个层级都需要独立思考,而是在一个层级想透之后,检查相邻层级的结构对应关系。

方向和结构,这两个维度本身是正交的。知道该往哪使力不告诉你系统长什么样;看清系统结构不告诉你哪些投入值得做。它们各自独立地提供信息,合在一起覆盖的认知空间比任何一个单独大得多。

可以观察到的是,正交性这个原则本身也通过了分形性检验:它在 prompt 层成立(选择 prompt 投入的方向),在 agent 层成立(选择 harness 工程的投入方向),在 swarm 层同样成立(选择系统架构的投入方向)。一个心智模型自身满足另一个心智模型的检验条件。这可能说明两个模型触及了同一层结构,也可能只是巧合。值得留意,但不值得过度解读。

方向和结构,是理解 agentic system 的两根坐标轴。但坐标系还没画完——还有其他维度等着被识别出来。


概念与实体

本文涉及的核心概念与实体,在项目知识库中有更详细的资料:

  • 分形架构 — 自相似性的软件工程映射:统一接口、递归组合、无特权根节点
  • 近可分解性 — Simon 的核心概念:层内强耦合、层间弱耦合,本文"层间解耦"一节的理论基础
  • 层级系统 — 近可分解性的载体:交互强度定义层级边界
  • 工具设计 — "跨层原则迁移"的起点:tool description 的质量决定 agent 选择工具的准确性
  • 编排器-工作者 — 跨层迁移的 agent 层映射:orchestrator 分配任务依赖 sub-agent 的能力描述
  • Harness Engineering — 正交性与分形性的工程交汇点:harness 层的设计同时受方向和结构约束
  • AnthropicBuilding Effective Agents 的发布者,tool description 原则的来源
  • Claude Code — sub-agent base case 和层间信息压缩的工程实例