第 3 讲:代码生成、理解与调试
上课时间:2026 年 10 月 27 日(第 7 周,周二 19:20–20:55)
所属板块:开发流程
第 2 讲讲了提示四要素和上下文工程。这一讲把这些方法放到代码场景里,顺序是生成、评估、理解、调试,也就是从“能生成”走到“能用”。
上讲回顾与检查点 2 反馈
第 2 讲讲了提示四要素和上下文工程。检查点 2 的完成情况和优秀示例在课上展示。
共性问题有三个:
- 骨架偏薄;
- 提交信息不规范;
- 提示实践记录缺失。
一、生成
需求描述决定生成质量
同样是“写个爬虫”,结果可能完全不一样。如果换成:
用 requests 爬取豆瓣 Top250,输出 CSV,含标题/评分/年份,限速 1 次/秒。
生成结果会稳定得多。需求至少要说清三件事:功能、约束、验收标准。提示词的基本功在第 2 讲,这一讲看它在代码场景里怎么用。
先对齐方案,再生成代码
写代码之前,先让 AI 给出实现方案:模块怎么划分、数据怎么流、用什么技术。人在方案层修改,成本比在代码层返工低。
可以直接这样要求:
先不要写代码,给出你的实现方案与理由。
四种生成模式
| 模式 | 适用场景 | 要点 |
|---|---|---|
| 全新生成 | 新函数、新模块、新脚本 | 先接口后实现;小步生成,不要一次要几百行 |
| 补全与续写 | 编辑器内补全、续写半成品函数 | 补全依赖当前打开的文件,保持文件聚焦 |
| 局部改写 | 修改现有函数、替换实现、调整签名 | 明确改动范围,比如“只改这个函数” |
| 多方案比较 | 需要权衡实现方式时 | 让 AI 给 2–3 种实现,比较性能、可读性和依赖 |
多方案比较时,不同方案共同的部分,往往是稳定的设计。
生成、审查、修改
生成结果不要直接接受。流程是:
生成 → 读 diff → 运行 → 提出问题 → 修改 → 再验证
把 AI 当成需要评审的新人,你是评审者。
二、评估
正确性
先跑主路径,确认正常输入能得到预期输出。再试边界和异常:空输入、极大值、非法格式。
能写测试就不要只靠手点,测试生成在第 7 讲展开。AI 说“完成”不算完成,要求它汇报三件事:改了什么、怎么验证的、还有哪些风险。
可读性与风格
检查命名、结构、注释是否符合项目约定。新代码要和已有代码风格一致,可以让 AI 自己检查一遍。
安全性
AI 引入的依赖要审查:是否流行、是否还在维护、许可证是否合规。
危险写法要特别留意:eval / exec、SQL 拼接、明文存储密钥、不安全的反序列化。可以让 AI 专门做一次检查:
检查以上代码的安全隐患并说明。
这一节可以记成四步:需求清晰、方案对齐、小步生成、严格验收。
三、理解
阅读代码
AI 适合解释复杂算法、正则表达式和遗留代码。提示时要求它逐段解释、举例说明、指出潜在问题。
人机协同时代,读代码的能力更关键。
梳理陌生代码库
接手开源项目或他人项目时,先问架构:目录结构与技术栈是什么,入口在哪,核心数据流怎么走。再让它描述模块之间的依赖关系。
也可以让它生成 README、模块说明和函数文档。
四、调试
五步流程
五步是:复现问题、收集证据、定位根因、修复、回归验证。
AI 在其中的角色是解释报错、梳理线索、提出假设、给候选修复;人负责确认复现、判断根因、审查修复。
错误解读与最小可复现示例
给 AI 报错时,带上完整报错栈、触发代码和环境版本。
最小可复现示例(MRE)的做法是删到不能再删,仍然能复现问题;把无关模块剥离掉。然后可以这样问:
这是报错与 MRE,请解释根因并给修复建议。
根因定位
常见的方法有三种:
- 二分法:注释或裁剪代码,缩小问题区间;
- 日志插桩:让 AI 建议在哪里打印什么;
- 假设清单:让 AI 列出 5 个可能原因,逐一验证。
修复
让 AI 给 2–3 个修复方案,并说明影响面。逐行看 diff,问“为什么这样改”。修完后重跑原始失败场景,再检查有没有引入新问题。
五、常见陷阱
| 陷阱 | 现象 | 防范 |
|---|---|---|
| 幻觉 API | 调用不存在的函数或参数,看起来很对 | 编译或运行验证;查官方文档;让 AI 给出处 |
| 表面修复 | 报错消失但根因还在,比如用 try/except 吞异常 |
追问这个修复解决的根本原因是什么 |
| 过度修复 | 顺手重构无关代码,引入新 bug | 限定改动范围;diff 里发现越界改动就回退 |
| 过度依赖 | 不看 diff 直接接受,久了不理解自己的代码 | 关键路径要能自己讲清楚;第 8 讲展示会问实现细节 |
六、课堂演示
演示一:从需求到小工具。一句话需求是“批量重命名照片文件(按拍摄日期)”。流程是需求澄清、方案对齐、分步生成、运行验收、修一轮 bug。观察点是每一轮人做了哪些审查。
演示二:调试隐藏 bug。材料是一个预置 3 个 bug 的小项目,分别是编译错误、运行时错误和逻辑错误。流程是复现、报错解读、MRE、定位、修复、回归。演示中会故意出现一次幻觉 API 和一次表面修复。
七、课堂实操
下载第 3 讲课堂实操 handout(zip,约 928 KB)。三个任务互不依赖,可以按任意顺序做。
| 任务 | 做什么 | 交什么 |
|---|---|---|
| A:生成与验收 | 在空目录里用 AI 生成一个小工具(题目自选) | 验收清单:测了什么、怎么测、结果、发现的问题 |
| B:阅读陌生代码库 | 用 AI 阅读 python-dateutil 3.0.0,回答 3 个结构化问题 | answers.json、verify.md、transcript.md |
| C:限时 debug | 用 AI 定位并修复 Brotli 解码库中的缺陷 | fix.patch、FIX.md、transcript.md |
任务 A 可以参考课堂演示的做法:先写 REQUIREMENTS.md,再写 PLAN.md,每完成一步提交一次,最后自己验收并记进 ACCEPTANCE.md,至少修一轮 bug。
任务 B 的代码库和问题都在压缩包里。答案要有“文件:行”证据,行号以自己解压出来的源码为准;confidence 是 AI 的自述,标得准不准要由人判断。核对过程写进 verify.md。
任务 C 的提示词要写清:禁止联网,只改 lib/,不用 signal、setjmp、longjmp 或 exit 兜底。修完后自己跑 make repro,确认不再崩溃并返回 ERROR;再用 make tools 造一个正常流,确认还能解压。
三个任务都要保留会话导出。AI 说“已完成”或“已验证”时,自己跑一遍再写结论。
八、检查点 3
截止 2026 年 11 月 8 日(周日)23:59(北京时间)。提交核心模块代码、代码生成与调试过程记录(含最小可复现示例)、当前问题清单。完整要求、提交目录与评分标准见检查点 3:中期检查。
第 4 讲是客座讲座,检查点 3 跨这一周推进,反馈顺延到第 5 讲。