10.3如何用 AI 编程
本课只解决一个主问题:本单元只解决一个主问题:如何用 AI 编程,而不是让 AI 生成一堆你不敢维护的代码?
学习目标
学完本单元后,学习者应该能够:
- 理解 AI 编程助手适合做什么、不适合做什么。
- 用 AI 辅助需求拆解、代码阅读、实现、测试和调试。
- 给 AI 提供足够的代码上下文和约束。
- 审查 AI 生成代码的风险。
- 建立人类负责架构和验收、AI 负责辅助执行的编程流程。
先给直觉
AI 编程助手很像一个速度很快的初级到中高级程序员混合体。
它可以:
- 快速读代码。
- 解释错误。
- 写样板代码。
- 生成测试。
- 提出实现方案。
- 帮你查遗漏。
但它也可能:
- 编造不存在的 API。
- 忽略项目约定。
- 写出看似正确但边界错误的代码。
- 过度重构。
- 删除重要逻辑。
- 没有理解业务约束。
所以 AI 编程的核心不是“让它写”,而是“让它在可检查的流程里帮你写”。
AI 编程适合的任务
适合:
- 解释陌生代码。
- 查找调用链。
- 生成小函数。
- 补测试。
- 重构局部重复代码。
- 写文档和注释。
- 分析错误日志。
- 提供实现方案。
- 做代码评审初筛。
谨慎:
- 大规模架构重写。
- 安全敏感代码。
- 支付、权限、加密。
- 数据迁移。
- 生产部署脚本。
- 没有测试的核心业务逻辑。
AI 可以参与高风险任务,但不能无人审核地提交。
编程流程
推荐流程:
明确目标
↓
提供上下文
↓
让 AI 先分析方案
↓
人类确认方案
↓
分小步实现
↓
运行测试
↓
审查 diff
↓
记录风险和后续任务
不要一上来就说:
把整个项目改好。
这类请求容易让模型变成代码装修队,哪里都动一点,最后你看 diff 像考古。
提供上下文
AI 编程最重要的是上下文。
要告诉它:
- 项目目标。
- 当前问题。
- 相关文件。
- 现有风格。
- 不允许修改的范围。
- 测试命令。
- 期望行为。
- 已知错误。
Prompt 示例:
请帮我修复这个 bug。
目标:
用户保存课程进度后,刷新页面仍能看到已完成状态。
相关文件:
- app.js
- progress-store.js
- course-view.js
约束:
- 不要重构无关 UI。
- 不要改数据库结构。
- 先解释原因,再给最小修改方案。
- 修改后请说明要跑哪些测试。
先让 AI 读代码
在让 AI 改代码前,先让它解释。
请先阅读这些文件,回答:
1. 当前数据流是什么?
2. 状态在哪里保存?
3. 可能的 bug 点在哪里?
4. 你建议修改哪些文件?
先不要改代码。
这一步能减少乱改。
小步修改
AI 更适合小步、明确、可测试的修改。
好任务:
请只修改 progress-store.js,让 saveProgress 在写入失败时返回错误对象,并补一个单元测试。
差任务:
优化整个项目。
任务越大,越容易产生不可控变更。
测试优先
让 AI 先写测试或补测试非常有价值。
Prompt:
请先为这个 bug 写一个失败测试。
测试应覆盖:
- 保存进度
- 刷新后读取
- 无数据时返回默认状态
测试能把需求变成可验证条件。
AI 写代码之前,如果能先写出正确测试,后面更稳。
审查 AI 生成代码
重点检查:
- 是否改了无关文件。
- 是否符合现有风格。
- 是否处理错误情况。
- 是否引入安全风险。
- 是否破坏兼容性。
- 是否有测试。
- 是否有不必要抽象。
- 是否使用不存在的库或 API。
AI 生成代码不能因为“能跑”就直接合并。
调试
AI 很适合帮助分析错误日志。
给它:
- 错误信息。
- 触发步骤。
- 相关代码。
- 最近修改。
- 运行环境。
Prompt:
这是错误日志和相关代码。
请分析最可能的 3 个原因。
每个原因说明:
- 支持证据
- 如何验证
- 最小修复方案
让 AI 给多个假设,比直接让它“修复”更可靠。
代码评审
AI 可以做第一轮代码评审。
Prompt:
请以代码评审视角检查这个 diff。
优先指出:
- 可能的 bug
- 行为回归
- 缺失测试
- 安全风险
- 不必要复杂度
不要总结优点。
注意:AI 评审不能替代人类评审,尤其是核心业务和安全代码。
学习代码
AI 也适合帮助学习代码库。
可以问:
请帮我画出这个功能的数据流。
或者:
如果我要修改登录逻辑,应该先读哪些文件?为什么?
这能降低进入陌生项目的成本。
常见风险
1. 编造 API
模型可能写出不存在的方法或参数。
解决:
- 查官方文档。
- 跑测试。
- 使用类型检查。
2. 过度重构
模型喜欢“顺手优化”。
解决:
- 明确修改范围。
- 要求最小变更。
- 审查 diff。
3. 漏掉边界条件
模型可能只处理 happy path。
解决:
- 要求列边界情况。
- 补测试。
4. 安全问题
例如注入、权限绕过、敏感信息日志。
解决:
- 高风险代码人工审核。
- 使用安全检查。
5. 项目风格不一致
模型可能引入新依赖、新模式。
解决:
- 提供现有代码示例。
- 要求遵守项目风格。
案例:修复课程网站 bug
任务:
课程页面点击模块后,侧边栏状态没有同步更新。
AI 协作流程:
- 让 AI 阅读相关文件。
- 要求它解释状态流。
- 让它提出 2 个可能原因。
- 人类确认最可能路径。
- 让 AI 做最小修改。
- 跑测试或手动验证。
- 让 AI 做代码评审。
- 人类最终确认。
推荐 Prompt 模板
代码阅读
请阅读以下代码,先不要修改。
请回答:
1. 这个模块负责什么?
2. 主要数据流是什么?
3. 哪些函数最关键?
4. 如果要修改 X,应该注意什么?
Bug 修复
请修复这个 bug。
要求:
- 先分析原因。
- 给最小修改方案。
- 只改相关文件。
- 补测试或说明验证方法。
- 修改后总结风险。
代码评审
请评审这个 diff。
只列问题,按严重程度排序。
重点关注 bug、行为回归、测试缺失和安全风险。
常见误区
误区 1:AI 会写代码,所以我不用懂代码
不行。你至少要能理解、运行和审查结果。
误区 2:AI 一次性生成完整项目最省事
通常后期维护成本更高。小步迭代更稳。
误区 3:代码能跑就可以
能跑不等于正确、安全、可维护。
误区 4:AI 写的测试一定可靠
测试也要审查。AI 可能写出只验证自己实现的测试。
误区 5:让 AI 重构顺便修 bug
修 bug 和重构最好分开,否则很难判断问题来源。
动手练习
选择一个小 bug 或小功能,设计 AI 编程协作流程。
填写:
| 项目 | 内容 |
|---|---|
| 目标 | |
| 相关文件 | |
| 不允许修改的范围 | |
| 先让 AI 分析什么 | |
| 需要哪些测试 | |
| 如何审查 diff | |
| 风险点 | |
| 验证命令 |
检查题(自测)
- 为什么 AI 编程前要先让模型读代码和解释数据流?
- AI 生成代码后,人类至少要检查哪些方面?
- 为什么修 bug 和重构最好分开?
参考答案
- 先让模型读代码、理解数据流和项目约束,它生成的内容才可能符合真实项目,而不是凭空给出通用代码。
- 至少检查:功能正确性、边界与错误处理、安全性、性能、与现有代码风格和架构的一致性。
- 修 bug 和重构的目标与风险不同:混在一起改,出了问题难以定位是修坏了还是重构引入的回归。
Takeaway
AI 编程的正确姿势不是把方向盘交给模型,而是让它参与阅读、分析、实现、测试和评审。人类负责目标、架构、边界和验收,AI 负责加速具体执行。