1. 为什么“工作流”比“提示词”更值得花时间
我见过太多人把 AI 编程的精力全砸在收集提示词上,硬盘里存了几百个prompt.md,真到写业务代码的时候还是一个函数一个函数地手动补全。问题出在哪?提示词解决的是“单次对话质量”,而工作流解决的是“从需求到可运行代码的整条链路”。这两件事的量级完全不一样。
打个比方,提示词像是给厨师一张写得特别详细的菜谱,工作流则是把采购、备菜、灶台、出餐、试吃这一整套动线都设计好。菜谱再好,厨房动线是乱的,出餐速度照样上不去。AI 编程也是这个道理:你让模型写一个函数,它写得再漂亮,如果每次都要你手动复制、粘贴、跑测试、改报错、再复制回去,那省下来的时间全被流程损耗吃掉了。
这篇要聊的 3 个工作流,是我自己在日常开发里反复打磨、现在基本每天都在用的。它们分别覆盖三个高频场景:新功能从零到一、存量代码的修改与重构、测试与调试的自动化闭环。每个工作流都能独立复用,也可以串起来用。适合有一定编程基础、已经在用 AI 辅助写代码但觉得“效率提升没想象中大”的开发者。如果你还停留在“让 AI 写个快排”的阶段,这篇会让你看到 AI 编程真正的杠杆点在哪。
先说清楚一个前提:下面所有工作流都不依赖某个特定厂商的模型,Claude、GPT、DeepSeek、通义千问都能跑,差别只在效果调优上。工具层面我用的是命令行 + 编辑器插件 + 脚本的组合,核心思路是把 AI 调用变成可重复执行的步骤,而不是一次性的对话。
2. 工作流一:需求拆解到骨架生成,把“想清楚”这件事外包出去
2.1 这个工作流解决什么问题
大部分人用 AI 写代码的第一步就错了:直接说“帮我写一个用户登录功能”。模型会给你吐出一坨看起来能用、实际上边界条件全是坑的代码。为什么?因为你在需求阶段偷的懒,全都会在调试阶段加倍还回来。
这个工作流的核心思路是:在写任何一行代码之前,先让 AI 帮你把需求拆成可验证的子任务,再逐个生成骨架。注意是骨架,不是完整实现。骨架的作用是锁定接口、数据结构、模块边界,这些定下来了,后面填肉就是体力活。
2.2 具体怎么操作
第一步,把原始需求用大白话写下来,越具体越好。比如“做一个待办事项应用”这种就太粗,改成“做一个单页待办应用,支持增删改查、本地持久化、按截止日期排序、逾期高亮”。
第二步,把这段需求丢给 AI,但提示词要这样组织:
我要实现以下需求:[需求描述] 请帮我做三件事: 1. 拆解成不超过 8 个子任务,每个子任务要能独立验证 2. 为每个子任务定义输入输出和依赖关系 3. 指出你认为最容易出错的 3 个地方,以及为什么 先不要写代码。这个提示词的关键在于最后那句“先不要写代码”。我试过很多次,如果不加这句,模型会忍不住直接给你实现,而一旦它开始写代码,拆解质量就会下降。让它专注在拆解上,输出的子任务列表质量高得多。
第三步,拿到子任务列表后,逐个让 AI 生成骨架。骨架包括:函数签名、类型定义、关键注释、TODO 标记。比如:
def add_todo(title: str, due_date: Optional[datetime] = None) -> TodoItem: """ 创建待办事项并持久化。 Args: title: 待办标题,非空,最长 200 字符 due_date: 可选截止日期,None 表示无截止 Returns: 创建成功的 TodoItem 对象 Raises: ValueError: title 为空或超长 """ # TODO: 实现持久化逻辑 # TODO: 处理 due_date 时区问题 pass第四步,人工 review 骨架。这一步不能省。骨架阶段改一个函数签名,成本是 30 秒;等实现完了再改,成本是半小时。我一般会重点看三样东西:接口是否够用、数据结构是否合理、有没有遗漏的边界条件。
2.3 为什么这样设计
有人会问,直接让 AI 写完整实现不行吗?行,但返工率高。骨架先行本质上是把“设计决策”和“编码实现”分开。设计决策需要人参与,因为只有你知道业务上下文;编码实现可以大量交给 AI。混在一起做,AI 会在设计上替你做主,而它做的设计决策往往不符合你的项目规范。
另一个好处是,骨架可以作为团队协作的接口。你把骨架发给同事,同事能立刻看懂你要做什么,比看一段完整实现快得多。
注意:拆解子任务时,每个子任务最好控制在“一次对话能完成”的粒度。如果一个子任务需要 AI 写超过 200 行代码,说明拆得还不够细。
2.4 实操心得
我踩过最大的坑是让 AI 拆得太细,拆出 20 多个子任务,结果管理成本比写代码还高。后来我固定了一个原则:子任务数量控制在 5 到 8 个之间,每个子任务对应一个可独立测试的模块。这个粒度下,拆解本身花 10 分钟,但能省下至少一小时的返工。
还有一个技巧:让 AI 在拆解时标注每个子任务的“风险等级”。高风险的任务自己写,低风险的任务交给 AI。这样能把人的精力集中在真正需要判断的地方。
3. 工作流二:存量代码的精准修改,告别“整文件重写”
3.1 这个工作流解决什么问题
改存量代码是比写新代码更常见的场景,也是 AI 辅助最容易翻车的地方。你让 AI 改一个函数,它经常把整个文件重写一遍,顺带改掉一堆你没让它改的东西。等你 review diff 的时候,发现改动有 300 行,其中 280 行是无关的格式调整。
这个工作流的核心是:用“最小上下文 + 精确指令 + diff 验证”三步法,让 AI 只改该改的地方。
3.2 具体怎么操作
第一步,准备最小上下文。不要整个文件丢给 AI,只给相关的函数和它的直接依赖。比如你要改calculate_discount函数,就给它这个函数、它调用的辅助函数、以及调用它的地方。上下文越小,AI 越不容易“顺手”改别的。
第二步,指令要精确到“改什么、不改什么”。我常用的模板:
请修改以下函数:[函数代码] 修改要求: - 把折扣计算从固定 10% 改成根据用户等级动态计算 - 等级映射:普通 5%,银卡 10%,金卡 15%,钻石 20% - 保持函数签名不变 - 不要修改错误处理逻辑 - 不要调整代码格式 输出格式:只输出修改后的函数,不要输出解释。关键在“不要修改”那几条。明确告诉 AI 哪些不能动,比告诉它哪些能动更有效。
第三步,diff 验证。拿到 AI 的输出后,不要直接覆盖,先做 diff。我一般用编辑器的对比功能,或者命令行diff。如果 diff 超过预期范围,直接打回重来,不要试图手动清理。手动清理的代价往往比重新生成还高。
3.3 参数选择与计算过程
动态折扣这个例子,等级映射怎么定是有讲究的。我一开始想用连续的折扣率,比如discount = level * 0.05,但这样钻石用户是 20%,金卡是 15%,看起来没问题,可一旦等级体系扩展,比如加一个“黑卡”,公式就得改。用映射表更稳:
LEVEL_DISCOUNT = { "normal": 0.05, "silver": 0.10, "gold": 0.15, "diamond": 0.20, } def calculate_discount(price: float, level: str) -> float: rate = LEVEL_DISCOUNT.get(level, 0.05) return price * rate这个改动看起来简单,但如果你让 AI 自由发挥,它很可能给你写成if-elif链,扩展性差。所以在指令里明确“用映射表实现”,比让它自己选方案更可控。
3.4 常见翻车场景
| 翻车现象 | 原因 | 解决办法 |
|---|---|---|
| AI 改了无关代码 | 上下文给太多 | 只给相关函数 |
| 函数签名被改 | 指令没说清 | 明确“保持签名不变” |
| 格式全乱 | 没限制格式 | 加“不要调整格式” |
| 逻辑改错 | 边界没说清 | 补充边界条件说明 |
| 引入新依赖 | 没限制 | 加“不引入新依赖” |
提示:如果 AI 连续两次改不对,不要继续对话,直接重新开一个会话,把上一次的错误作为“反例”写进指令。对话轮次越多,AI 越容易迷失。
3.5 实操心得
我现在的习惯是,改存量代码前先写一个测试用例,把当前行为固定下来。然后让 AI 改,改完跑测试。测试过了,说明没破坏原有行为;测试不过,说明改错了。这个习惯救过我很多次,尤其是改那些“看起来简单但暗藏玄机”的函数时。
另外,AI 改完的代码,我建议至少隔 10 分钟再 review。刚改完的时候,你的大脑还停留在“我让它改了什么”的预期里,容易漏看问题。隔一会儿再看,视角会客观很多。
4. 工作流三:测试与调试的自动化闭环
4.1 这个工作流解决什么问题
写测试和调 bug 是两件最耗时但又最容易被 AI 辅助优化的事。很多人用 AI 写测试,写完就完了,没有形成闭环。这个工作流的核心是:让 AI 生成测试、跑测试、根据失败结果自动修复,形成一个可重复的循环。
4.2 具体怎么操作
第一步,让 AI 根据函数生成测试用例。提示词:
为以下函数生成 pytest 测试用例:[函数代码] 要求: - 覆盖正常路径、边界条件、异常路径 - 每个测试用例要有清晰的命名 - 使用 parametrize 减少重复 - 不要 mock 掉被测函数的核心逻辑第二步,跑测试。这一步必须真的跑,不能靠 AI 说“测试通过”。我见过太多次 AI 说“所有测试通过”,实际跑起来一堆 fail。
第三步,把失败的测试输出贴回给 AI,让它修复。提示词:
以下测试失败了:[失败输出] 被测函数是:[函数代码] 请分析失败原因并修复函数。只输出修复后的函数。第四步,重复第二步和第三步,直到测试全绿。一般 2 到 3 轮就能收敛。
4.3 为什么这个闭环有效
单次让 AI 写测试,它写的测试往往“太友好”——只测正常路径,边界条件一笔带过。但当你把失败结果喂回去,它就被迫面对真实的边界问题。这个反馈循环是质量提升的关键。
我做过一个对比:同样一个日期处理函数,单次生成测试的覆盖率是 62%,经过 3 轮闭环后覆盖率到 91%。差距主要来自边界条件,比如闰年、时区、空值这些。
4.4 调试场景的变体
调试线上 bug 时,这个工作流稍微调整一下:
- 把错误日志、相关代码、复现步骤一起给 AI
- 让它先列出 3 个最可能的原因,按可能性排序
- 针对每个原因,让它给出验证方法
- 你按验证方法逐个排查,把结果反馈回去
- 定位到原因后,让它给出修复方案
这个流程比直接问“这个 bug 怎么修”有效得多,因为它在强制 AI 做假设-验证,而不是瞎猜。
4.5 实操心得
测试用例的命名很重要。我要求 AI 用test_<函数名>_<场景>_<预期结果>的格式,比如test_calculate_discount_diamond_user_returns_20_percent。这样测试失败时,光看名字就知道哪里出了问题,不用去读测试代码。
还有一个坑:AI 生成的测试有时候会“迎合”实现,而不是验证需求。比如实现里有个 bug,测试却通过了,因为测试是按实现逻辑写的。避免这个问题的方法是,先写测试再写实现,或者至少让另一个人(或另一个 AI 会话)来 review 测试。
5. 三个工作流怎么串起来用
单独用任何一个工作流都有收益,但串起来用效果最好。我日常的节奏是这样的:
新功能开发时,先用工作流一做需求拆解和骨架生成,骨架定下来后,用工作流三为每个骨架函数生成测试,然后让 AI 填充实现,跑测试闭环。存量代码修改时,用工作流二做精准修改,改完用工作流三补测试。
这个组合下来,我的实际体验是:写新功能的效率大概提升 2 到 3 倍,改存量代码的效率提升更明显,因为返工少了。但要注意,效率提升不是线性的,前期你需要花时间搭建这套流程,大概一到两周才能形成肌肉记忆。
| 场景 | 主工作流 | 辅助工作流 | 预期收益 |
|---|---|---|---|
| 新功能从零到一 | 工作流一 | 工作流三 | 2-3 倍 |
| 存量代码修改 | 工作流二 | 工作流三 | 3-5 倍 |
| 调试线上问题 | 工作流三 | 工作流二 | 2-4 倍 |
| 重构 | 工作流二 | 工作流一 | 2-3 倍 |
6. 工具链与提示词管理
6.1 工具选择
我不推荐绑定某个特定工具,但有几个原则:
- 命令行优先:能用 CLI 的尽量用 CLI,方便脚本化和版本控制
- 编辑器插件辅助:用于快速调用和 diff 查看
- 提示词存文件:不要存在聊天记录里,存成
.md文件,纳入 git 管理
我自己的组合是:编辑器插件做日常调用,命令行脚本做批量任务,提示词全部存在项目的prompts/目录下。这样换工具的时候,提示词资产不会丢。
6.2 提示词版本管理
提示词是要迭代的。我每个提示词文件都有版本号,比如workflow1_decompose_v3.md。每次调整后,如果效果变好,就升版本;如果变差,就回滚。这个习惯让我积累了一套针对自己项目调优过的提示词,比网上抄的通用提示词好用得多。
注意:提示词里不要写具体的业务逻辑,业务逻辑应该作为参数传入。提示词只描述“怎么做”,不描述“做什么”。这样提示词才能复用。
6.3 成本控制
AI 编程是有成本的,尤其是用大模型跑大量任务时。我的经验是:
- 拆解、设计类任务用最强的模型,因为质量影响后续所有环节
- 实现类任务用中等模型,性价比高
- 格式调整、简单重构用轻量模型
这样组合下来,成本能控制在只用最强模型的 30% 左右,效果差别不大。
7. 踩过的坑和避坑清单
最后分享几个我实际踩过的坑,都是真金白银换来的教训。
坑一:过度依赖 AI 的“自信”。AI 说“这个实现没问题”的时候,往往问题最大。永远要自己跑一遍,尤其是涉及并发、边界、异常的场景。
坑二:上下文给太多。我一开始觉得给 AI 越多信息越好,后来发现上下文超过一定长度后,AI 的注意力会分散,反而容易改错。现在我的原则是:只给必要信息,宁可分多次对话。
坑三:不写测试就改代码。这个坑我踩过不止一次。没有测试保护,AI 改完你根本不知道有没有破坏原有功能。现在我的铁律是:改任何存量代码前,先补测试。
坑四:提示词不迭代。很多人写了一个提示词,用一次觉得还行,就一直用。实际上提示词需要根据项目特点持续调优。我每个提示词至少迭代过 5 个版本。
坑五:忽略代码 review。AI 生成的代码,我见过太多“看起来对但实际有微妙 bug”的情况。比如浮点数比较用==、异常捕获范围过大、资源没释放。这些都需要人工 review 兜底。
避坑清单:
- 改代码前先写测试
- 上下文只给必要的
- 提示词存文件并版本管理
- AI 说“没问题”时自己再跑一遍
- 每轮对话后 review diff,超出预期就打回
- 提示词持续迭代,不要一次定稿
这套工作流我用了大半年,最大的感受是:AI 编程的瓶颈不在模型能力,而在流程设计。模型再强,流程是乱的,效率也上不去。反过来,流程设计好了,中等模型也能跑出很好的效果。希望这三个工作流能帮你把 AI 编程的杠杆真正撬起来。