ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI编程工作流v2.0:从需求拆解到验证迭代的完整实践指南

AI编程工作流v2.0:从需求拆解到验证迭代的完整实践指南 1. 为什么你的AI编程体验总在能用和不好用之间反复横跳先说个我观察到的普遍现象很多人用AI编程工具体验极其不稳定。有时候一个复杂函数它写得又快又对有时候一个简单的CSS居中问题它来回折腾你三十分钟。这不是模型抽风而是大部分人根本没有建立一套完整的工作流程把AI当搜索引擎用想到什么问什么代码坏了就全选丢给AI帮我修一下——这种用法体验全靠运气。我自己的v1.0阶段就是这么过来的。那时候觉得AI编程嘛不就是把需求描述清楚、把报错贴给它、把代码复制回来三步就完事了。实际跑一阵子就发现一堆问题AI改A模块的时候把B模块的逻辑弄坏了上一个对话里的代码跟下一个对话里的代码用的不是同一套接口小项目能应付一到多文件、有状态流转的中型项目AI就像个金鱼记忆只有七秒的实习生你说东它忘西。后来我花了大概两个月时间把整个流程重构了一遍形成了现在这套v2.0。这篇文章不聊某个具体工具的快捷键不教某条提示词的模板而是把一套从需求拆解到后期维护的完整AI编程工作流摊开来讲。适合手里有编程基础、但一直被AI帮倒忙困扰的人也适合想从零开始尝试用AI做完整项目、但不知道第一步该干什么的人。这套流程我用了小半年跑过三个中型项目稳定性和产出质量都有了质的变化。2. 流程总览把AI编程拆成四个彼此独立的阶段v2.0工作流的核心理念其实就一句话不要把AI当成一个能独立完成项目的整体工具而是把它当成流水线上不同工位上的熟练工人每个工位各干各的事由你来当总装工程师。这套流程分四个阶段每个阶段用不同的策略、不同的上下文构建方式甚至可以搭配不同的工具。需求梳理阶段你输出结构化需求文档AI负责提问和补全边界条件产出物是PRD级别的描述文件。技术方案阶段AI基于需求文档拆解模块、设计数据结构和接口产出物是技术方案文档和任务清单。编码落地阶段按任务清单逐项编码每个子任务在独立的、受控的上下文中完成产出物是可运行的代码。验证与迭代阶段构建自动验证回路AI负责跑测试、定位问题、修bug但所有改动必须经过你确认才能合入。这四个阶段之间不是线性走完就结束而是存在反馈回路。验证阶段发现的问题要回流到编码阶段甚至方案阶段重新处理。v1.0最大的问题就是我把这三个阶段揉在一起经常聊着聊着需求忽然就跳到某个具体函数的实现了然后整场对话的上下文都被带偏。在v2.0里我给自己的硬性约束是同一个对话窗口内绝不跨阶段。聊需求就只聊需求写代码就只写代码。这个约束看起来简单实际执行起来对整个工作流的稳定性提升是决定性的。下面分别拆开讲每个阶段的具体做法、工具配置和踩坑经验。3. 需求梳理阶段AI编程提示词的核心不是写清楚而是问明白这个阶段被绝大多数人跳过了。大家拿到一个想法第一反应是打开AI对话框直接说帮我写一个XX系统然后得到的通常是一坨看似完整但根本不贴合实际场景的代码模板。v2.0里我把需求梳理单独成了一个阶段并且在这个阶段让AI不是写代码而是提问题。3.1 用问题驱动需求完整化我的做法是只给AI一段极简的初始描述然后要求它不做任何方案设计只做需求澄清提问。提示词大概长这样我现在想做一个数人的工具用于统计办公区工位使用率。这是最原始的想法还没经过推敲。请你扮演一个经验丰富的产品经理针对这个想法向我提出至少15个问题覆盖 - 使用场景和用户画像 - 核心功能边界做什么、不做什么 - 非功能需求性能、数据精度、部署环境 - 异常场景和约束条件 你现在不需要给出任何技术方案只需要提问。我回答完之后你把我所有回答整理成一份结构化的需求描述文档。这一步的价值在于把我以为自己知道要做什么变成我确实知道要做什么。比如刚才这个数人工具被AI追问之后我才意识到统计的是瞬时人数还是累计人次办公区内是开放式工位还是独立办公室摄像头装在哪、角度有没有遮挡数据要求实时还是允许几分钟延迟没有这套追问直接写出来的代码大概率是网上copypaste了一套YOLO目标检测根本跑不通。我试过很多次无论项目大小让AI先问10到20个问题得到的最终代码质量都要远高于直接下指令。原因是需求澄清的过程其实是在帮你划定边界而AI写代码的能力再强也需要明确边界才能选对技术路径。3.2 需求文档的标准结构经过这个阶段之后你会得到一份结构清晰的需求描述。我建议把它整理成固定的markdown格式存到项目仓库里后续所有阶段都基于这份文档展开而不是每次都在聊天窗口重新描述一遍需求。标准结构大概是# 项目名称 ## 背景与目标 ## 用户与使用场景 ## 核心功能清单标注P0/P1/P2优先级 ## 非功能需求性能、精度、资源、部署 ## 明确不做的内容 ## 成功标准怎么验证做完了其中明确不做的内容和成功标准这两节最容易被忽略但对AI编程的帮助最大。不做什么能有效防止AI在编码阶段发挥过度、擅自加功能成功标准则是验证阶段的验收依据。3.3 这个阶段最容易踩的坑需求梳理阶段我栽过两次。一次是问的问题太少只让它问了5个问题就开始写方案结果写到一半发现连数据从哪来都没定义清楚整个方案推翻重来。另一次是问完问题后我把回答丢给AI让它写代码跳过了需求文档整理结果下一轮对话AI完全不记得上一轮的表达细节又来来回回问了一堆同样的内容。现在的经验是这个阶段的产出物必须是一份独立的、落盘的需求文档它既是后续对话的输入文件也是你与AI协作的合同。任何阶段的对话开始前先把这份文档作为上下文粘贴进去让AI基于文档而非聊天记忆来工作。4. 技术方案阶段任务清单拆得越细编码阶段就越不需要思考需求文档搞定之后很多人会迫不及待进入编码。我在v1.0也是这么干的结果就是写主体功能的时候挺爽写到模块之间对接的部分就开始乱套AI在A对话里设计了一个函数签名在B对话里实现时用了完全不同的命名和参数顺序最后两个模块根本接不上。v2.0把技术方案单独拿出来就是为了解决模块间接口一致性的问题。4.1 让AI输出的是一个方案文档而不是代码这个阶段的输入是需求文档输出是技术方案和任务清单。我使用的提示词框架是这样的基于以下需求文档请输出一份技术方案包含 1. 技术选型建议给出理由和备选方案 2. 模块划分每个模块的职责边界 3. 核心数据结构定义字段、类型、关系 4. 模块间接口定义函数签名、数据结构、通信方式 5. 第三方依赖清单 6. 实施顺序建议哪些模块先做哪些后做 7. 风险点提示 注意这一阶段不需要写任何功能实现代码只需要方案设计。这样做的核心目的是让AI先把所有接口层面的决策确定下来形成一份技术合同。后续编码阶段每个模块的实现对话都基于这份合同来推进模块之间的对接就变成了按合同履约而不是临场发挥。4.2 接口先行避免各写各的灾难举个例子。我做过一个内部工具需要实现用户认证、数据采集、报表展示三个模块。v1.0的做法是三个模块分别开三个对话各聊各的最后合并代码的时候认证模块返回的是{code: 0, data: {user: {...}}}采集模块却用{success: true, user: {...}}报表模块直接取不到数据。v2.0在方案阶段就让AI先定义好所有跨模块的数据格式统一API响应格式 { code: 0, // 0为成功非0为错误码 message: ok, // 错误描述 data: {} // 业务数据 } 用户对象定义 { userId: string, name: string, roles: [string] }定义完这些再开三个对话分别实现三个模块每个对话开头把这份接口定义粘贴进去明确告知所有跨模块数据必须遵循此格式。跑完之后模块之间基本不需要做适配层代码合并的顺畅度提升了不止一个数量级。4.3 任务清单拆分到一次对话能完成的粒度技术方案里最重要的一张表是任务清单。我拆任务的粒度标准是一个任务单元必须能在一次对话上下文中完成并验证通过。如果一个任务需要多轮对话、涉及多个文件的大规模改动就说明它拆得还不够细。实际操作的粒度参考实现某个工具函数如日期格式化、数据校验——一个任务实现某个API端点请求解析、业务逻辑、响应封装——一个任务实现某个UI组件结构、样式、交互——一个任务实现模块A与模块B的数据对接——单独一个任务不跟着模块走每个任务在清单里包含任务编号、任务描述、涉及的输入输出接口、验收标准。这个清单是编码阶段的调度总表每完成一个任务就划掉一个进度一目了然。5. 编码落地阶段多会话上下文的工程化隔离与Git Worktree的妙用方案和任务清单就绪终于进入编码阶段。但v2.0的编码方式跟v1.0完全不同——不再是开一个对话从头写到尾而是按任务清单分配会话每个会话处理一个或几个紧密相关的任务用独立的代码工作区承载产出。5.1 一个任务对应一个新会话上下文干净是效率之源为什么必须一个任务开一个新会话因为AI的上下文窗口是有限的资源。你在一场对话里聊了需求、聊了方案、写了十几个函数到第20轮提问的时候模型对前面内容的注意力已经明显涣散经常出现前后矛盾、逻辑断裂、甚至重复代码的问题。v2.0的做法是每个会话开始时只把与当前任务有关的部分上下文粘贴进去——需求文档中相关章节、技术方案中的接口定义、任务清单中的当前任务描述、以及同类任务的参考代码。其他的内容一概不带。每次会话的统一开场模板大概是请根据以下信息实现【任务编号XXX】 ## 任务描述 【从任务清单复制】 ## 相关接口定义 【从技术方案复制只保留本任务相关的接口】 ## 已有代码约定 【项目里的代码风格、目录结构、命名规范等】 ## 输出要求 1. 输出的代码文件路径要明确 2. 只输出本次任务涉及的文件不输出无关代码 3. 代码中关键逻辑写中文注释这个模板看着朴素但每条都有用。只输出本次任务涉及的文件能防止AI把整个项目重写一遍输出文件路径能避免AI把代码写到一个你没听过的地方。5.2 代码合入用Git Worktree并行开发不打架任务多了之后你会面临并发问题——AI会话是并行的代码改动也是并行的怎么管理多线修改而不互相覆盖Git Worktree是我在v2.0里加进来的关键工具。它的作用简单说就是同一个Git仓库可以检出多个工作目录每个工作目录对应一个分支互不干扰。这样我可以同时开三个AI会话让它们在三个不同的分支、三个不同的目录里各自写代码写完各自提交最后由我统一merge。实际操作流程# 在项目根目录为任务1创建工作区 git worktree add ../project-task1 -b feature/task1 # 为任务2创建工作区 git worktree add ../project-task2 -b feature/task2 # 每个工作区是独立的目录AI会话分别在这三个目录里操作 # 任务完成后回到主工作区依次合并 git merge feature/task1 git merge feature/task2这个方案解决了一个我长期头疼的问题以前用AI改代码最怕的就是两个助手会话同时改同一个文件。有时候A改完了B那边的代码还是旧版本一提交就把A的改动覆盖了。有了Worktree隔离每个会话只在自己的目录里操作物理上杜绝了互相干扰。有个容易被忽略的细节配置Worktree的时候AI会话的工作目录一定要指向对。很多AI编程工具支持设置工作目录如果指向错了AI就会在主分支上直接改代码隔离效果就没了。我一般会先手工在对应目录里创建一个.ai-context.md文件里面放这个任务需要的所有上下文然后告诉AI你的工作目录是xxx上下文文件是xxx先读它再开始。5.3 AI编程智能体工具的选型逻辑聊到工具热门搜索里经常有人对比哪个AI编程工具最厉害deepseek的api和某某AI编程哪个好用。我从工作流的角度说点个人经验对话式通用模型比如Claude、DeepSeek这种直接聊天的适合需求梳理、方案设计阶段上下文长、逻辑推理强、能处理模糊需求。缺点是没有代码执行环境给你的代码是不是能跑它自己也不知道。AI编程智能体工具比如Cursor、Cline这类适合编码落地阶段自带代码读取、文件修改、甚至执行命令的能力能直接帮你把代码写进文件里。缺点是工具本身的上下文管理能力参差不齐项目大了之后经常上下文混乱。我在这套流程里的选型逻辑很朴素不同阶段用不同的工具甚至同一阶段不同任务也可以用不同工具。需求阶段我爱用对话能力强的通用模型编码阶段用能直接操作文件的智能体。不在一个工具上吊死因为没有任何一个工具能同时做好需求分析和代码落地这两件事。如果预算有限只能选一个我建议优先搞定编码落地的智能体工具需求方案阶段用免费模型凑合。因为编码阶段的上下文管理复杂对工具能力要求更高而需求梳理更多靠你提问的质量不挑工具。5.4 编码阶段避坑从零开始能用的AI编程要怎么启动很多新手问从零开始能用的AI编程怎么弄我理解这个问题其实是怎么从一行代码都没有的项目走到第一版能跑起来。对应到这套工作流里从零开始和从有开始的区别主要在第一个任务的设置上。第一个任务通常不是实现登录注册而是初始化项目脚手架。具体提示词思路请在当前目录初始化一个【语言/框架】项目要求 1. 建立标准目录结构 2. 配置好依赖管理文件 3. 准备统一的配置文件如.gitignore、格式化配置 4. 创建一个健康检查接口用来验证服务能启动 5. 不实现任何业务功能我强烈建议第一个任务只做脚手架不掺任何业务。因为项目骨架是一切后续任务的地基AI一旦在脚手架阶段就得同时思考业务实现很容易把目录结构和代码组织搞得乱七八糟。健康检查接口的价值更大——它给你提供了所有后续任务的物理验证手段每次改完代码先确认这个接口还能通说明项目没被改坏。6. 验证与迭代阶段让AI自己发现bug而不是反复制造bugv2.0和v1.0拉开差距最大的地方其实是验证与迭代阶段。v1.0的习惯是跑一遍代码报错了就把报错信息贴给AI让它修修完再跑再报错再贴循环往复。遇到简单的bug还行遇到那种牵一发动全身的逻辑问题AI经常改一处坏一处进入死循环。v2.0的验证策略是把验证从贴报错变成跑测试。6.1 建立一个可重复运行的验证回路每个任务完成之后不能只说写完了必须有一个验证脚本能证明它真的完成了。这个验证脚本在任务清单里就明确了验收标准编码阶段AI按标准实现了代码验证阶段你就跑对应测试。对于大多数项目我建议至少包含三层验证静态检查lint、类型检查、格式检查用脚本一次性跑完单元测试核心函数和模块的输入输出验证集成验证模块间接口对接的冒烟测试比如启动服务、调用健康检查接口有了这个验证回路AI修bug的工作方式就不一样了。不再是你贴一段报错它猜原因而是它可以直接运行测试、看完整错误堆栈、定位到具体代码行。配合能执行命令的智能体工具AI自己就能完成跑测试—读报错—定位问题—修改代码—再跑测试的闭环。6.2 把测试代码本身当成AI的任务这里有个容易犯的误区觉得测试是第二位的先写功能要紧。我的亲身体验是先让AI写测试再写功能产出质量和迭代速度反而更快。操作方法是在任务清单里给每个核心模块加一个测试先行任务。先让AI写一组测试用例覆盖正常路径、边界值和异常输入这些测试会挂在当前功能代码上跑跑不过也没关系。然后再进入功能实现任务把测试跑绿作为完成标准。好处体现在两个地方。第一测试定义了行为契约实现代码写得再烂只要测试通过契约就算满足不会出现代码看着合理但行为不符合预期的情况。第二后续AI改代码的时候测试就是安全网它自己跑完测试发现全绿就知道没改坏东西。6.3 死循环修bug的破解思路就算验证回路建好了AI修bug依然有概率进入死循环改A修好了这个bug改坏了B再改B又弄坏了A。破解方法是在让AI动手之前先强制它做根因分析。我的提示词模板有一个bug需要修复请你先不要改代码完成以下分析 1. 根据错误信息列出可能导致这个bug的所有可能原因 2. 针对每个原因说明它是否与当前代码逻辑吻合 3. 指出最可能的原因并解释为什么 4. 如果修这个bug可能影响其他模块列出受影响的模块和影响方式 5. 最后给出修复方案后再动手这一步看起来浪费时间实际是节省时间。AI很容易在哪里报错改哪里的思维里打转。有人类工程经验的都知道很多疑难bug的修复要改的地方跟报错的地方不在同一处不加分析直接改只能靠猜。强制根因分析之后AI给出的修复方案至少是有逻辑依据的死循环的概率大大降低。6.4 多会话并行改bug时的合并策略用Git Worktree并行开发之后验证阶段会遇到一个新的合并问题多个分支的改动同时完成合并时可能会产生冲突。这里我的经验是做一个合并优先级排序先合并基础模块的改动数据层、接口定义、公共工具函数 再合并依赖这些模块的业务模块改动。 如果合并时发生冲突优先保留基础模块的版本业务模块重新适配。这个策略的前提还是技术方案阶段的接口设计到位。只要接口定义没变基础模块的合并就不应该影响业务模块的代码结构最多是调用方式微调。一旦哪个分支的改动突破了接口约定我会立刻停下合并回到那个分支的AI会话里重新对齐接口定义而不是硬冲突解决。硬解决的代码通常是正确性最差的代码AI不理解、你也不完全理解下次改的时候谁接谁头疼。7. 这套工作流实际跑下来的效果与改进空间到目前为止这套v2.0工作流已经完整的跑过三个项目。一个是内部管理后台前端React 后端Node一个是数据处理脚本集Python还有一个是带硬件交互的监控工具涉及串口通信差不多对应热水词里提到的AI与plc编程这类场景。效果数据大概是这样编码阶段耗时减少了约60%原来三天写完的模块现在一天半到两天能完成而且这算上了需求梳理和方案设计的时间返工率明显降低v1.0时代经常写完一大段发现方向错了推倒重来v2.0因为在方案层面先做了接口对齐返工大幅减少代码质量相对稳定因为有测试回路兜底AI产出的代码至少能跑一些隐藏逻辑错误也被测试尽早暴露了最大的变化其实是心理上的——以前面对AI产出的代码总有一种不知道它改没改坏别的地方的不安感现在整个流程的每一步都有明确产出物和验证手段这种不确定感大大减轻了一些环节还有优化空间列出来供参考自动化编排目前任务清单分配会话还是人工操作下一步想尝试把整个工作流编排到一个AI Agent里让Agent自主调度子任务。但前提是每个子任务的边界要足够清晰否则Agent自己也会陷进上下文混乱的坑。上下文压缩虽然现在一个任务开一个新会话但有些大型任务还是有上下文不够用的问题。我之前实验过在对话中让AI先做阶段性总结并压缩上下文再继续效果还行但不稳定。测试覆盖率度量现在的测试是任务绑定的还没有严格做覆盖率统计。对于安全要求高的系统建议把核心路径测试覆盖率不低于某阈值写进任务清单的验收标准里。7.1 我自己在实践中最大的体会如果用一句话总结这套v2.0工作流的本质那就是把AI从一个聪明的聊天对象变成一个可管理的协作团队。聪明的聊天对象靠临场发挥可管理的协作团队靠流程和制度。AI编程的真正门槛不在提示词技巧而在你有没有一套流程去约束它、验证它、组织它。通过这几个项目的实操我最深的体会是AI编程能力的天花板不在模型而在流程。你可以让最强的模型直接写整个项目它大概率写出一坨看似宏大但到处是暗坑的代码你也可以用相对一般的模型配合严格的任务拆解和验证回路稳定地产出靠谱的代码。流程的力量大于模型的能力。最后再分享一个小技巧这套流程里的所有产物——需求文档、技术方案、任务清单、测试报告——都留在Git仓库里和代码放在一起。三个月后回头改代码的时候翻一翻当初的需求文档和任务清单你对AI输出的代码会理解得比你自己写的还透。毕竟代码会改文档的决策过程不会变那才是整个项目最值钱的部分。
返回列表