构建高效智能体

9535 字
64 分钟
构建高效智能体
构建高效智能体
Building Effective Agents
Erik Schluntz、Barry Zhang · Anthropic · 2024 年 12 月
主线
面对一个待办的 LLM 任务,你究竟该停在单次调用、加一层编排,还是放出去让模型自己跑。文章用一条复杂度递增的单轴把答案铺开:先判断要不要做,再判断用不用框架,然后按路径确定性从高到低给出五种工作流模式与自主智能体,最后落到所有模式共用的地基——工具接口的工程。
内核
「工作流」与「智能体」的分界不在于聪明程度,而在于下一步由谁决定:工作流由预写的代码路径决定,智能体由模型自己决定。这条分界线一旦明确,选模式的依据、复杂度取舍的准则、工具设计该花多少力,全都从这一刀长出来。
决策链
这篇文章的顺序本身就是它的主张

作者把整篇文章组织成一条自上而下的决策链,每一节都在回答「上一节的答案成立时才继续往下」。

这条链的排列不是叙述方便,而是作者反复回到的同一个判断:复杂度只在可证明地改善结果时才加。开篇讲「找最简单的可行方案,必要时才增加复杂度」,中间讲框架时又说「它们会让人忍不住加复杂度,而简单设置本来够用」,结尾收在「成功不在于构建最精密的系统,而在于构建适合你需求的那个系统」。三处同义反复,构成这篇文章的骨架。

智能体系统的决策链 从要不要做智能体系统开始,经要不要用框架、路径由谁决定两个判断,落到工作流五种模式或自主智能体,最后指向工具接口的工程。 要不要做智能体系统 多数时候不用。智能体系统用延迟和成本换任务表现 第 1 环 是 否 停在单次调用 + 检索 + 示例 要不要用框架 先不用,直接调 API;用则须理解底层代码 代码路径预写 工作流 模型自己决定 自主智能体 五种工作流模式 提示链 路由 并行 编排者-工作者 评估者-优化者 自主智能体 规划 执行 每步取环境反馈 检查点 停止条件 无论选哪条,都落到工具接口的工程 格式选择 三条建议 像写人机接口一样认真对待 代入模型视角自查 对工具做防错设计
决策链自上而下,每一环的答案决定是否进入下一环。复杂度只在可证明地改善结果时才加——这是全文被反复回到的那个判断。
决策点作者的答案依据的判断
要不要做智能体系统多数时候不用智能体系统用延迟和成本换任务表现
要不要用框架先不用,直接调 API框架的抽象层遮蔽底层提示与响应,调试更难
用哪种工作流模式看子任务能否预知、能否并行、评估标准是否清晰每种模式对应一类任务结构
什么时候放给智能体步数无法预测、无法硬编码路径时且必须能信任它的决策
工具怎么写像给人写接口文档一样认真工具错误会逐轮放大

值得注意的是,这条链上没有一节是正面讲「怎么把智能体做好」。通读全文会发现它的重心落在两端:最前面讲「什么时候不该用」,最后面讲「工具怎么设计」。中间那五种模式只是目录。

前提与边界

这条链预设了「你已经有明确的 LLM 能力基线」。文章对模型的判断能力、工具调用可靠性不做评估,直接假定前提成立。这在 2024 年底成立,但模型能力是这篇里唯一没有标注版本的东西,也是整条链最脆的一环。

模式谱系
五种工作流模式与自主智能体

从增广语言模型这个基座出发,逐级增加复杂度,铺出五种工作流模式,最后抵达自主智能体。

这个排列本身就是判据。每往下一级,路径的确定性就少一分,模型承担的决策就多一分。五种工作流模式之间不是并列可选的菜单,而是按「子任务能否预先知道」这一条轴排开的:能预先知道,就落在前四种里的某一种;不能预先知道且要动态拆解,用编排者-工作者;连拆解方式本身都难以预设,才轮到评估者-优化者与自主智能体。

六种模式的复杂度谱系 从增广语言模型到自主智能体,按路径确定性递减排列,五个工作流模式夹在基座与智能体之间。 增广语言模型 提示链 路由 并行 编排者-工作者 评估者-优化者 自主智能体 路径由代码写死,模型只执行 路径由模型自己决定 决策轴:下一步由谁决定
复杂度沿一条轴递增:路径的确定性递减,模型承担的决策递增。五种工作流模式按「子任务能否预先知道」排开,不是并列可选的菜单:能预先知道就落在前四种之一,不能但要动态拆解用编排者-工作者,连拆解方式都难以预设才轮到评估者-优化者与自主智能体。
模式路径由谁定何时用结构
提示链预写的固定序列任务能干净地拆成固定子任务串联,每步可加程序化闸门串联
路由预写的分支存在清晰类别,且分类能做准先分类再分流
并行预写的多个分支子任务互相独立,或需要多视角分区或投票分区或投票
编排者-工作者编排者动态决定子任务数量无法预先知道中心拆解、派发、汇总
评估者-优化者预写的双角色循环有清晰评估标准,且迭代确有价值生成与批评交替循环
自主智能体模型自己决定步数无法预测,无法硬编码路径规划、执行、感知反馈、循环
前提与边界

这张表是选型工具,不是流程图。五种模式都不含错误恢复与状态持久化。作者在这篇文章里完全没碰这两件事,而它们恰恰是工作流从演示走向生产时最先撞上的墙。

时代限定

原文发布于 2024 年 12 月,文章自己在开头挂了一条注:文中描述的工具生态此后已发生明显变化,指向 Claude Managed Agents 与相应文档。这意味着框架清单、模型版本、托管形态这三项已过期,但五种模式的划分逻辑不受影响。

提示链
能干净拆成固定子任务时,任务就该拆开,让每次调用只做一件更容易的事。

作者给这条模式的适用条件只有一句话:任务能被容易且干净地分解成固定子任务。目标是用延迟换更高的准确率,因为每个子任务更简单,模型出错的机会就少了。

它的关键设计是闸门:在任意中间步骤加程序化检查,确认流程还在轨道上。这个细节容易被略过,但它是提示链区别于「让模型一口气干完」的全部价值所在。闸门把错误拦在早期,而不是让它顺着链条一路传到底。典型用法有两类:先生成营销文案再翻译;先写文档提纲、检查提纲是否符合标准、再照着写正文。第二个用法的结构值得单独看——检查环节不是让模型自己满意,而是让程序按明确标准判断。

提示链的闸门机制 任务先经生成提纲,再由程序闸门判断是否符合标准,符合则写正文,不符合则改写提纲后重来。 输入 生成提纲 闸门 符合标准? 程序判定 是 写正文 输出 否 改写提纲 闸门把错误拦在早期,而不是让它顺着链条一路传到底 闸门只能守可判定的边界,「这段论述是否打动了读者」这种判断写不成代码
提纲检查不是让模型自己满意,而是让程序按明确标准判断。「检查」与「生成」分成两步,是用结构换可靠性最朴素的办法。
前提与边界

成立的前提是拆解方式能预先写死。一旦子任务的数量或内容取决于具体输入,这个模式就失效了,那正是编排者-工作者的适用区间。另一个隐含前提是闸门的标准可以程序化判定:提纲是否符合某些标准可以写代码检查,但「这段论述是否打动了读者」不能。闸门只能守可判定的边界。

作者用它说明一个容易被忽略的权衡:智能体系统整体是在用延迟和成本换任务表现,提示链是这条曲线上的一个具体位置,它换的是延迟,换来的是准确率。文章没有给出任何数字说明这个交换在什么规模上划算。
路由
用分类把输入分流到各自专门的流程。分流的收益在于每条分支能被单独优化,不分流的代价是为一种输入做的优化会损害其他输入。

路由解决的是一个具体的性能问题。客服场景里,通用咨询、退款请求、技术支持如果共用一套提示,调好其中一类就会让另一类变差。分类之后,各走各的提示、工具与流程,互不干扰。

作者举的第二种用法比第一种更有意思:把简单常见的问题路由到更小更便宜的模型(Haiku 4.5),把困难少见的路由到更强的模型(Sonnet 4.5),以成本换性能。这是把「模型选择」也当成路由的一个分支。路由器不只分发任务,也分发算力。

路由的分类分叉 输入经分类器分流到三条专门流程,分别配有专用提示与工具。分类器是单点故障。 输入 分类器 单点故障 通用咨询 专用提示 + 工具 退款请求 专用提示 + 工具 技术支持 专用提示 + 工具 简单常见 → 更小更便宜的模型 困难少见 → 更强的模型 模型选择也是路由的一个分支 分类器出错比不分流更糟 分类可以由 LLM 做,也可以由传统分类模型或算法做,这一步不必然依赖大模型
路由器不只分发任务,也分发算力。分类准确率是这个模式的隐形单点故障,而文章没给任何关于准确率门槛的说明。
前提与边界

两个前提都得满足:类别之间确实有足够差异值得分开,以及分类本身能做准。第二点常被低估。分类器一旦出错,比不分流更糟,因为输入被送进了不适配的处理流程。作者明说分类可以由 LLM 做,也可以由传统分类模型或算法做,说明这不是必须依赖大模型的一步。分类准确率是这个模式的隐形单点故障,而文章没给任何关于准确率门槛的说明。

作者用了两个例子,客服分流与模型强弱分流,但都没有说明分类失败时会发生什么,也没提当类别本身会变时(新品类出现、用户问法变了)分类器如何维护。路由是这套模式里最需要持续投入维护的一个,而它恰恰是文章里讲得最轻的一个。
并行
把互相独立的工作分给多次调用并行跑,结果程序化聚合。并行有两个变体,区别在于分的是不同子任务,还是同一任务的多次尝试。

作者把并行拆成两种变体。分区把任务拆成互不依赖的子任务并行处理,适用场景有两个:护栏与主响应分离,一个模型实例处理用户请求、另一个筛查不当内容;自动化评估,每次调用评估模型表现的一个不同方面。

投票是同一任务跑多遍拿到多样化的输出。适用场景是代码漏洞审查,多个不同提示各自审查并标记问题;内容合规评估,多个提示评估不同方面,或要求不同投票阈值以平衡假阳性与假阴性。投票不只是「多数决」——不同维度可以设不同阈值,某些维度严格些才算问题,某些宽松些。阈值可调意味着你可以按误报代价与漏报代价的不对称来分配严格度。

并行的两种变体 左侧分区把任务拆成不同子任务并行后聚合,右侧投票把同一任务跑多遍后聚合,各维度可设不同阈值。 分区 sectioning 拆的是不同子任务 任务 主响应 护栏筛查 分维度评估 程序化 聚合 护栏与主响应分开处理,好于同一次调用兼顾两者 子任务若互相有先后约束,就不是并行而是提示链 多次尝试的失败模式若相同,投票只在放大同一个错 投票 voting 同一任务跑多遍,阈值可按维度分别设定 任务 提示 A 提示 B 提示 C 按维度 设不同阈值 投票不只是多数决,阈值可按误报与漏报代价的不对称分配 上下文位置偏置会削弱投票效果 文章没有讨论投票的边际收益何时饱和
并行的两种变体:分区拆的是不同子任务,投票跑的是同一任务的多遍。投票不只是多数决,各维度阈值可分别设定。
前提与边界

分区的前提是子任务真的互不依赖,如果子任务之间有先后约束,就不是并行而是提示链。投票的前提是多次尝试的失败模式不同,如果每次调用犯的是同一个错,投票只是在放大同一个错误。上下文位置偏置也会削弱投票效果。文章没有讨论投票的边际收益何时饱和。

作者在并行这一模式里顺带给了一个更一般的观察:对于有多重考量因素的任务,把每个考量分配给独立调用,模型表现通常更好。这句话的适用范围比并行模式本身更宽。
编排者-工作者
中心模型动态拆解任务、派发给工作者、汇总结果。它与并行的拓扑结构相同,差别全在子任务的来源。

适用场景的共性是子任务的数量和内容都不可预测。原文举的两个例子都指向这一点:编程产品每次要改的文件数量与改动性质取决于任务本身;搜索任务要从多个来源收集与分析信息,可能需要多少轮搜索事先不知道。

作者用「地形相似,但关键区别在于弹性」来描述它与并行的差别。并行的中心只是分发任务,编排者的中心还要做判断:判断该派什么活、派给谁、收到的结果怎么合。这比并行多了一层要求,代价是中心成了单点。编排者拆错了,所有下游都错。

编排者与工作者 中心编排者动态拆解任务并派发给多个工作者,再汇总结果,子任务由编排者当场决定而非预先定义。 输入 编排者 当场决定子任务 既是单点,也是判断所在 工作者 1 改文件 A 工作者 2 搜来源 B 工作者 N 数量事先未知 汇总 编排者做判断 拆错则全盘皆错 出 与并行的拓扑结构相同,差别全在子任务从哪来:并行预先定义,编排者当场决定
编排者比并行的中心多做一件事:判断该派什么活、派给谁、结果怎么合。这层要求让中心成了单点。
前提与边界

前提是中心模型有足够能力做拆解和汇总。并行的中心只是分发,编排者的中心还要做判断。代价是中心成了单点:编排者拆错了,所有下游都错。原文没有讨论如何校验拆解质量,也没有给出拆解本身出错时的兜底。

作者明确说这个模式适合编程类任务,因为「要改哪些文件、每个文件改成什么样,取决于任务本身」。这是全文对「子任务不可预知」最清晰的例证,比抽象描述好懂得多。
评估者-优化者
一个调用负责生成,另一个负责评价与反馈,两者循环往复。这个循环能不能转起来,取决于两个信号同时出现。

这个模式的成立需要两个信号同时出现,作者把它们写得明确。第一,人把反馈讲清楚之后,模型的输出能确实变好。第二,模型自己能给出这种反馈。缺任何一个,循环就空转:模型批评得不准,或者批评了但改进方向对不上。

作者拿人类写作者反复打磨文章的过程类比这个循环。这个类比用得准:写作者的第一稿确实需要第二双眼睛,而这双眼睛不必是另一个人的,也可以是模型。适用场景有两个:文学翻译,译者模型可能漏掉细微之处而评估模型能给出有用批评;需要多轮搜索与分析的复杂检索任务,评估者决定是否还需要继续搜。

评估者与优化者的闭环 生成产出草案交评估者判断,合格则输出,不合格则带反馈回到生成,形成闭环。 输入 生成 产出草案 不合格,带反馈回到生成 评估 判断是否合格 合格 输出 循环转起来的两个信号 人把反馈讲清楚后输出能确实变好 + 模型自己能给出这种反馈  缺一个则空转
评估者不只是打分,它同时是循环的退出条件。但评估者判断错了,循环会停在不合格输出上,或者一直转下去。
前提与边界

前提是评估标准清晰且能被模型判断。「文学翻译的细微之处」这类判断依赖于评估者自己的品味标准,它的稳定性取决于模型在那个领域被训练得如何。文章提到评估者可以决定是否值得继续搜索,这是循环的退出条件,但同样的问题在这里出现:评估者判断错了,循环就会停在一个不合格的输出上,或者一直转下去。原文没有讲循环的最大轮数,也没讲怎么在评估不可靠时降级。

作者用人类写作者反复打磨文章的过程类比这个循环。这个类比用得准的地方在于它解释了「谁来做评估者」:不是更强的模型,而是承担不同角色的模型。原文举的两个场景被简化的部分是:真实场景里评估标准往往需要人来定,作者省掉了「谁来定标准」这一环。
自主智能体
步数无法预测、无法硬编码路径时,把路径的决定权交给模型,由它自己规划执行、靠环境反馈纠偏。

作者对智能体工作方式的描述非常朴素:它通常就是一个基于环境反馈循环使用工具的语言模型。所有让它显得复杂的机制——规划、暂停、执行、检查点,都是为了支撑这个循环。

运行机制的三个要素各司其职。规划与执行分离:任务明确后智能体独立规划和执行,必要时返回向人求助,起点必须是人给的命令或交互式对话,智能体不自己发明任务。每一步都要拿到地面真相:工具调用结果、代码执行输出这类来自环境的真实反馈,是智能体判断进展的依据,没有它模型只能靠想象往下走。检查点与停止条件:智能体可以在检查点或遇到阻塞时暂停等人介入,任务通常在完成时终止,但通常还要设停止条件来保持控制。作者特别强调:自主性适合在可信环境中做规模化任务,代价是更高成本与错误累积,因此建议在沙箱充分测试并配以护栏。

自主智能体的运行循环 人在起点给定任务,智能体规划、执行、获取环境反馈并循环,检查点与停止条件提供控制。 人在起点给定任务 命令或交互式对话 规划 执行 环境反馈 工具结果、代码执行输出 没有它,模型只能靠想象往下走 检查点与停止条件 暂停等人介入,或以最大迭代次数收束 未完成则回到规划,构成循环 自主性适合在可信环境中做规模化任务 代价是更高成本与错误累积
智能体的三个运行要素各司其职。原文强调自主性适合在可信环境中做规模化任务,代价是成本与错误累积。
要素作用缺了会怎样
人在起点给定任务划定问题边界智能体自己找活,方向不可控
每步获取环境反馈判断真实进展靠想象推进,偏离累积
检查点与停止条件保持人的控制权失控循环或过早终止
前提与边界

三个前提,缺一不可:步数确实无法预测(能预测就该用工作流)、环境可信(错误会累积)、决策能力值得信任(作者说「你必须对它的决策有某种程度的信任」)。

时代限定

原文写于 2024 年 12 月,彼时「智能体正在生产环境中崭露头角」是现状描述而非展望。今天再看,这段里最不稳的是「模型能力成熟到让智能体可行」这个前提。原文把智能体的可用性挂在「理解复杂输入、进行推理与规划、可靠使用工具、从错误中恢复」四项能力成熟上,这四项的判断水位在两年间变化很大。

工具接口
工具定义与规格值得跟你写整体提示词同等的注意力,因为智能体与计算机之间的接口工程质量决定系统上限。

作者在正文中只留了一句重话,然后把它展开成附录。「构建 SWE-bench 智能体时,我们花在优化工具上的时间比优化整体提示词更多。」这句话是全文对工程优先级的最强表态——工具设计不是收尾工作,而是主要工作量。

作者先指出一个容易被忽略的事实:同一个动作往往有多种描述方式。文件修改可以写成 diff,也可以重写整个文件;结构化输出可以把代码放在 markdown 里,也可以放在 JSON 里。在软件工程里这些差异是表面的、可无损互转,但对模型来说,有些格式明显更难写。写 diff 需要在写新代码之前就知道 chunk 头里要改多少行;把代码放进 JSON 相比 markdown 需要额外转义换行和引号。方法论层面的核心类比是:把智能体与计算机的接口当成人机接口来对待,投入同等认真的力气。由此推出四条——把自己放到模型的位置上看工具是否显然可用、像给初级开发者写接口文档那样写、测试模型怎么用你的工具、对工具做防错设计(poka-yoke)。

工具格式的选择与防错设计 同一个动作有三种描述方式,模型写难度不同;据此得出三条格式建议,再推到四条接口设计方法。 同一个动作,多种描述 diff 格式 需预先知道改动行数 模型难写 写之前就被格式卡住 全量重写 无格式开销 模型易写 软件工程里无损互转,对模型不等价 JSON 包裹 需转义换行与引号 模型难写 额外转义开销 三条格式建议 给模型足够的 token 去思考 格式贴近互联网上自然出现的形态 消除格式上的额外开销 四条接口方法 把自己放到模型的位置上看工具是否显然可用 像给初级开发者写一份优秀的接口文档 测试模型怎么用你的工具,看它犯什么错 对工具做防错设计,改参数让犯错更难
格式选择不是审美问题,是可写性问题。三条格式建议落到四条接口方法上,最后收敛到一个具体改动上。

最后这条作者给了实测案例,也是全文最具体的一个工程细节:他们发现模型在使用相对路径的工具时会犯错,尤其是在智能体已经移出根目录之后。解决办法是把工具改成强制要求绝对路径,然后模型使用这个方法毫无差错。这个案例示范了防错设计的完整逻辑:错误是环境的结构性特征导致的,那就消除环境里的这个特征,而不是在提示词里反复叮嘱模型小心。

前提与边界

这套方法的前提是工具由你定义。用现成 SDK 的现成工具时,格式与描述不由你控制,能调的空间只剩参数命名与描述文本。另外「给模型足够 token 去思考」这条依赖模型能力与上下文窗口,在上下文紧张的场景里,这条建议与其他「消除格式开销」的建议会互相挤压,原文没有处理这个冲突。

时代限定

文章提到的具体形态(Claude API 的 tool use block、Model Context Protocol 作为工具接入方式)在两年间已明显演进,附录里点名的框架生态官方自己已声明过时。但「把工具当人机接口来设计」这个判断不依赖任何具体工具形态,它依赖的是模型与生俱来的弱点,先验于任何 API 版本。

原文在正文中说工具设计详见附录,这个安排让附录承担了全文最具体的工程内容。作者自己的表述是「在这篇简短的附录里,我们讲讲怎么为你的工具做提示词工程」。「简短」这个自评与实际信息密度不符,这篇附录的内容比正文任何一个模式章节都更实操。
核心原则
文章在结尾处给出了自己一直遵循的三条原则,这是全文少见的作者自述部分。

这三条与前面的决策链是同一件事的三个侧面。「保持简单」管的是不做什么,「优先透明」管的是让人看见它在做什么,「精心设计接口」管的是它做得对不对。

原则内容与正文的关系对应到哪一段
保持简单设计上尽量简单对应「只在必要时加复杂度」
优先透明显式展示智能体的规划步骤对应「地面真相」与检查点机制
精心设计接口智能体与计算机的接口对应工具接口设计卡的全部内容

关于框架,作者的最终建议是:框架能帮你快速起步,但不要犹豫减少抽象层、在走向生产时用基础组件构建。

前提与边界

需要留意的是,作者对「透明」的界定只落在展示规划步骤这一项上,即让人看见智能体打算做什么。它没有涉及另一类透明:结果可复现、决策可回溯、成本可归因。这三件事恰好是智能体进入生产环境后最常被追问的,而文章没有回答。

系统性缺席
这篇论文没回答什么
1. 没有给出任何量化的成本与延迟数据。

全文反复提到智能体系统用延迟和成本换任务表现、并行与投票更贵、智能体成本更高,但没有一个数字:没有模式之间的成本对比,没有「什么规模下哪种模式划算」的界线,没有多跑几轮投票的边际收益曲线。选型者只能凭直觉在「更贵」和「更准」之间取舍。作者给了足够的选择依据,唯独没给这个选择的分母。

2. 完全没有触及状态持久化与错误恢复。

五种工作流模式与自主智能体,加起来描述了任务如何被拆解、路由、并行、评估,但没有一处说明任务中途失败怎么办。链式流程里第三个调用挂了,前两个的中间结果去哪了;派发给工作者的任务部分失败,编排者怎么知道哪部分没成;智能体跑了二十轮撞上限,之前的工作怎么留下。文章在提到智能体时说需要设置停止条件,但停止之后如何保留已有进展,一个字没提。这是模式谱系与生产系统之间最大的一段空白。

3. 没有讨论多智能体协作。

全文的智能体都是单体自主决策,编排者-工作者模式里的工作者也是被派活的执行者,不与彼此协作。多个智能体之间如何分工、如何通信、冲突怎么解、如何避免互相等待,这套问题在 2024 年底已是行业热点,文章完全绕开了。绕开的方式值得注意:它没有论证「不需要」,而是根本没提。

4. 没有给出工具描述的量化标准。

作者说「像给初级开发者写接口文档那样」,但这仍是类比而非标准。多长算够短、示例该给几个、边界情况该覆盖哪几类、参数描述写成什么结构才算合格,这些可以照着做的问题,文章都留在了经验层。唯一量化的建议是「给模型足够 token 去思考」,而「足够」是多少没给。

5. 回避了「何时不该用智能体」里的成本侧。

作者在「何时该用」一节里给出了任务结构上的判据(步数不可预测、需要模型驱动决策),但当一个任务既符合结构条件、又在成本敏感的场景里时该怎么办,没有回答。客服是文章举的正面案例,附录里也提到了按成功解决量计费的商业模式,这条按结果计费的路径为「什么时候该用」补上了一个文章没展开的答案:把风险共担写进商业模式。但作者没有把这层意思挑明。

6. 多步工作流的质量保证机制缺席。

智能体那部分说了沙箱测试加护栏,但工作流那五种模式一个字的测试策略都没写。提示链的闸门是运行时检查,评估者-优化者的循环也是运行时检查,开发阶段怎么验证一条五步链路的正确率,没有答案。对一个教人搭系统的文章来说,这是个反直觉的缺口。

适用边界
作者在哪些地方说错了或说窄了
框架观察有范围

「最成功的实现没有用复杂框架或专门的库」这个观察有范围。它说的是「我们合作过的几十个团队」,样本是 Anthropic 自己的客户。能用直接的 API 调用搭出系统,与能在自己团队外把这套东西交给几十个工程师维护,是两件事。文章确实在同一段里说了「如果用框架,要理解底下的代码」,这句话把问题指向了使用者的理解成本而不是框架本身,但读者拿到的行动建议仍然是「先别用框架」。

「适合你需求的系统」没有可操作性

「成功在于构建适合你需求的系统」这句话没有可操作性。它作为原则无懈可击,作为决策规则则什么都没说:怎么知道哪个系统是「适合」的?作者的实践是「测量表现并迭代」,但没有给任何测量的方法或指标。判断「加复杂度是否值得」这件事,被留在了读者手里,而它恰恰是整篇文章声称要解决的问题。

框架与直接 API 的取舍漏了一个变量

漏了迁移成本。理解底层代码这个要求是对的,但当换模型、换供应商、换工具格式时会发生什么,文章没提。用 API 直接搭的系统,迁移成本是重写;用框架搭的系统,迁移成本可能是改配置。这个变量会实质改变「先别用框架」这个建议在企业环境里的分量。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

当前页面没有目录

文章目录

当前页面没有目录