乐于分享
好东西不私藏

用好AI写代码,先学会这两件事:定义问题 + 判断质量

用好AI写代码,先学会这两件事:定义问题 + 判断质量

读完这篇,你能系统掌握向AI提出高质量编程需求的方法,以及评估AI生成代码是否真正可用的三个维度,直接提升你的AI编程效率。

前置要求

  • 熟悉基本Python语法
  • 有使用ChatGPT / Claude / Cursor等AI编程工具的经验
  • 了解基本的软件工程概念(函数、模块、测试)

为什么大多数人用AI写代码效率低?

很多人抱怨AI写的代码"跑不起来"、"逻辑有问题"、"改来改去越改越乱"。根源往往不在AI,而在于两个环节没做好:问题定义质量判断

问题定义决定AI能不能理解你真正想要什么;质量判断决定你能不能识别AI给你的是不是真正可用的代码。这两件事做好了,AI编程的效率可以提升不止一个量级。

第一部分:问题定义的5层维度框架

我把问题定义拆成5层,每一层都是对上一层的精化。很多人卡在第1-2层就扔给AI了,然后反复返工。

第1层:目标层(What)

说清楚你要解决什么问题,不是"写个脚本",而是"解决什么业务/技术痛点"。

❌ 模糊:"帮我写一个数据处理脚本"

✅ 清晰:"从CSV文件中读取用户行为日志,按用户ID聚合,计算每个用户的7日留存率"

第2层:约束层(How far)

说清楚边界:输入是什么格式、输出是什么格式、不需要处理哪些情况。

输入:CSV文件,列名固定为 [user_id, event_date, event_type]输出:DataFrame,列为 [user_id, retention_7d],retention_7d 为 0/1不需要处理:多文件合并、数据去重(上游已处理)

第3层:质量层(How good)

说清楚你对代码的质量要求:性能、可读性、可维护性,三者往往有取舍。

  • 这是一次性脚本,还是要进生产?
  • 数据量级是千行还是亿行?
  • 需要其他人维护吗?

第4层:上下文层(Where)

说清楚技术栈和环境限制,避免AI给你一个依赖不兼容的方案。

技术栈:Python 3.10+,pandas 2.x,不能用 PySpark运行环境:本地 MacBook,无 GPU

第5层:验证层(How to verify)

告诉AI你怎么判断它的代码是对的。这一层最容易被忽略,但它直接影响AI是否会主动做自我检查。

验证方式:提供一个10行的测试CSV,预期输出 user_001 的 retention_7d = 1

第二部分:三大场景的实操Prompt模板

不同场景对这5层的侧重不同,下面给出三个完整模板。

场景一:算法/竞赛题

【目标】实现一个函数,求无重复字符的最长子串长度【约束】输入为单个字符串,长度 <= 5*10^4,字符为 ASCII 可打印字符【质量要求】时间复杂度 O(n),空间复杂度 O(min(m,n)),m 为字符集大小【上下文】Python 3.10,不使用第三方库【验证】   - lengthOfLongestSubstring("abcabcbb") == 3   - lengthOfLongestSubstring("") == 0   - lengthOfLongestSubstring("pwwkew") == 3

场景二:工程项目功能

【目标】实现一个 FastAPI 接口,接收用户上传的图片,返回图片的 EXIF 信息【约束】   - 只处理 JPEG/PNG,其他格式返回 400   - 文件大小上限 5MB,超出返回 413   - EXIF 信息以 JSON 返回,无 EXIF 时返回空字典【质量要求】生产可用,需要有错误处理和日志,不需要鉴权【上下文】Python 3.11FastAPI 0.110+,Pillow 10.x【验证】提供一张含 GPS 信息的 JPEG,返回中应包含 GPSInfo 字段

场景三:数据分析

【目标】对销售数据做探索性分析,找出影响销售额的主要因素【约束】   - 数据在 sales.csv 中,约 5 万行,列包括 date/region/product/amount/channel   - 只做描述性统计和相关性分析,不需要建模   - 输出为 Jupyter Notebook,图表用 matplotlib【质量要求】代码可复现,图表有标题和轴标签,中文显示正常【上下文】Python 3.10,pandas 2.x,matplotlib 3.8,运行在 macOS【验证】运行完整 Notebook 无报错,每个图表有明确结论注释

第三部分:AI代码质量评估的3大维度

拿到AI生成的代码,很多人只跑一下看有没有报错就结束了。这远远不够。

维度一:功能完整性

不只是"能跑",而是"边界情况都处理了吗"。

检查清单:

  • 空输入/None处理了吗?
  • 异常情况有没有合理的错误信息?
  • 边界值(0、负数、超长字符串)测试过吗?

引导AI自查的Prompt:

请对你刚才生成的代码做功能完整性检查:1. 列出所有可能的边界情况2. 对每个边界情况说明代码的处理方式3. 如果有未处理的情况,直接修复

维度二:性能合理性

AI很容易写出"功能正确但性能灾难"的代码,尤其是嵌套循环和重复IO。

典型陷阱:在循环里逐行读写数据库、用列表替代集合做查找、忘记关闭文件句柄。

引导AI自查的Prompt:

请分析这段代码的时间复杂度和空间复杂度,指出是否存在性能瓶颈,如果有,给出优化方案。数据规模:[填入你的实际数据量级]

维度三:可维护性

如果这段代码三个月后还要改,可维护性就很重要。评估要点:

  • 函数是否单一职责?
  • 魔法数字有没有命名常量?
  • 有没有必要的注释(不是废话注释)?

引导AI自查的Prompt:

请对这段代码做可维护性审查:1. 是否有函数承担了过多职责?如有,拆分它2. 是否有魔法数字或硬编码字符串?替换为命名常量3. 关键业务逻辑是否有注释说明"为什么"而不只是"做什么"

第四部分:一个完整的实战示例

把上面所有方法串起来,看一个完整流程。

需求: 写一个函数,从日志文件中提取所有IP地址,统计每个IP的出现次数,返回出现次数Top N的IP列表。

Step 1:用5层框架写Prompt

【目标】从日志文件中提取IP地址,统计出现频次,返回Top N【约束】   - 日志格式:每行开头是 IPv4 地址,如 "192.168.1.1 - GET /api ..."   - 文件大小可能达到 1GB,不能一次性读入内存   - 返回格式:[(ip_str, count), ...],按 count 降序【质量要求】内存友好,支持大文件;代码需有类型注解【上下文】Python 3.10+,只用标准库【验证】   - 输入文件含 3 行,其中 192.168.1.1 出现 2 次,返回 [("192.168.1.1"2), ...]   - N=0 时返回空列表   - 文件不存在时抛出 FileNotFoundError,错误信息包含文件路径

Step 2:收到代码后,依次触发三个自查Prompt

先做功能完整性检查,再做性能分析,最后做可维护性审查。每次AI给出修改后,重新跑验证用例。

Step 3:最终验证

import tempfileimport osdef test_extract_top_ips():    content = "192.168.1.1 - GET /api\n10.0.0.1 - POST /login\n192.168.1.1 - GET /home\n"    with tempfile.NamedTemporaryFile(mode='w', suffix='.log', delete=Falseas f:        f.write(content)        tmp_path = f.name    try:        result = extract_top_ips(tmp_path, n=2)        assert result[0] == ("192.168.1.1"2), f"期望 ('192.168.1.1', 2),实际 {result[0]}"        assert len(result) == 2        print("✅ 验证通过")    finally:        os.unlink(tmp_path)test_extract_top_ips()

常见问题

Q1:按模板写了Prompt,AI还是给了一个很简陋的实现怎么办?

通常是质量层没说清楚。加一句:"这段代码将用于生产环境,请按工程级别实现,包含完整错误处理。"

Q2:AI的自查Prompt有时候只说"代码没问题",没有实质检查怎么办?

换成更强制的指令:"假设这段代码有bug,请找出来。"或者:"请扮演一个严格的代码审查员,列出至少3个可以改进的地方。"

Q3:不同AI工具(ChatGPT vs Claude vs Cursor)用同一套方法效果差异大吗?

框架本身是通用的,但不同工具对"验证层"的响应差异明显。Claude对测试用例的响应更积极;Cursor因为有代码上下文,约束层可以写得更简洁。

Q4:每次都写这么长的Prompt,效率反而低了?

初期确实有学习成本。建议把常用场景的模板存成代码片段(VS Code Snippets或Cursor的自定义Prompt),填空就行,实际增加不了多少时间。

Q5:AI生成的代码通过了三个维度检查,但上线后还是出问题了?

AI的自查是基于它的知识,不能替代真实的集成测试。三个维度是提高质量的下限,不是上限。关键路径的代码还是要写单元测试。

总结

用AI写代码效率低,80%的原因是问题没说清楚,20%是不知道怎么判断质量。

5层框架(目标→约束→质量→上下文→验证)解决前者;三维评估(功能完整性→性能合理性→可维护性)加上自查Prompt解决后者。两者结合,你和AI之间的协作会从"碰运气"变成"可预期"。

最重要的一点:验证层是被忽视最多但收益最大的一层。告诉AI你怎么验证它的输出,它会主动往那个方向靠。

进阶资源

  • OpenAI Prompt Engineering Guide:系统学习Prompt设计原理
  • Google代码审查规范(eng-practices):理解工程级代码质量标准 -《A Philosophy of Software Design》:深入理解可维护性的本质