串行的天花板
串行 AI 编程(Sequential AI Coding) 是大多数开发者熟悉的工作方式:你写一段提示词,智能体读取上下文、修改一个文件、把控制权交还给你,然后等待你的下一条指令。一次一步、一轮一轮、一个智能体地往前走。
这种方式效果出奇地好——直到某个临界点。这个临界点就是 串行天花板(sequential ceiling):当任务的工作量超过「单个智能体、单个上下文窗口、一次只执行一条指令」所能承载的范围时,它就会开始丢失主线,无法完成任务。
这个天花板不是模型能力问题,而是结构性的,来自那个循环本身:请求、等待、请求、等待。每一轮都是一次往返,每次往返都要重新读取上下文,从而争夺同一个有限的窗口——而这个窗口同时还得装下真正的任务本身。就像一位开发者独自处理一张很长的工单,每走一步都要向管理者汇报:这位开发者可能非常优秀,但工作流的吞吐量仍然被最慢的一环卡死。
串行工作流崩溃的三个地方
1. 跨轮次的上下文丢失
上下文窗口是有限的,串行工作流的每一轮都在消耗它:请求、已读取的文件、已做的修改、工具输出、报错信息,以及你为了把智能体拉回正轨而输入的纠正。
当任务跨越十几个文件时,智能体往往在推理「关于这项工作的对话」,而不是工作本身。早期约束——你在第一轮指定的命名规范、你在第四轮标出的依赖关系——会被压缩、摘要化,或被悄悄丢弃。这也是为什么长时间的串行会话容易跑偏:最终产出的文件与前期的文件互相矛盾,不是因为模型变弱了,而是因为不断累积的对话记录把最初的意图挤出了窗口。
2. 轮次延迟不断叠加
每一步串行都要付出延迟成本:生成首 token 的时间、完成一次工具调用的时间、工具执行时间,然后是返回给你等待下一条指令的往返。单看每一轮都很快;放进真实任务里反复相乘,这些延迟就成为主要成本。一个五十步的重构,就是五十次串行等待首尾相接。并行直接对抗延迟:可以同时完成的独立工作,就应该同时完成。
3. 人成为串行瓶颈
在严格的串行工作流里,人经常是速率限制器。你逐步审查、纠正方向、批准下一步。这种监督是有价值的——对于需要严格复核的工作,这正是你要的——但它无法扩展到数百个机械子步骤。除了时间之外,还有一项成本:注意力。作为一段冗长、重复的会话的唯一编排者,人会疲劳,而疲劳带来的往往是更差的监督,而不是更好的。
| 维度 | 串行(单智能体,一次一轮) | 并行编排(多个子智能体同时工作) |
|---|---|---|
| 执行模式 | 串行:请求、等待、请求 | 并发:派发 N 个,合并结果 |
| 延迟 | 所有轮次延迟之和 | 大致等于最慢的独立分支 |
| 上下文 | 单个窗口,塞满对话历史 | 每个子智能体独立、聚焦自己那一块 |
| 故障处理 | 人工重试或重新提示 | 自动重路由失败分支 |
| 人的角色 | 逐步审批者 | 目标设定者与最终审查者 |
| 最佳适用 | 范围明确的小改动 | 多文件、多步骤、可分解的目标 |
并行编排改变了什么
并行 Agent 编排(Parallel Agent Orchestration) 把循环反转了过来。不再由一个智能体逐步推进任务,而是由编排器接手目标,将其拆解为子任务,并同时派发多个子智能体。每个子智能体负责一块边界清晰的工作,拥有自己的局部上下文、自己的工具、自己的成功标准。随后编排器把它们的产出收敛为一个一致的结果。
上下文不再是你争我夺的零和资源。 每个子智能体只针对自己那一块获得聚焦的上下文,而不是继承此前一切的全部记录,所以没有任何单个智能体需要把整个任务装进一个窗口。编排器持有计划,子智能体持有自己的片段。如果你想了解整体框架,可以看什么是 Agent Orchestrator。
墙钟时间向最慢的分支收敛。 十个独立的修改一次性派发出去,耗时大致等于最慢的那一个,而不是十个之和。收益大小取决于任务中有多少部分真正相互独立——而在真实的重构、迁移和测试套件工作中,这部分通常是大部分。
人往上走了一层。 你不再逐步审批,而是设定目标、定义约束、审查合并后的结果。这正是多智能体开发模式背后的核心主张:有价值的单位不再是「提示词」,而是任务图(task graph)。
并行智能体工作的几种模式
并行不只是「多开几个智能体」。朴素地扇出——把三十个智能体一股脑丢向一个任务——只会产生合并冲突和重复劳动。真正的功夫在模式里。
扇出 / 扇入(Fan-Out / Fan-In)
编排器把一个目标拆成 N 个独立单元,为每个单元派发一个子智能体,然后收集并合并结果。当各单元真正独立时,扇出最理想:在多个文件中重命名一个符号、给互不导入的模块补充测试、更新彼此不共享状态的文档页面。扇入才是难点——它需要冲突检测和合并策略,而不只是把结果拼在一起。
角色专业化(Role Specialization)
与其用 N 个一模一样的智能体,不如给它们不同的职责:一个实现、一个写测试、一个审查、一个做性能分析、一个检查安全。每个角色可以携带更窄、更锐利的上下文——审查者只需要 diff 和明确的需求,不需要实现过程的完整记录。它还能带来真正独立的验证,而单个智能体审查自己产出的结果,很少能做到这一点。
依赖感知调度(Dependency-Aware Scheduling)
真实任务很少完全独立:修改共享接口必须先于修改它的调用方。依赖感知调度会构建任务图,判断哪些可以并行、哪些必须等待,并据此派发。独立分支并发运行,依赖分支排在前置条件之后。这就是「看起来并行」与「真的正确」之间的差别。
失败重路由(Failure Re-Routing)
在串行工作流里,一次失败会让整条链停摆,你要重新提示。在编排工作流里,某个子智能体失败只是一个局部事件:编排器可以重试该分支、把它重新分配给使用不同模型或方法的子智能体,或者转交人工——而任务的其余部分完全不受影响。故障隔离,才是让长时并行工作流可以放心「放着不管」的关键。
权衡取舍(诚实地说)
并行编排不是免费的,也不是万能的。
对于小而明确的修改,串行才是正确选择。 修个错别字、重命名一个变量、加一个判断、解释一段堆栈信息——单个智能体在一两轮内回应,搭建更快、推理更简单,开销也比一套编排图更小。为一个二十行的改动上并行,是过度工程,而开发者一天中的大部分时间恰恰就是这类小改动。
并行会带来协调成本。 拆解需要规划,合并冲突真实存在,两个子智能体可能各自做出局部合理、但全局不一致的决定,而编排层本身也是一个可能出故障的系统。
延迟收益要求任务真正可独立。 如果每一步都严格依赖上一步,并行什么也买不到:你付出了协调成本,却没换来任何并发。
成本与审查是转移了,不是消失了。 同时运行多个智能体,可能比单个智能体慢慢走消耗更多 token,也会一次性产出更多需要审查的内容。按 token 计费时,账单随智能体数量增长;使用本地模型时则不然。
它不能替代需求明确。 一个含糊的目标被并行拆解,只会更快地产出若干个含糊的结果。
并行编排是对一个结构性问题——「一个智能体、一轮、一个上下文窗口」的天花板——的结构性解法。它不是对思路不清的解法。
结语
串行 AI 编程撞墙,不是因为单个智能体变差了,而是因为它所处的循环有一个固定的形状:一轮、一个智能体、一个上下文窗口。这个形状应付小改动绰绰有余,面对大任务则从结构上受限。
替代方案不是「更强的单个智能体」,而是一个能拆解目标、并行派发多个子智能体、按依赖调度、并对失败进行重路由的编排器——这正是 Doforu 所构建的模式。它运行在 macOS、Windows 与 Linux 上,所有编排都在本地进行,支持 15+ 模型家族 — OpenAI(GPT-6 Astra)、Anthropic(Claude Opus 5.5)、Google(Gemini 4 Argon)、DeepSeek(V4.1)、阿里通义千问(Qwen3.8-Max)、月之暗面(Kimi K3)、MiniMax(M3)、智谱(GLM-5.3),以及本地 Ollama/vLLM 模型 — 并通过 BYOK 用你自己的密钥直连模型提供商,不收取任何加价。
如果你一直在比较各种单智能体编程工具,那么现在真正的问题已不再是「谁的 diff 写得更好」,而是「谁不再让你一直坐在循环里」。看看 Agent Orchestrator 模式与单智能体编辑器有何不同,或者把它与 Cursor、Claude Code 逐项对比。
想试试本地优先的桌面 Agent 编排器? 下载 macOS、Windows 与 Linux 版