先说结论:用 AI 写代码,真正决定质量的不是模型,而是你有没有把运行环境说清楚。同样一句”帮我写个读取文件的函数”,说清楚语言、版本、输入输出、边界情况,和不说这些,拿到的代码质量差一个量级。
本文讲 AI 辅助编程提示词的实际用法:怎么描述需求、怎么让它改 Bug、怎么做代码审查,最后给 6 条可以直接复制的模板。涉及具体框架版本、API 参数和命令行选项,请以你当前版本为准。
一、描述需求:先说环境,再说功能
让 AI 写代码前,先交代四件事:语言和版本、运行环境、输入输出、约束。”用 Python 3.11 写一个脚本”比”写个脚本”强得多;”不要引入第三方库”这种约束提前说,能省掉一轮返工。
输入输出的样本一定要给。给一个真实的输入样例和期望的输出样例,AI 基本就能一次写对;不给的话,它只能凭猜测定数据结构,返工率很高。
二、让 AI 解释,别只看代码
拿到代码直接粘进项目,是最容易埋雷的做法。让它逐段解释关键逻辑、列出它做的假设、标出不确定的地方。这三样看完,你基本能判断这段代码能不能用。
尤其是”它做的假设”这一项——AI 经常默认你的文件是 UTF-8、默认路径存在、默认列表非空。这些假设在你的实际环境里未必成立。
三、改 Bug:给报错全文,别只说”跑不起来”
“代码报错了”是信息量最低的描述。有效的做法是贴三样:完整报错信息(含堆栈)、相关代码片段、你已经试过的办法。有这三样,AI 基本能定位;只有一句”跑不起来”,它只能列一堆可能性让你自己试。
另外,报错里的行号很重要。贴代码时标出报错指向的是第几行,能省掉大量来回。
四、代码审查:指定审查维度
泛泛地说”帮我看看这段代码”,得到的通常是格式建议。想拿到有价值的东西,要指定维度:边界情况、错误处理、性能、可读性、安全隐患。一次挑 2–3 个维度,比全都要但都浅要好。
六条可以直接复制的提示词模板
模板 1:需求澄清
这段提示词用来干什么:你自己还没想清楚时,先让 AI 把需求问清楚。
我想用【语言/框架】实现【大致功能】,但有些细节我还没想清楚。
我的运行环境:【语言版本、操作系统、相关依赖】
请向我提出最多 6 个问题,帮我确定:输入输出格式、数据量级、性能要求、错误处理要求、是否需要兼容旧版本、能否引入第三方库。
在我回答之前不要输出代码。填好的示例:
我想用 Python 实现"批量重命名一个文件夹里的图片文件",但有些细节我还没想清楚。
我的运行环境:Python 3.11,Windows,尽量不装第三方库
请向我提出最多 6 个问题,帮我确定:输入输出格式、数据量级、性能要求、错误处理要求、是否需要兼容旧版本、能否引入第三方库。
在我回答之前不要输出代码。模板 2:写代码(带完整约束)
这段提示词用来干什么:一次拿到能直接跑的代码。
请用【语言,版本】写一个【函数 / 脚本 / 类】。
运行环境:【操作系统、依赖库及版本】
功能:【具体做什么】
输入:【数据结构 + 一个真实样例】
输出:【数据结构 + 期望样例】
约束:
- 【能 / 不能】引入第三方库,可用的是【】
- 必须处理的情况:【空输入 / 文件不存在 / 编码问题 / 网络超时】
- 代码风格:【需要注释 / 不需要注释、函数长度限制】
- 是否需要单元测试:【】
输出要求:先给代码,再逐段解释关键逻辑,最后单独列出"这段代码做的 3 个假设"和"你需要自己确认的地方"。填好的示例:
请用 Python 3.11 写一个函数。
运行环境:Windows,只用标准库
功能:把一个目录下所有 .jpg 文件按拍摄日期重命名成 YYYYMMDD_HHMMSS.jpg,已存在同名则加后缀
输入:目录路径字符串,例如 "D:\photos\2026"
输出:返回重命名成功和跳过的文件数,例如 {"renamed": 12, "skipped": 3}
约束:
- 不能引入第三方库
- 必须处理的情况:目录不存在、文件无拍摄日期信息、文件名重名
- 代码风格:关键步骤加注释,单个函数不超过 40 行
- 是否需要单元测试:不需要,但给一个调用示例
输出要求:先给代码,再逐段解释关键逻辑,最后单独列出"这段代码做的 3 个假设"和"你需要自己确认的地方"。模板 3:Debug
这段提示词用来干什么:报错时快速定位。
我的代码报错了。
完整报错信息(含堆栈):【粘贴】
相关代码:【粘贴,并标出报错指向第几行】
环境:【语言版本、依赖版本、操作系统】
我已经试过:【列出你试过的办法和结果】
请按可能性从高到低给出 3 个原因,每个给一句验证方法。
然后给出修改后的完整代码,并在改动处加注释说明改了什么。填好的示例:
我的代码报错了。
完整报错信息(含堆栈):【UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 12: illegal multibyte sequence(指向第 8 行 open(...))】
相关代码:【第 8 行:with open(path) as f: lines = f.readlines()】
环境:Python 3.11,Windows
我已经试过:换成 'utf-8' 打开另一批文件没报错,但处理旧文件还是报
请按可能性从高到低给出 3 个原因,每个给一句验证方法。
然后给出修改后的完整代码,并在改动处加注释说明改了什么。模板 4:代码审查
这段提示词用来干什么:指定维度做审查,拿到有价值的反馈。
请审查下面这段代码,重点看【从下列维度中选 2-3 个】:
1. 边界情况与错误处理是否完整
2. 有没有性能问题(说明在哪、什么量级会暴露)
3. 可读性与命名
4. 安全隐患(注入、路径穿越、敏感信息泄露)
5. 与【语言/框架】当前版本的惯用写法是否一致
要求:每条问题注明行号、严重程度(必修 / 建议 / 可选),并给出修改建议。
如果某方面没有问题,直接说"未发现问题",不要硬凑。
代码:【粘贴】填好的示例:
请审查下面这段代码,重点看:1. 边界情况与错误处理;2. 性能问题;4. 安全隐患。
要求:每条问题注明行号、严重程度(必修 / 建议 / 可选),并给出修改建议。
如果某方面没有问题,直接说"未发现问题",不要硬凑。
代码:【一个遍历目录、读取文件、拼接路径后删除文件的脚本,约 30 行】模板 5:重构与加测试
这段提示词用来干什么:让已有代码变得更好维护,并补上测试。
请重构下面这段代码。
重构目标:【降低重复 / 拆分过长的函数 / 提高可测试性 / 统一错误处理】
约束:不改变外部行为,不引入新依赖,保持【语言版本】兼容。
输出:
1. 重构后的完整代码
2. 用 5 条以内说明改了什么、为什么
3. 为【核心函数】补充测试用例,覆盖:正常输入、空输入、非法输入、边界值
4. 列出你不确定是否会影响调用方的地方
代码:【粘贴】填好的示例:
请重构下面这段代码。
重构目标:拆分过长的函数、统一错误处理
约束:不改变外部行为,不引入新依赖,保持 Python 3.11 兼容。
输出:
1. 重构后的完整代码
2. 用 5 条以内说明改了什么、为什么
3. 为 parse_and_rename 函数补充测试用例,覆盖:正常输入、空输入、非法输入、边界值
4. 列出你不确定是否会影响调用方的地方
代码:【一个 120 行的文件处理脚本】模板 6:让它自查代码
这段提示词用来干什么:生成完追加一轮,让 AI 自己挑错。
请复查你刚才写的代码,逐项回答:
1. 有哪些地方是基于假设而不是我给你的信息?逐条列出
2. 有没有依赖我当前版本可能不支持的 API 或语法?
3. 有没有未处理的异常路径?
4. 有没有更简单的写法(如果有,给出对比)
先给问题清单,再给出修正后的完整代码。填好的示例:
请复查你刚才写的代码,逐项回答:
1. 有哪些地方是基于假设而不是我给你的信息?逐条列出
2. 有没有依赖 Python 3.11 可能不支持的 API 或语法?
3. 有没有未处理的异常路径?
4. 有没有更简单的写法(如果有,给出对比)
先给问题清单,再给出修正后的完整代码。常见坑
- 不给版本就要代码:语法和 API 差异很大,结果经常跑不起来。
- 只看代码不看假设:AI 默认文件存在、编码正确、列表非空,这些假设往往是 Bug 来源。
- 把整份大文件丢进去:几千行代码会让上下文过载,回答变浅。只贴相关片段,并说明它在整体中的位置。
- 直接粘进生产环境:先在隔离环境跑一遍,尤其是涉及文件删除、网络请求、数据库写入的代码。
- 把报错精简后再问:堆栈信息里最关键的反而是你以为没用的那几行,别删。
小结
AI 辅助编程提示词的核心就两条:把环境和输入输出说具体,把验证留给自己。写需求时交代表版本、依赖、样例和约束;改 Bug 时贴完整报错和已试过的办法;审查时指定维度;拿到代码后先跑一遍模板 6 让它自查。
它能省掉的是查 API、写样板代码、理思路的时间;省不掉的是你对业务逻辑的判断,以及上线前的测试。
