最近两年我在不同模型组合之间反复横跳,实际跑过的对话轮次加起来差不多有两千小时量级,这套“模型分化”的打法就是在这个阶段慢慢磨出来的。想清楚一个事之后,很多痛苦瞬间就消解了——不是选一个“最强模型”干所有事,而是让战略型模型负责规划,让执行型模型负责编码,各干各擅长的那一段。这篇文章想聊的就是我怎么拆解这个分工、怎么落地成一套可复用的工作流,以及踩过哪些坑。
这套做法特别适合这几类人:一类是每天要在复杂项目里写大量业务代码的开发者,另一类是负责技术方案、需要频繁切换上下文的技术负责人,还有一类是开始尝试用模型搭建半自动开发流程的团队。如果你只是想偶尔让模型写个脚本、补个函数,那这篇文章的思路也可以给你做参考,但不需要全套照搬。
1. 模型分化:让“全才”回归“专才”
1.1 为什么单一模型做所有事会出问题
早期我用模型的方式特别简单粗暴:拿到一个需求,直接丢给同一个对话窗口,让它从架构设计一路写到单元测试。表面上看起来省事,实际用下来问题一大堆。
首先是上下文污染。写业务代码的时候,前面聊架构设计的那几十轮对话会一直堆在上下文里。很多模型对旧内容的注意力会随轮次衰减,到后面写具体函数时,容易把前面定的边界条件给记岔了。最典型的表现就是:前面说好了某个模块用接口隔离,后面生成代码时直接硬编码耦合进去,完全忘了前面的约定。
其次是成本失控。长上下文意味着每次请求都要把所有历史内容重新过一遍。同一个模型,前面几轮还在规划阶段时每次可能几千个 token,到了写代码阶段,带着全部历史再追加新指令,单次请求轻松突破一万甚至几万 token。一天下来跑几十轮,费用蹭蹭往上涨,而真正有用的信息可能只占其中的一小部分。
更隐蔽的问题是思维风格的冲突。规划阶段的模型需要慢思考,要把边界条件、依赖关系、潜在风险全部想清楚;编码阶段需要快产出,要连续生成大量结构完整、语法正确的代码。这两种能力取向在同一个模型身上很难同时做到极致。我实测过的几个通用旗舰模型,规划能力强的写起代码来偏“理论派”,喜欢引入不必要的抽象层;代码生成猛的做规划时又容易漏掉关键约束。
1.2 用“架构师与施工队”的方式重新分工
想明白上面这些问题之后,我把自己和模型的协作方式彻底重构了一遍,核心就是“模型分化”:战略型模型做架构师,执行型模型当施工队。
战略型模型的工作范围是:理解需求、拆解任务、做技术选型、定义模块边界、规划数据流和接口、预估风险。它的产出不是代码,而是一份足够精确的“工程规格书”,让下一个环节能够在没有歧义的情况下执行。
执行型模型的工作范围是:按规格书里指定的模块,把每一个函数、每一个类、每一条分支逻辑写出来。它不需要思考“为什么这么设计”,只需要关注“这个模块的输入输出是什么、逻辑约束有哪些、代码规范是什么”,然后把高质量的代码填进去。
这套分工的第一个好处是各取所长。规划做得好的模型,即便代码生成能力一般,也不影响它把方案定得严谨;编码能力强的模型,不需要被迫去猜需求意图,只需要照着规格书机械执行,出错率会大幅下降。
第二个好处是上下文干净。规划阶段结束时,我把规格书固化成文档,然后另起新的对话来做编码。执行型模型的对话窗口里只有规格书和当前模块的描述,没有前面几十轮噪声,它的注意力和上下文窗口全部用在当前的编码任务上,生成质量明显提升。
第三个好处是成本可控。规划阶段的输入输出相对短,执行阶段每次请求都稳定在一个合理的 token 区间,不会因为长历史导致不必要的放大。整体算下来,同样一个功能的完成成本,可能只有之前单一模型方案的三分之一到二分之一。
2. 战略型模型怎么选、怎么用
2.1 判断标准不是分数,是这三项能力
很多人选战略型模型喜欢看各种榜单分数,但实际做规划时,真正决定成败的是另外三项能力。
第一项是长文理解与约束保持能力。我测试时会让模型读一份三千字的需求文档,然后问它五个细节问题,看它能否准确复述并提取出所有硬性约束。有的模型前面几轮还能答对,第五个问题就开始张冠李戴,这种模型做规划就是灾难——它会漏掉关键约束,把整个方案带偏。
第二项是拆解结构化能力。给你一个“做一个支持多租户的文件上传服务”这种需求,能不能拆成清晰的模块清单、接口列表、数据模型、异常处理策略和验证计划,而不是给你一段“首先,其次,最后”的模糊概述。这一点直接影响后续执行模型能不能顺利接单。
第三项是反推能力。能主动问你“这个上传服务是否需要做病毒扫描”“文件大小上限是多少”“多租户的数据隔离级别是什么”,而不是闷头直接给出方案。这种交互式的澄清能力,比一次性输出一份看似完整的规划要重要得多。
我个人的经验是,能够胜任战略角色的模型并不需要是最新最强的旗舰,关键是它的“全局一致性”表现稳定。我在实际项目中用过几个上下文窗口比较大的模型来承担这个角色,它们处理长文档和复杂依赖关系的能力明显更强,多轮澄清对话中也很少出现前后矛盾。
2.2 战略型模型的前置工作流
定了使用哪个模型之后,战略阶段的工作流也有讲究,直接决定了规格书的质量。我常用的流程大致是这样:
第一步,把原始需求原文粘贴给模型,同时附上项目背景说明(两条到三条,讲清楚业务方向、技术栈现状、已知约束)。这里不建议把需求总结成自己的话再发过去,因为你在转述的过程中可能已经丢失了部分信息。让战略模型直接读原文,它的提取能力假设是可靠的,就让它从一手材料里挑重点。
第二步,要求模型先输出“澄清问题清单”,而不是方案。这一点很关键。很多模型在规划模式下会急着给答案,结果就是方案做了几十页,关键的边界条件一个都没确认。我一般会在指令里写明:“不要先给方案,先列出你需要澄清的问题清单,说明每个问题背后的影响面有多大。”然后我逐条回答,直到没有遗留问题。
第三步,让模型基于澄清结果输出“方案V1.0”,结构必须包含九个部分:目标与非目标、假设与约束、模块划分、接口定义、数据模型、核心流程、异常与边界处理、测试策略、实施顺序。这九部分每个都要写得足够具体,不允许出现“根据实际情况处理”这种模糊表述。
第四步,交叉审视。我会把方案V1.0复制到一个新的对话窗口,让同一个模型站在“评审者”的角度再读一遍,专门找矛盾点和遗漏点。这一步能发现很多第一个人格视野内看不到的问题,比如模块A的接口设计到了模块B的场景里不成立,或者某些输入校验逻辑没有下沉到底层通用层。
全部通过之后,这份规格书才算定稿,可以进入编码阶段。整个流程看起来多花了一点时间,但后面执行阶段省下来的返工量完全能覆盖这部分投入。
3. 执行型模型怎么选、怎么配
3.1 执行型模型的关键指标是“一次通过率”
执行型模型的评价指标和战略型完全不同。战略型要看全局一致性,执行型所有指标都可以化成一个核心词——一次通过率,也就是不经过任何纠错提示,它第一次生成的代码能否直接通过编译、通过单测、满足规格书要求。
按我实测的多组模型表现来看,影响一次通过率最大的因素不是模型的总参数量或者榜单分数,而是它对“局部规格”的理解稳定性。一个执行型模型如果读得懂精确的函数签名描述、理解分支条件、能分辨输入校验与业务校验的区别,那它的一次通过率会很高;反之,即便是很强的通用模型,如果经常在局部上下文里发挥不稳定,做出来的代码也会让人反复修修补补。
这里要多说一句:执行型模型不一定要选最强的编码模型,而是要在编码能力、速度、成本之间找一个平衡点。如果项目是 CRUD 为主、模板化程度高,用中等成本的模型绰绰有余;如果项目里有大量复杂算法、并发、状态管理这类硬核逻辑,那确实值得用更强的编码模型来扛,因为返工成本远高于调用成本。
3.2 规格书到执行之间的“转译层”设计
战略型模型的产出是面向人类阅读的规格书,直接把它塞给执行型模型,效果往往不理想。原因是执行型模型在长文档里找自己需要的局部信息时容易抓错重点。所以我设计了一个“转译层”,把规格书转成执行模块提示词。
转译层的核心是一个模块任务卡模板,每个模块一张卡,内容包括:
- 模块名与定位:一句话说清楚这个模块做什么、不做什么。
- 输入定义:参数列表、类型、取值范围、必填可选标记。
- 输出定义:返回类型、错误抛出方式、异常约定。
- 依赖关系:依赖哪些上游模块的哪些接口、本模块会被哪些下游模块调用。
- 实现约束:是否允许修改某些文件、必须遵循某些设计模式、禁止使用哪些写法。
- 验收条件:几条可自动验证的规则,比如“所有 public 方法必须有单元测试”“不得出现魔法数字”。
这个任务卡看起来像一份小型 PRD,但它和执行型模型的思维方式高度匹配——执行型模型本质上是一个“局部最优求解器”,你给它的信息越局部、约束越明确,它输出的代码就越准确。
我给执行型模型的下发指令也有一套固定句式模板,核心就是六个字:模块、输入、输出、约束、验收。对话开场时先把任务卡完整粘贴,然后追加一条类似这样的指令:“严格按照任务卡实现该模块。不要修改任务卡之外的任何文件。不要添加额外公共方法。实现完成后,自己按验收条件逐条核对。”这套句式模板经历过多轮验证,哪怕换不同模型都稳定奏效。
3.3 代码生成后的三段式验收
很多人在执行阶段有个坏习惯:模型输出完代码,肉眼扫一眼觉得差不多就收了。这等于把一次通过率硬生生给浪费掉了。我给自己立了一个严格的“三段式验收”规则,每段都没问题才算通关。
第一段是静态自查,让执行型模型自己根据验收条件逐条核对输出,如果有不符合项,立刻解释原因并修正。这个动作把一部分明显的逻辑漏洞提前消化在执行环节里,不需要浪费下一轮对话。第二段是编译和单测,把生成的代码落到实处跑一遍,以实际结果为准。第三段是人工抽检,我不可能读每一行代码,但会重点抽查那些涉及状态变更、并发处理、敏感数据操作的部分,确保实现细节和人脑判断一致。
三关都过了,这个模块才算真正收工。这个方法强制了几个反馈闭环,不会出现“模型写爽了、代码却跑不起来”的情况。经过几百个模块的验证,执行阶段引入的三段式验收让整体交付质量稳定在一个很高水平,和单纯让模型“一次性生成整个项目”相比,返修率下降明显。
4. 实际项目中的完整工作流落地
4.1 一个支付回调模块的完整拆解过程
光讲概念不够直观,我拿最近做的一个支付回调模块来完整展示模型分化是怎么落地的。先说背景:项目需要接入一家第三方支付平台的异步回调通知,回调内容包含加密签名、订单号、金额、支付状态等字段,要求校验签名之后更新订单状态并返回响应。
战略阶段,我把需求原文和项目背景丢给战略型模型,让它先出澄清问题清单。它列出了大概七个问题,其中两个特别关键:一是回调通知是否可能重复推送、服务端有没有幂等机制;二是签名校验失败时的响应格式需要与支付平台约定一致,避免引发重试风暴。这两个点如果在规划阶段漏掉,后面编码阶段几乎注定返工。
澄清完之后,战略型模型输出了规格书。模块划分是三个:签名校验服务、回调处理服务、订单状态更新服务。接口定义部分把每个服务的输入输出、异常类型、幂等键设计都定了下来。核心流程是“验签 -> 幂等检查 -> 更新状态 -> 返回成功”,异常与边界处理里明确了重复通知、金额不一致、签名过期三种特殊情况的处理策略。
我看到规格书之后,交叉审视阶段发现了一个问题:订单状态更新服务的接口设计成同步更新数据库,但如果后续要接入消息队列做异步通知,这个接口就要推倒重来。于是我在评审阶段要求战略模型重新打开接口封装,把状态更新做成一个可替换的接口,默认实现为同步更新。这个调整加进去之后,整个方案才算定稿。
编码阶段,我把规格书按模块拆成了三张任务卡,分别派发给执行型模型。每个模块一路走下来都很顺,其中签名校验服务还出了一版就通过了编译和单测。整个模块从规划到上线,算上我的评审时间,总共花了大概三个小时,而同一个模块在之前单一模型长对话模式下,通常要折腾一天左右。
4.2 从“单人使用”到“团队协作”的扩展方式
模型分化这套打法,刚开始我是一个人在用,后来顺理成章把它扩展到了整个小团队的技术流里。团队协作场景下,规格书的角色变得更加重要了——它不再只是给模型看的任务卡,而是团队成员达成共识的契约文件。
我在团队里推了一套模板,把规格书直接纳入需求评审的交付物。产品和技术对齐需求之后,由战略型模型产出规格书初稿,技术负责人做交叉评审并完善,然后规格书进入开发排期。开发任务分配到人之后,每个人手上拆到的是一条条模块任务卡,这些任务卡可以直接作为和模型协作的输入。这样带来的最大变化是,不同开发之间的实现风格趋于一致,不会再出现一个项目的代码一半是“极简风”一半是“防御过度的保险风”。
还需要注意一个团队的协作细节:同一个规格书,不同执行型模型做出来的代码风格可能差异很大。团队如果同时在用多个模型,最好在任务卡里追加一条“代码风格约束”,明确引用项目的现有代码规范文件,让执行型模型有据可依。这一点看似不起眼,但实测下来能减少大量代码审查中的风格争论。
4.3 怎么维持整套工作流的迭代节奏
模型分化不是一劳永逸的方案,因为模型更新迭代太快了,上个月的最优选型下个月可能就不是了。我现在维持了一套轻量的迭代机制,每个月花半天时间做一次基准测试。
测试方法是固定的:准备三到五个有代表性的任务,覆盖规划、编码、检查三个环节,分别用当前在用的模型组合跑一遍,记录完成时间、一次通过率、总消耗 token 数。然后对比之前的数据,判断现有组合是否还最优。这个测试不追求全面,只求稳定可比,所以样本任务不会频繁更换,方便做纵向趋势分析。
我个人的体会是,模型分化策略的收益会随着工具链的成熟持续放大。规划与编码的解耦,意味着你可以随时替换其中一个环节的模型,而不需要推翻整套工作流。将来如果出现更强的规划模型、更快的编码模型,都只需要局部升级。这种策略在快速变化的工具环境里,天然具备比较好的适应性和生命力。
5. 常见问题与排查技巧实录
5.1 规划没问题,编码却频繁返工的常见原因
我在推广这套方法的过程中,被问最多的问题就是:规格书已经写得很详细了,为什么执行型模型生成的代码还是频繁需要返工?排查下来,绝大多数原因可以归结为以下三类。
第一类是任务卡的信息密度过高。规格书里如果一次塞了太多细节,执行型模型可能无法区分哪些是核心约束、哪些是边缘说明。我见过有人把整个项目的背景、全部接口、所有需求文档一次性发给执行模型,结果模型为了“保持一致性”,把不相关模块的逻辑也给实现出来了,最后还得删掉重来。正确的做法是每张任务卡只聚焦一个模块,背景信息控制在最少必要程度。
第二类是验收条件写得不够机器可读。如果验收条件都是“应该具有良好的扩展性”“代码应该干净整洁”这种模糊表述,执行型模型根本无法据此判断自己是否达标。经验是把验收条件拆成可客观判断的规则,比如“所有对外接口必须支持传入空参数且不抛出未经检查的异常”“不允许在循环中创建新对象”。模型才能当打分器去自查。
第三类是执行环境的上下文和任务卡不一致。有些执行模型会“自作聪明”地假设项目里存在某个工具类或者某个配置项,但实际代码库里根本没有。解决方法是每一张任务卡都附上与本模块直接相关的现有文件片段,让模型的假设建立在真实代码的基础上,而不是凭空猜测。
5.2 战略型模型产出严重偏离时,怎么用“回滚式澄清”抢救
有时候战略型模型给出的方案会严重跑偏,比如偏离需求重点、技术栈选型错误、模块划分维度不合理。碰到这种情况,不建议直接否定方案然后重新生成,而是在原对话里做“回滚式澄清”,让模型回溯到跑偏之前的某个正确状态,重新推导。
回滚式澄清的具体操作是:找到方案中偏离得最远的那一个决策点,引用它前面的一轮确认结论,然后给出类似这样的一段指令:“你刚才在澄清环节确认了需求是A,但方案里却建立在假设B之上,这两者冲突。请回到澄清环节的结论,重新推导方案。”这么做的好处是保留了前面正确的推理过程,只针对分歧点做修正,比从零开始生成更快,也不容易引入新的偏离。
如果回滚式澄清执行了两次,方案还是大面积跑偏,那就要考虑换一个战略型模型了。不同模型之间规划能力的差异很大,尤其是在“遵守澄清结论”这一项上,模型和人一样,有的记性好,有的记性差,没必要硬熬。
5.3 应对执行型模型“过度实现”的系统化方案
执行型模型在实现时经常会有过度实现的问题——规格书只要求返回一个布尔值,它给你写了一个包含错误码、重试逻辑、日志上报的完整子系统。这种现象根源在于模型训练数据里大量存在“生产级代码”,所以它默认输出更复杂、更完整的形式。
应对过度实现的系统化方案,除了在任务卡中明确界定模块范围之外,还可以在指令模板里固定加一句限制:“不得实现需求范围之外的额外功能,包括错误重试、恢复机制、扩展接口。如果认为有必要,请在代码注释中单独说明,不直接实现。”这一句能有效压制大部分过度实现倾向。
还有一个更彻底的方法:给执行模型指定最小输出形态。比如要求“只输出核心类文件,不需要测试文件”“只写最简可运行版本”“禁止新增任何常量配置”。限定形态之后,模型没有空间自由发挥,过度实现的概率会被压到非常低。等到代码能跑通,再视需要进行增强迭代,由你手动决定是否让模型补上额外能力。
6. 给新手的落地建议与避坑提醒
6.1 新手第一周应该怎么上手这套玩法
如果你是从零开始,不建议一上来就完整搭建战略/执行双模型流水线。那需要一个规格书模板、一套任务卡体系、一套验收流程,对新手来说信息负担有点重。我的建议是第一周先做一个最小可用的简化版。
具体的做法是:同一个模型开两个对话窗口,一个窗口只做规划和规格书,另一个窗口只做编码。虽然底层是同一个模型,但对话窗口的分工能让你快速体会“长上下文做规划、短上下文做编码”带来的差异。第一周不要追求效率提升,重点是把每个环节的产出习惯固定下来——规划窗口坚持出规格书,编码窗口坚持按任务卡执行。
等习惯了这种“一次只做一件事”的节奏,再引入跨厂商模型组合,选一个真正适合做战略规划的长上下文模型,配一个代码生成效率更高的模型来实际编码。这时候你会明显感受到,不同模型的差异不是“谁更强”,而是“谁更适合哪个环节”,这个认知本身就值回票价。
6.2 三个最容易踩的坑,提前替你排掉
坑一:把规格书当成一次性文档,写完就不再更新。实际项目里,需求变动是常态,规格书一旦过期,执行型模型还在按旧版本写,必然返工。现在我的规则是:规格书每次变更都必须快速同步一个“变更日志”段落,后续拆任务卡时强制检查变更日志,防止新旧需求互相打架。
坑二:用同一个对话窗口在不同环节之间反复切换。有人会在同一个窗口先做规划,做到一半突发奇想,让模型直接开始写代码。一旦这么做,前面规划的思维上下文就全混进编码环节了,和单一模型长对话的老毛病一模一样。我给自己定的规矩是:对话窗口一开,只允许一个角色。
坑三:公开的模型能力对比不看场景,盲目跟风。如果你发现社区里很多人都在吹一个模型编码很强,先别急着把自己的战略模型也换成它。代码强和规划强是两个方向,正确做法是让它进执行环节跑几轮基准测试,用数据决定去留,而不是被社区热度带着走。
6.3 长期维护这套工作流的心态建议
模型分化策略本质上是在构建一套“人机协作的操作系统”,而操作系统是需要持续维护的。实践中你会发现,每隔一两个月,模型厂商的能力格局就会发生一次洗牌,今天的霸主组合可能很快就不再是最优解。保持心态开放、坚持定期做基准测试的能力,比死守某一套“最优配置”要重要得多。
每次做完基准测试,我会把结论写成简短笔记,记录当前的规划模型偏好什么风格的输入、执行模型最容易在哪些地方出错。这些笔记积累下来,形成的是属于你自己的模型使用经验库。别人给不了这种细颗粒度的认知,只有自己一次次跑数据才能沉淀出来。
我个人这两年半最大的收获并不是效率翻了几倍,而是逐步建立起了对模型能力的正确预期:不神话任何一个模型,也不小看任何一个模型,把它们放到合适的位置上,组合起来才是真正的生产力。希望这套“战略型模型规划、执行型模型编码”的分化思路,也能帮你少走一些我走过的弯路。