这是「AI 之路进阶升级指南」L2 的补充篇,如果你没有写代码的基础也不用担心,这篇介绍在没有写代码经验的情况下,可以怎么用 AI 写代码。
你怎么让 AI 写出真正能用的代码?
我们的目标不停留在跑通一次就完事的 demo,而是在你的项目里,程序能有一定的健壮性,在每个场景都能跑出你想要的结果。
- 我不知道怎么描述清楚我要什么
- 代码写出来后,我怎么知道它是对的
- 代码跑崩了,我怎么告诉 AI 修
这三点不需要编程知识,只需要一套沟通方法。
问题一:描述不清 → RCTFC 框架
GCO(Day 10)解决的是任务描述问题。但 GCO 是给 agent 的一次性指令,不是代码任务的完整描述框架。
代码任务需要一个更细的框架:RCTFC。
R(Role / 角色):让 AI 扮演什么角色。“你是一个 Python 脚本工程师"和"你是一个经验丰富的后端开发者”,代码质量不同。前者给基础脚本,后者会给模块化、带注释的版本。
C(Context / 上下文):AI 需要知道你现有的环境。用什么语言、有没有依赖库、代码放在哪个项目里、有哪些已有文件可以参考。不说这些,AI 会从头猜,猜错了你再来回改。
T(Task / 任务):和 GCO 的 Goal 一致,一句话说明你要干什么。不要说"优化一下",要说"写一个脚本,读取 CSV 并输出统计摘要"。
F(Format / 格式):输出的长什么样。数据格式、字段名称、文件位置。这些不说,AI 给的代码能用,但输出可能不是你想要的样子。
C(Constraints / 约束):和 GCO 的 Constraints 一致。代码任务有更具体的约束类型:
- 环境约束:只能用标准库,还是可以用第三方?
- 性能约束:处理多少数据?有没有时间要求?
- 安全约束:不能写文件、不能联网、不能执行系统命令
- 风格约束:命名规范、注释要求
缺 Context 是代码问题最常见的根因。AI 不知道你在用什么环境,写的代码跑不起来。
Format 要的不是语法,是形状
这里有一个常见的误解:很多人觉得 Format 需要懂代码才能写。其实不是。
Format 要求的是"结果的物理形状与接口规范",而不是"代码的具体语法与实现方式"。
不懂代码的人完全可以掌控 Format,只需要区分两件事:
- 代码级别的格式(不懂没关系):缩进用 Tab 还是空格、变量用 camelCase 还是 snake_case、底层数据结构怎么表达。这些完全交给 AI 决定。
- 业务与接口级别的格式(非程序员也能掌控):数据以什么形式传进来、以什么格式交出去、输出文件放在哪。这是业务规则,不是技术门槛。
你负责定义"房子要几个房间、门朝哪开",AI 负责去埋水管和拉电线。
怎么提 Format 要求?不用代码,用自然语言加示例:
- 结构说明:“写一个函数,输入是文件路径,输出是一个字典,包含 total 和 average 两个字段。”
- 函数签名:“把代码拆成两个独立函数:一个负责读取文件 parse_file(path),另一个负责计算数据 calculate_data(data)。"(即使你不会写函数内部逻辑,也能指定好这几块积木的名称)
- 文本/文件格式:“输出的 JSON 文件必须按 key 字母顺序排序,并且每个属性名都要小写。”
正反例对比:
❌ 模糊版:“帮我写个脚本处理这个文件。”
AI 会猜:处理什么文件?CSV 还是 JSON?什么语言?输出什么?猜错了重来。
✅ 清晰版:
角色:你是一个 Python 工程师。 上下文:项目路径
~/projects/sales,Python 3.12,只有标准库。已有data/sales_2024.csv,字段是 date、product、amount。 任务:写一个脚本读取这个 CSV,输出每个产品的总金额和平均单价,保存到output/summary.json。 格式:脚本输出一个 JSON 文件,每个产品一行,包含产品名称、总金额、平均单价三个字段。 约束:不用第三方库;处理空行和异常值;输出 JSON 按 product 排序。
同一个任务,两个描述得到的结果天差地别,AI产出的结果是否达到你的预期,关键在你有没有把任务说清楚。

问题二:不知道对不对 → 描述测试用例
代码写出来了,你怎么知道它是对的?
不需要跑一遍所有场景,只需要描述三件事:
正常输入:一个典型用例。“用 data/sales_2024.csv 跑,输出应该是三个产品各一行,总额和平均价正确。”
边界情况:极端但不是异常的情况。“如果某个产品只有一行记录,平均价等于那行的金额。”
错误输入:异常情况。“如果 CSV 里有空行,脚本应该跳过而不是报错。”
这三件事组成最小测试集。不是让 AI 写测试代码,是让你在交付前问 AI:“这段代码能处理这三种情况吗?“然后对照 GCO 的 Output 逐项验证。不记得GCO了?看这一节:Day 11:输出质量检查,AI 给你的东西怎么确定做对了
还有一种方法:不变量检查。和 Day 11 的同名方法一样。对代码任务,不变量守的是底线。“无论输入什么,输出格式必须符合 Format 要求”、“任何情况下不应该抛出未捕获异常”、“文件大小不超过阈值”。
最小测试集用来验具体结果,不变量检查用来守底线。两者配合,覆盖了从"能不能用"到"会不会崩"两个层面。
问题三:代码跑崩了 → 迭代修复
代码跑崩了,很多人会说"帮我修一下”。这个描述太模糊,AI 会猜问题在哪,猜错了再改一轮。
迭代修复的核心是精确描述差异,不是描述问题本身。
❌ “代码跑崩了。”
✅ “运行 python main.py data/sales_2024.csv,报错 KeyError: 'amount'。输入文件有 amount 列,可能是列名大小写不匹配。”
❌ “结果不对。”
✅ “输出 summary.json 里 total_amount 字段是字符串不是数字,期望是 float。”
❌ “帮我优化一下。”
✅ “当前脚本处理 10 万行数据用了 3 秒,目标 1 秒以内。可能的瓶颈是逐行解析,考虑改用 csv.DictReader 或分块读取。”
每一次修复只说一件事。不要一口气说"修 bug + 加功能 + 改格式”。渐进式开发:一次改一处,跑一次,验证一次,再改下一处。
还有一个技巧:最小复现案例。如果问题复杂,让 AI 先写一个最小的复现脚本,只包含出问题的部分。复现脚本跑通了,再扩展回完整代码。这样每次迭代范围可控,不容易引入新 bug。
实操案例:TDD Pipeline
知道 RCTFC 之后,下一个问题是:面对复杂需求,怎么一步步推进?
TDD Pipeline 就是答案。它是一套基于 RCTFC 的多阶段工作流,指导 AI 把需求变代码。每个阶段有独立的输入、输出和审核机制,阶段之间通过固定格式的文件传递信息。
五阶段流程
产品设计(做什么)
│
v
技术方案(怎么做)
│
v
测试方案(怎么验)
│
v
测试代码(Red) ──> 业务代码(Green)

- 产品设计:把模糊需求变成可测试的验收标准(User Story + Acceptance Criterion)
- 技术方案:调研 API、设计架构、明确组件之间的接口
- 测试方案:基于技术方案写出覆盖全场景的测试用例
- 测试代码:先写会失败的测试(Red),锁定预期行为
- 业务代码:写通过所有测试的代码(Green)
每个阶段结束都过一轮独立审核。这不是 AI 自评,是换个视角专门检查。连续两轮没有 C/H/M 级问题才进入下一阶段。
为什么需要 Pipeline
L2 讲的 RCTFC 是一次性任务描述。但对于复杂项目,一次性描述有几个问题:
- 上下文爆炸:一个完整项目的描述可能几千字,AI 读到后面会忽略前面的约束
- 错误传播:需求阶段的歧义,到了代码阶段才被发现,修复成本翻了十倍
- 缺少阶段性验证:一次走完所有阶段,中间没有检查点,出了问题不知道是哪层漏的
TDD Pipeline 的做法是:把一个大任务拆成多个小任务,每个小任务有明确的输入输出和审核标准。
这背后是 RCTFC 的延伸应用。每个阶段本身也是一个 RCTFC 任务,只是输入不再是"你的想法”,而是"上一阶段的输出"。
用 RCTFC 描述第一个阶段
假设你要让 AI 帮你设计一个"批量翻译脚本",第一步是产品设计。用 RCTFC 描述:
角色:你是一个产品分析师,擅长把模糊需求拆解为可测试的验收标准。
上下文:
- 用户想要一个批量翻译工具
- 输入:文件夹里的 .md 文件
- 目标语言:英文
- 输出:同名的 .en.md 文件
任务:
基于以上信息,生成用户故事和验收标准。
格式:
- 3-5 个核心用户故事,每个故事用"作为...我希望...以便..."格式
- 每个用户故事 2-3 条验收标准,每条 AC 必须是可二值判定的(能用"是/否"明确回答通过与否)
- 标注每条 AC 的关键程度(key/peripheral)
约束:
- 不做技术实现设计,只描述行为
- 每条 AC 必须能在不写代码的情况下验证
- 关键 AC 不超过总条数的 60%
AI 输出验收标准后,过审核:
- 每条 AC 是否可测试?(能用"是/否"判定)
- 是否有关键 AC 缺失?(比如"空文件处理")
- 是否有模糊的主观形容词?(“快速"“高质量"这类词要删掉)
❌ 模糊 AC:“翻译速度要快,不能出错。”
这个问题有两个:一是"快"和"不出错"都无法二值判定;二是根本不知道判定依据是什么。
✅ 可二值判定 AC(Key):“对于输入的任意
.md文件,必须在同一目录下生成同名的.en.md文件。”这条 AC 的通过条件很明确:检查输出目录,同名
.en.md存在即为 Pass,否则为 Fail。
审核通过后,进入第二阶段:技术方案。这时候,产品设计的输出成为新技术方案的 Context,而 Format 变成了"API 调研结论 + 组件架构图 + 数据流说明”。
Format 在 Pipeline 中的作用
注意上面两个阶段的 Format 要求。它们完全不同:
- 第一阶段(产品设计)的 Format:用户故事列表 + 验收标准表格
- 第二阶段(技术方案)的 Format:API 调研表 + 组件图 + 数据流
Format 就像流水线上的卡槽与接口:前一个工序吐出什么形状的零件,后一个工序才能直接扣上去接力。
Format 决定了每个阶段的输出"长什么样”,让下一阶段能直接读取,不需要猜。这就是 TDD Pipeline 的核心价值。每个阶段的 Format 是下一阶段的 Context,阶段之间通过固定格式的文件传递信息,而不是靠 AI 的"理解力"。
完整的五阶段流程
| 阶段 | 输入 | 输出(Format) | 审核重点 |
|---|---|---|---|
| 1. 产品设计 | 用户原始需求 | 用户故事 + 验收标准 | AC 可测试性、关键度标注 |
| 2. 技术方案 | 验收标准 | API 调研结论 + 架构设计 | 每个设计决策是否有依据 |
| 3. 测试方案 | 技术方案 | 测试用例清单 | 是否覆盖所有关键 AC |
| 4. 测试代码 | 测试用例 | 失败的测试文件 | 测试是否锚定在需求上 |
| 5. 业务代码 | 测试代码 | 通过测试的业务代码 | 是否所有测试通过 |
为什么这不用懂代码
整个 TDD Pipeline 流程中,你作为非程序员只需要做两件事:
- 描述业务需求(第一阶段):用自然语言告诉 AI 你要什么
- 审核验收标准(第一阶段结束后):检查 AI 生成的 AC 是否覆盖了你的真实需求
后面的阶段。技术方案、测试用例、代码实现,都是 AI 根据你的输入自主推导的。
这才是 RCTFC + TDD Pipeline 的真正威力:把"我会不会写代码"这个问题,替换成"我能不能把需求说清楚"。
关于 TDD-Pipeline 更详细的介绍,可以访问 GitHub 上的项目 alexwwang/tdd-pipeline,也可以先看这篇综述:AI 辅助 TDD 全流程:从需求到代码的完整防线。
顺便:项目管理习惯
让 AI 写代码还需要一些项目习惯,不只是描述问题和验证结果:
- 先计划再执行:用 Plan Mode(只读模式)让 AI 先列出实现方案,确认后再动手。避免 AI 一口气写完一堆代码,最后发现方向错了。
- 项目记忆:在根目录放一个
PROJECT_STATE.md,记录当前进展、已知问题、下一步计划。AI 每次开新对话都读这份文件,不用重新解释背景。 - Git 版本控制:让 AI 每次修改都 commit,message 写清楚改了什么。出了问题可以回滚到任意状态。
- 沙盒策略:在副本上测试,不动原件。特别是涉及文件操作、网络请求的任务。
这些习惯不是必需的,但能大幅降低"改崩了不知道怎么回到上一版"的风险,它们也不涉及学习编程,只要动动嘴或者动动手告诉AI要这么做就好了。
今日收获
- 会用 RCTFC 框架描述代码任务:Role → Context → Task → Format → Constraints
- 理解 Format 是"结果的形状",不是"实现的语法"。不需要懂代码也能写
- 会用三段测试描述法验证 AI 生成的代码
- 会用精确差异描述做迭代修复,不靠猜
- 知道 TDD Pipeline 五阶段工作流如何把需求转化为代码
- 知道项目管理习惯(Plan mode、项目记忆、Git、沙盒)的价值
L2 到这里就全部结束了。如果你觉得还有不清楚的地方,可以再读读之前的文章,把那些练习再看看,跑一跑,试试新的任务。
这是「AI 之路进阶升级指南」L2 Part 5。下篇是 Day 15 L2 毕业考核。
