作者把整篇文章组织成一条自上而下的决策链,每一节都在回答「上一节的答案成立时才继续往下」。
这条链的排列不是叙述方便,而是作者反复回到的同一个判断:复杂度只在可证明地改善结果时才加。开篇讲「找最简单的可行方案,必要时才增加复杂度」,中间讲框架时又说「它们会让人忍不住加复杂度,而简单设置本来够用」,结尾收在「成功不在于构建最精密的系统,而在于构建适合你需求的那个系统」。三处同义反复,构成这篇文章的骨架。
| 决策点 | 作者的答案 | 依据的判断 |
|---|---|---|
| 要不要做智能体系统 | 多数时候不用 | 智能体系统用延迟和成本换任务表现 |
| 要不要用框架 | 先不用,直接调 API | 框架的抽象层遮蔽底层提示与响应,调试更难 |
| 用哪种工作流模式 | 看子任务能否预知、能否并行、评估标准是否清晰 | 每种模式对应一类任务结构 |
| 什么时候放给智能体 | 步数无法预测、无法硬编码路径时 | 且必须能信任它的决策 |
| 工具怎么写 | 像给人写接口文档一样认真 | 工具错误会逐轮放大 |
值得注意的是,这条链上没有一节是正面讲「怎么把智能体做好」。通读全文会发现它的重心落在两端:最前面讲「什么时候不该用」,最后面讲「工具怎么设计」。中间那五种模式只是目录。
这条链预设了「你已经有明确的 LLM 能力基线」。文章对模型的判断能力、工具调用可靠性不做评估,直接假定前提成立。这在 2024 年底成立,但模型能力是这篇里唯一没有标注版本的东西,也是整条链最脆的一环。
从增广语言模型这个基座出发,逐级增加复杂度,铺出五种工作流模式,最后抵达自主智能体。
这个排列本身就是判据。每往下一级,路径的确定性就少一分,模型承担的决策就多一分。五种工作流模式之间不是并列可选的菜单,而是按「子任务能否预先知道」这一条轴排开的:能预先知道,就落在前四种里的某一种;不能预先知道且要动态拆解,用编排者-工作者;连拆解方式本身都难以预设,才轮到评估者-优化者与自主智能体。
| 模式 | 路径由谁定 | 何时用 | 结构 |
|---|---|---|---|
| 提示链 | 预写的固定序列 | 任务能干净地拆成固定子任务串联,每步可加程序化闸门 | 串联 |
| 路由 | 预写的分支 | 存在清晰类别,且分类能做准 | 先分类再分流 |
| 并行 | 预写的多个分支 | 子任务互相独立,或需要多视角分区或投票 | 分区或投票 |
| 编排者-工作者 | 编排者动态决定 | 子任务数量无法预先知道 | 中心拆解、派发、汇总 |
| 评估者-优化者 | 预写的双角色循环 | 有清晰评估标准,且迭代确有价值 | 生成与批评交替循环 |
| 自主智能体 | 模型自己决定 | 步数无法预测,无法硬编码路径 | 规划、执行、感知反馈、循环 |
这张表是选型工具,不是流程图。五种模式都不含错误恢复与状态持久化。作者在这篇文章里完全没碰这两件事,而它们恰恰是工作流从演示走向生产时最先撞上的墙。
原文发布于 2024 年 12 月,文章自己在开头挂了一条注:文中描述的工具生态此后已发生明显变化,指向 Claude Managed Agents 与相应文档。这意味着框架清单、模型版本、托管形态这三项已过期,但五种模式的划分逻辑不受影响。
作者给这条模式的适用条件只有一句话:任务能被容易且干净地分解成固定子任务。目标是用延迟换更高的准确率,因为每个子任务更简单,模型出错的机会就少了。
它的关键设计是闸门:在任意中间步骤加程序化检查,确认流程还在轨道上。这个细节容易被略过,但它是提示链区别于「让模型一口气干完」的全部价值所在。闸门把错误拦在早期,而不是让它顺着链条一路传到底。典型用法有两类:先生成营销文案再翻译;先写文档提纲、检查提纲是否符合标准、再照着写正文。第二个用法的结构值得单独看——检查环节不是让模型自己满意,而是让程序按明确标准判断。
成立的前提是拆解方式能预先写死。一旦子任务的数量或内容取决于具体输入,这个模式就失效了,那正是编排者-工作者的适用区间。另一个隐含前提是闸门的标准可以程序化判定:提纲是否符合某些标准可以写代码检查,但「这段论述是否打动了读者」不能。闸门只能守可判定的边界。
路由解决的是一个具体的性能问题。客服场景里,通用咨询、退款请求、技术支持如果共用一套提示,调好其中一类就会让另一类变差。分类之后,各走各的提示、工具与流程,互不干扰。
作者举的第二种用法比第一种更有意思:把简单常见的问题路由到更小更便宜的模型(Haiku 4.5),把困难少见的路由到更强的模型(Sonnet 4.5),以成本换性能。这是把「模型选择」也当成路由的一个分支。路由器不只分发任务,也分发算力。
两个前提都得满足:类别之间确实有足够差异值得分开,以及分类本身能做准。第二点常被低估。分类器一旦出错,比不分流更糟,因为输入被送进了不适配的处理流程。作者明说分类可以由 LLM 做,也可以由传统分类模型或算法做,说明这不是必须依赖大模型的一步。分类准确率是这个模式的隐形单点故障,而文章没给任何关于准确率门槛的说明。
作者把并行拆成两种变体。分区把任务拆成互不依赖的子任务并行处理,适用场景有两个:护栏与主响应分离,一个模型实例处理用户请求、另一个筛查不当内容;自动化评估,每次调用评估模型表现的一个不同方面。
投票是同一任务跑多遍拿到多样化的输出。适用场景是代码漏洞审查,多个不同提示各自审查并标记问题;内容合规评估,多个提示评估不同方面,或要求不同投票阈值以平衡假阳性与假阴性。投票不只是「多数决」——不同维度可以设不同阈值,某些维度严格些才算问题,某些宽松些。阈值可调意味着你可以按误报代价与漏报代价的不对称来分配严格度。
分区的前提是子任务真的互不依赖,如果子任务之间有先后约束,就不是并行而是提示链。投票的前提是多次尝试的失败模式不同,如果每次调用犯的是同一个错,投票只是在放大同一个错误。上下文位置偏置也会削弱投票效果。文章没有讨论投票的边际收益何时饱和。
适用场景的共性是子任务的数量和内容都不可预测。原文举的两个例子都指向这一点:编程产品每次要改的文件数量与改动性质取决于任务本身;搜索任务要从多个来源收集与分析信息,可能需要多少轮搜索事先不知道。
作者用「地形相似,但关键区别在于弹性」来描述它与并行的差别。并行的中心只是分发任务,编排者的中心还要做判断:判断该派什么活、派给谁、收到的结果怎么合。这比并行多了一层要求,代价是中心成了单点。编排者拆错了,所有下游都错。
前提是中心模型有足够能力做拆解和汇总。并行的中心只是分发,编排者的中心还要做判断。代价是中心成了单点:编排者拆错了,所有下游都错。原文没有讨论如何校验拆解质量,也没有给出拆解本身出错时的兜底。
这个模式的成立需要两个信号同时出现,作者把它们写得明确。第一,人把反馈讲清楚之后,模型的输出能确实变好。第二,模型自己能给出这种反馈。缺任何一个,循环就空转:模型批评得不准,或者批评了但改进方向对不上。
作者拿人类写作者反复打磨文章的过程类比这个循环。这个类比用得准:写作者的第一稿确实需要第二双眼睛,而这双眼睛不必是另一个人的,也可以是模型。适用场景有两个:文学翻译,译者模型可能漏掉细微之处而评估模型能给出有用批评;需要多轮搜索与分析的复杂检索任务,评估者决定是否还需要继续搜。
前提是评估标准清晰且能被模型判断。「文学翻译的细微之处」这类判断依赖于评估者自己的品味标准,它的稳定性取决于模型在那个领域被训练得如何。文章提到评估者可以决定是否值得继续搜索,这是循环的退出条件,但同样的问题在这里出现:评估者判断错了,循环就会停在一个不合格的输出上,或者一直转下去。原文没有讲循环的最大轮数,也没讲怎么在评估不可靠时降级。
作者对智能体工作方式的描述非常朴素:它通常就是一个基于环境反馈循环使用工具的语言模型。所有让它显得复杂的机制——规划、暂停、执行、检查点,都是为了支撑这个循环。
运行机制的三个要素各司其职。规划与执行分离:任务明确后智能体独立规划和执行,必要时返回向人求助,起点必须是人给的命令或交互式对话,智能体不自己发明任务。每一步都要拿到地面真相:工具调用结果、代码执行输出这类来自环境的真实反馈,是智能体判断进展的依据,没有它模型只能靠想象往下走。检查点与停止条件:智能体可以在检查点或遇到阻塞时暂停等人介入,任务通常在完成时终止,但通常还要设停止条件来保持控制。作者特别强调:自主性适合在可信环境中做规模化任务,代价是更高成本与错误累积,因此建议在沙箱充分测试并配以护栏。
| 要素 | 作用 | 缺了会怎样 |
|---|---|---|
| 人在起点给定任务 | 划定问题边界 | 智能体自己找活,方向不可控 |
| 每步获取环境反馈 | 判断真实进展 | 靠想象推进,偏离累积 |
| 检查点与停止条件 | 保持人的控制权 | 失控循环或过早终止 |
三个前提,缺一不可:步数确实无法预测(能预测就该用工作流)、环境可信(错误会累积)、决策能力值得信任(作者说「你必须对它的决策有某种程度的信任」)。
原文写于 2024 年 12 月,彼时「智能体正在生产环境中崭露头角」是现状描述而非展望。今天再看,这段里最不稳的是「模型能力成熟到让智能体可行」这个前提。原文把智能体的可用性挂在「理解复杂输入、进行推理与规划、可靠使用工具、从错误中恢复」四项能力成熟上,这四项的判断水位在两年间变化很大。
作者在正文中只留了一句重话,然后把它展开成附录。「构建 SWE-bench 智能体时,我们花在优化工具上的时间比优化整体提示词更多。」这句话是全文对工程优先级的最强表态——工具设计不是收尾工作,而是主要工作量。
作者先指出一个容易被忽略的事实:同一个动作往往有多种描述方式。文件修改可以写成 diff,也可以重写整个文件;结构化输出可以把代码放在 markdown 里,也可以放在 JSON 里。在软件工程里这些差异是表面的、可无损互转,但对模型来说,有些格式明显更难写。写 diff 需要在写新代码之前就知道 chunk 头里要改多少行;把代码放进 JSON 相比 markdown 需要额外转义换行和引号。方法论层面的核心类比是:把智能体与计算机的接口当成人机接口来对待,投入同等认真的力气。由此推出四条——把自己放到模型的位置上看工具是否显然可用、像给初级开发者写接口文档那样写、测试模型怎么用你的工具、对工具做防错设计(poka-yoke)。
最后这条作者给了实测案例,也是全文最具体的一个工程细节:他们发现模型在使用相对路径的工具时会犯错,尤其是在智能体已经移出根目录之后。解决办法是把工具改成强制要求绝对路径,然后模型使用这个方法毫无差错。这个案例示范了防错设计的完整逻辑:错误是环境的结构性特征导致的,那就消除环境里的这个特征,而不是在提示词里反复叮嘱模型小心。
这套方法的前提是工具由你定义。用现成 SDK 的现成工具时,格式与描述不由你控制,能调的空间只剩参数命名与描述文本。另外「给模型足够 token 去思考」这条依赖模型能力与上下文窗口,在上下文紧张的场景里,这条建议与其他「消除格式开销」的建议会互相挤压,原文没有处理这个冲突。
文章提到的具体形态(Claude API 的 tool use block、Model Context Protocol 作为工具接入方式)在两年间已明显演进,附录里点名的框架生态官方自己已声明过时。但「把工具当人机接口来设计」这个判断不依赖任何具体工具形态,它依赖的是模型与生俱来的弱点,先验于任何 API 版本。
这三条与前面的决策链是同一件事的三个侧面。「保持简单」管的是不做什么,「优先透明」管的是让人看见它在做什么,「精心设计接口」管的是它做得对不对。
| 原则 | 内容与正文的关系 | 对应到哪一段 |
|---|---|---|
| 保持简单 | 设计上尽量简单 | 对应「只在必要时加复杂度」 |
| 优先透明 | 显式展示智能体的规划步骤 | 对应「地面真相」与检查点机制 |
| 精心设计接口 | 智能体与计算机的接口 | 对应工具接口设计卡的全部内容 |
关于框架,作者的最终建议是:框架能帮你快速起步,但不要犹豫减少抽象层、在走向生产时用基础组件构建。
需要留意的是,作者对「透明」的界定只落在展示规划步骤这一项上,即让人看见智能体打算做什么。它没有涉及另一类透明:结果可复现、决策可回溯、成本可归因。这三件事恰好是智能体进入生产环境后最常被追问的,而文章没有回答。
全文反复提到智能体系统用延迟和成本换任务表现、并行与投票更贵、智能体成本更高,但没有一个数字:没有模式之间的成本对比,没有「什么规模下哪种模式划算」的界线,没有多跑几轮投票的边际收益曲线。选型者只能凭直觉在「更贵」和「更准」之间取舍。作者给了足够的选择依据,唯独没给这个选择的分母。
五种工作流模式与自主智能体,加起来描述了任务如何被拆解、路由、并行、评估,但没有一处说明任务中途失败怎么办。链式流程里第三个调用挂了,前两个的中间结果去哪了;派发给工作者的任务部分失败,编排者怎么知道哪部分没成;智能体跑了二十轮撞上限,之前的工作怎么留下。文章在提到智能体时说需要设置停止条件,但停止之后如何保留已有进展,一个字没提。这是模式谱系与生产系统之间最大的一段空白。
全文的智能体都是单体自主决策,编排者-工作者模式里的工作者也是被派活的执行者,不与彼此协作。多个智能体之间如何分工、如何通信、冲突怎么解、如何避免互相等待,这套问题在 2024 年底已是行业热点,文章完全绕开了。绕开的方式值得注意:它没有论证「不需要」,而是根本没提。
作者说「像给初级开发者写接口文档那样」,但这仍是类比而非标准。多长算够短、示例该给几个、边界情况该覆盖哪几类、参数描述写成什么结构才算合格,这些可以照着做的问题,文章都留在了经验层。唯一量化的建议是「给模型足够 token 去思考」,而「足够」是多少没给。
作者在「何时该用」一节里给出了任务结构上的判据(步数不可预测、需要模型驱动决策),但当一个任务既符合结构条件、又在成本敏感的场景里时该怎么办,没有回答。客服是文章举的正面案例,附录里也提到了按成功解决量计费的商业模式,这条按结果计费的路径为「什么时候该用」补上了一个文章没展开的答案:把风险共担写进商业模式。但作者没有把这层意思挑明。
智能体那部分说了沙箱测试加护栏,但工作流那五种模式一个字的测试策略都没写。提示链的闸门是运行时检查,评估者-优化者的循环也是运行时检查,开发阶段怎么验证一条五步链路的正确率,没有答案。对一个教人搭系统的文章来说,这是个反直觉的缺口。
「最成功的实现没有用复杂框架或专门的库」这个观察有范围。它说的是「我们合作过的几十个团队」,样本是 Anthropic 自己的客户。能用直接的 API 调用搭出系统,与能在自己团队外把这套东西交给几十个工程师维护,是两件事。文章确实在同一段里说了「如果用框架,要理解底下的代码」,这句话把问题指向了使用者的理解成本而不是框架本身,但读者拿到的行动建议仍然是「先别用框架」。
「成功在于构建适合你需求的系统」这句话没有可操作性。它作为原则无懈可击,作为决策规则则什么都没说:怎么知道哪个系统是「适合」的?作者的实践是「测量表现并迭代」,但没有给任何测量的方法或指标。判断「加复杂度是否值得」这件事,被留在了读者手里,而它恰恰是整篇文章声称要解决的问题。
漏了迁移成本。理解底层代码这个要求是对的,但当换模型、换供应商、换工具格式时会发生什么,文章没提。用 API 直接搭的系统,迁移成本是重写;用框架搭的系统,迁移成本可能是改配置。这个变量会实质改变「先别用框架」这个建议在企业环境里的分量。



