用AI写Python这件事,很多人觉得“效果不稳定”,生成出来的代码要么跑不通,要么跑通了但逻辑不对。我前后折腾了大半年,各种模型都试过,最后发现真正的问题不在模型,而在我自己的提问方式。给的信息太少、约束不清、验收标准含糊,AI就只能靠猜,猜就难免翻车。后来我把提示词当成正经的需求文档来写,一口气整理了一批模板,反复实测之后留下的10个确实好用。这篇文章就掰开揉碎讲清楚,这些模板长什么样、为什么有效、适合用在哪些场景。
1. 为什么你让AI写Python总是翻车
1.1 三个最典型的翻车现场
先说几个我自己遇到过的真实例子。第一个,我让AI“帮我写个脚本抓一些公开网页的数据”,没有给网页结构、没有给目标字段、没有说用什么解析库。结果AI给我生成了一段相当漂亮的代码,用上了某个解析框架,页面一加载就报错——因为那个网站的数据是动态渲染的,根本不走传统解析。
第二个,我让AI“用pandas处理这个数据文件”,但没告诉它数据有多少列、列名是什么、哪些数据是脏的。AI凭经验假设了列名和类型,生成的代码一跑,直接KeyError,因为文件里的实际列名跟它猜的完全不是一回事。
第三个更典型。我让AI“优化一下这段代码”,它认认真真帮我重构了,逻辑却偷偷变了。原来对空值的处理是跳过,重构完之后变成了报错中断。为什么?因为我没有告诉它“行为不能变”这个硬边界。
1.2 翻车的真正原因:AI不懂你的“脑内黑话”
AI本质上是一个基于上下文的概率预测系统,它在生成每一行代码时,都在根据你已经提供的信息猜测你接下来最想要什么。你提供的信息越少,它猜的成分越高,偏差的方差就越大。
这很像你让一位同事帮忙写代码。如果你只说“帮我把这段逻辑优化一下”,同事大概率会问:优化目标是速度还是可读性?允许改接口吗?测试用例在哪里?但AI不会反问你,它会直接给出一个自认为合理的方案,然后等你验收。而这个“自认为合理”恰恰是最容易出事的地方。
所以“正确姿势”这件事,核心不是提示词写得多华丽,而是把该交代的上下文交代清楚。上下文越具体,AI猜测空间越小,输出结果就越可控。
2. 把需求翻译给AI的基本功
2.1 好提示词的五个关键要素
我整理了五类信息,如果一项任务里涉及这几类,尽量都在提示词里写清楚,缺什么补什么:
- 目标和背景:一句话说清楚你要做什么,别让AI猜。
- 输入输出描述:输入是什么格式(CSV、JSON、文本、数据库表),输出要什么格式。
- 技术约束:Python版本、是否允许第三方库、允许哪些库、代码跑在什么环境下。
- 验收标准:什么样算正确。最好给一两个具体例子,边界条件怎么处理。
- 禁止事项:哪些不能改,哪些行为必须保持,哪些文件不能动。
这些要素对应到代码任务里,就是“接口定义等价物”。你想让AI生成一个函数,就应该把函数的输入输出、异常行为、边界情况都定义清楚,就像在写接口文档前先想清楚参数一样。
2.2 两种常用写法:一次性完整版和分步迭代版
对于范围明确、逻辑不太复杂的任务,用一次性完整版,把所有要素写进一段提示词里,让AI直接交付完整代码。比如“读CSV -> 清洗 -> 存新CSV”这种,一次就能搞定。
对于复杂的任务,比如要写一个多文件项目、或者要重构一个几百行的函数,我习惯用分步迭代版。第一轮只要求AI先给设计方案,列出模块划分和函数职责;方案确认后再让它分步实现、针对某个函数单独生成代码。这样做的好处是每一步都有验收节点,问题能提前暴露,不会等到最后发现整个方向就跑偏了。
分步迭代版还能配合“伪代码先行”的技巧。我先简单描述逻辑流程,比如:读取文件 -> 循环处理每一行 -> 汇总结果 -> 输出报告。让AI先把伪代码整理出来,确认后再转成正式代码。多一道中间确认,就多一层安全保障。
3. 十个实测好用的提示词模板
下面这10个模板,每一个我都实际跑过三轮以上,不同模型状态下都有成功案例。你可以直接复制,改成自己的参数再用。
3.1 模板一:需求拆解+完整实现
适合功能明确、范围可控的小工具。关键点是要求AI先拆函数,再写实现,函数边界由你来定。
我要做一个小工具,用来统计文本文件中每个单词的出现次数。 请把代码拆成以下两个函数: 1. read_and_clean(filepath): 读取UTF-8编码的txt文件,去标点、去空字符串、统一小写后返回单词列表 2. count_words(word_list): 返回一个字典,key是单词,value是出现次数 程序入口打印出现次数前20的单词及其次数。 输入和输出路径都从命令行参数接收,使用argparse。 不要使用任何第三方库。所有函数要有docstring。这个模板我第一次是在处理一份会议记录时用的,AI生成的代码直接能跑,输出顺序也符合预期。后来我把同样的套路用在好几个小工具上,只要把函数边界和过滤规则写清楚,基本都是一次通过。
注意事项:在“不要使用任何第三方库”之后,AI会老实地使用内置模块,但偶尔会在路径拼接上偷懒。建议再补一句“路径统一用pathlib处理”,能省掉很多跨平台坑。
3.2 模板二:数据处理脚本
数列清洗和聚合分析是Python最常见的用途,但AI踩坑最多的地方就是假设字段名。解决方法是把列名、数据类型、清洗规则全给出来。
用pandas读取一个CSV文件,文件路径通过命令行参数传入。 CSV列名是name, amount, date,其中amount是数字,date是YYYY-MM-DD格式字符串。 请完成以下清洗和聚合: - 删除amount为负数的记录 - 删除date解析失败的记录 - 去掉name列首尾的空白字符 - 按date字段提取星期几,统计每一天的amount总和 输出新的CSV文件,输出路径也是命令行参数,编码用utf-8,不要修改原始文件。 环境是Python 3.10 + pandas 2.0。有一次我故意没说“date解析失败要删除”,AI默认用了pd.to_datetime(..., errors='coerce')然后直接丢弃空值,行为也没错,但没有明确指示的情况下它有时候会直接报错。所以对于“脏数据怎么处理”这类决策,不要留给AI做,宁可多写一句话。
这个模板里我一般还会加一句“打印处理前后的行数”,这样能快速确认清洗有没有误伤数据。
3.3 模板三:API数据拉取与解析
调用公开API是常见的自动化任务。这里有两个坑:一是没写超时导致脚本卡住,二是API Key硬编码在代码里。模板里把这两点都先堵住。
写一个Python脚本,请求某个公开天气API,根据命令行传入的城市名获取实时天气。 接口返回JSON,包含temperature和humidity字段。 要求: - 使用requests库,超时时间设为10秒 - 失败时重试3次,重试间隔2秒 - API的Base URL从环境变量读取,不允许硬编码 - 解析结果后打印城市、温度、湿度 - 代码入口用if __name__ == '__main__': 包裹实测下来,AI对这个任务的响应普遍稳定,因为输入输出都非常清晰。唯一要留意的点是它偶尔会把环境变量名也自己发明一个,比如os.getenv("API_URL")。你如果不确定环境变量叫什么,就在提示词里直接规定好变量名,比如“环境变量名必须是WEATHER_API_URL”。
3.4 模板四:Excel报表自动化
处理Excel是很多运营和数据分析岗位的刚需,openpyxl和pandas经常混用。麻烦的是Sheet结构、格式、合并单元格这些细节,AI容易忽略。我的模板会明确限定操作库和文件结构。
我有每月销售明细的Excel文件,第一个Sheet名为“明细”,列包括月份、区域、销售额。 请使用openpyxl读取这个文件,完成下面的操作: - 新增一个Sheet名为“汇总” - 按月份和区域分组计算销售额总和 - 在汇总Sheet中输出,第一列月份、第二列区域、第三列销售额 - 每个区域末尾加一行“区域小计”,使用加粗格式 输入文件路径从命令行参数传入,输出覆盖写入原文件。 除了openpyxl,不要使用其他第三方库。这个模板的关键是把Sheet名、列名、输出顺序、格式都定死。我第一次没指定“区域小计”的格式,AI生成的小计行跟普通行混在一起,肉眼完全分不清。后来加了“加粗”两个字,效果立刻就不一样了。
如果数据量很大,比如超过几万行,建议改用pandas处理后再用openpyxl写格式,不然openpyxl的循环写入会明显变慢。
3.5 模板五:旧代码重构
重构是最容易翻车的场景,因为“不改变行为”是一条隐形约束。AI经常为了代码优雅顺手优化了逻辑,导致结果偏差。我的模板会把约束放到最前面,并要求它逐点说明改动。
下面这段Python代码能正常运行,但结构混乱,存在重复代码和命名不良的问题。 请在不改变对外行为和输入输出格式的前提下进行重构: - 把过长的函数拆分成多个职责单一的函数 - 变量和函数名改成语义化名称 - 增加类型注解 - 不改变原来的异常处理逻辑 重构完成后,请用列表形式说明每个新函数的职责,并指出哪些行为保持不变。 以下是原始代码: [在这里粘贴你的代码]注意最后一句“请用列表形式说明每个新函数的职责”很重要。它逼迫AI在重构之外输出一份说明,方便你人工审查。我实测过,如果漏了这句,AI可能什么都不解释直接甩给你一整段新代码,你根本不知道它改了哪里。
另外,重构类的任务一定要让AI分两步走。第一步只给重构方案,确认方案后再给完整代码,可以避免“方案错误但代码已经改完”的尴尬。
3.6 模板六:单元测试生成
让AI写测试比让AI写业务代码更稳,因为测试的输入输出比较容易界定。但这个任务容易出的问题是断言写得太软,比如只判断“结果不为空”。所以我的模板里会强制要求写具体期望值。
为下面的函数编写pytest单元测试。 请覆盖以下四类用例: 1. 正常输入:给出具体参数和期望返回值 2. 空输入:空列表、None或空字符串 3. 边界值:比如最小值、最大值、空集合 4. 异常输入:断言抛出特定类型的异常 每条测试用例的断言必须写明确的期望值,禁止只判断“不为空”。 测试代码不要修改原函数,函数签名保持原样。 以下是函数代码: [在这里粘贴你的函数]这个模板实测效果很好,尤其适合给数据库查询函数、解析函数、计算函数补测试。一个额外的好处是,它让AI生成的测试用例反过来帮你确认了“你对自己函数行为的理解”,有时候AI写的用例里藏着你没考虑到的边界,能帮你提前发现问题。
3.7 模板七:性能优化
做性能优化时,最大的风险是“优化完结果变了”。所以我会把原始代码放进去,并明确要求给出优化前后的对比和理由。
下面这段代码要处理约10万条数据,目前运行耗时约28秒。请帮我优化。 要求: - 保持输入输出完全一致,不改变函数签名 - 优先使用标准库和已有的第三方库,不要引入新依赖 - 优化后请给出对比说明:为什么更快,大概能提升多少 - 如果优化需要牺牲可读性,请加注释说明 以下是代码: [在这里粘贴你的代码]我自己最常见的一类优化是把“循环查列表”改成“先用集合去重再查字典”,以及把逐行处理改成批量向量化。AI在拿到代码后通常能识别出这些模式,但如果它给出了一个复杂度不变只是代码更短的版本,那就说明它没找到真正的瓶颈。这种时候我会进一步提示:先给出当前代码的时间复杂度分析,定位瓶颈后再优化。
这里有点经验分享:性能优化前先问AI“这段代码可能存在哪些性能瓶颈”,让它先分析再动手。实测下来,先分析后动手的成功率明显高于直接要求优化。
3.8 模板八:测试数据生成
造测试数据经常需要特定字段和分布规则。faker库很适合干这件事,但字段的格式适配是细节。为了让生成的CSV在Excel里不乱码,一定要指定utf-8-sig编码。
帮我写一个Python脚本,生成1000行模拟数据,保存为CSV文件。 字段及规则: - id:1到1000的自增整数 - 姓名:随机中文姓名 - 年龄:18到60之间的整数 - 城市:从列表["北京","上海","广州","深圳","杭州","成都"]中随机选择 - 注册时间:2023年1月1日到2024年12月31日之间随机日期 - 手机号:以1开头的11位数字 使用faker库生成中文姓名和手机号。CSV用utf-8-sig编码,确保Excel打开不出现乱码。 文件输出路径从命令行参数传入。这个模板用起来非常顺,因为规则都给了,AI几乎没有发挥空间。如果你需要多级关联数据,比如订单表和用户表,可以再加一句“关联字段要与前一个文件保持一致”。
实测提醒:faker的中文姓名生成依赖于Faker('zh_CN'),如果AI忘了指定区域,输出会是英文名。建议在提示词里直接写死:locale='zh_CN'。
3.9 模板九:报错排查
把报错信息和代码片段一起扔给AI,让它解释并修复。这里最怕的是AI“扬长避短”,比如把报错原因归为数据问题然后让你自己手动清理,甚至悄悄地改了输入数据来绕过报错。模板里要加上约束。
我的代码运行时出现以下报错: KeyError: 'amount' 代码片段如下: [在这里粘贴代码] 请帮我做三件事: 1. 解释这个报错的最可能原因 2. 给出修复后的完整代码 3. 如果这个问题是因为输入数据存在脏数据,请说明你的修复策略,不要通过修改数据来规避报错 环境信息:Python 3.10,pandas 2.0我遇到最多的报错类型是KeyError、ValueError和TypeError。这三类错误高发的原因往往是AI对数据类型做了假设,而实际数据跟假设不符。比如数据里某列被读成了字符串,代码里直接做算术运算就崩了。
这个模板的补救效果很稳,而且第三步能逼着AI在“改代码”和“改数据”之间选择,而不是逃避责任。如果它给出的修复方案是“加一个if判断跳过异常”,那我通常会把验收标准改成“遇到脏数据时记录日志并跳过,同时统计跳过数量”,这样行为就更可观测了。
3.10 模板十:批量文件操作
文件批处理场景里,最容易踩的坑是覆盖原文件、编码错误、不处理子目录。模板里把这几条都堵上,操作就基本安全了。
写一个Python脚本,批量处理某个文件夹下所有txt文件: - 输入文件夹路径和输出文件夹路径从命令行参数传入 - 递归遍历子目录中的所有txt文件 - 读取每个文件时尝试UTF-8编码,失败则用GBK - 把内容写入输出文件夹,文件路径保持相对目录结构,新文件添加前缀clean_ - 不要修改原文件 - 对每个文件打印处理结果:成功或失败及原因 使用pathlib,不要调用外部shell命令。有一次我要处理一批上百个旧文档,一部分是UTF-8编码,一部分是GBK,没有这个模板之前我写了个“先全部按UTF-8读,报错就跳过”的代码,丢了几十个文件。换成这个模板之后,编码回退、目录重建、日志记录全都有了,一次跑完没丢文件。
这个模板考的范围也覆盖了“批量重命名”“批量转格式”等需求,只要把操作那两行换成你的具体需求就行。
3.11 十句话总结十个模板的要点
为了让你快速回顾,我整理了一份对照表:
| 模板 | 核心场景 | 关键提示词要素 | 最容易踩的坑 |
|---|---|---|---|
| 需求拆解+完整实现 | 小工具、命令行脚本 | 函数边界、输入输出、依赖限制 | 不写过滤规则,AI自行发挥 |
| 数据处理脚本 | CSV清洗聚合 | 列名、数据类型、清洗规则 | 假设列名,报KeyError |
| API数据拉取解析 | 公开API对接 | 超时、重试、环境变量 | 硬编码密钥,脚本挂死 |
| Excel报表自动化 | 报表汇总输出 | Sheet名、列名、格式 | 忘记指定格式,输出难辨认 |
| 旧代码重构 | 维护老项目 | 行为不变、异常逻辑不变 | AI顺手改逻辑 |
| 单元测试生成 | 补测试用例 | 覆盖类型、具体断言值 | 断言写太软,等于没测 |
| 性能优化 | 大循环、高耗时任务 | 保持行为、复杂度分析 | 优化完结果变了 |
| 测试数据生成 | 造模拟数据 | 字段规则、编码、数量 | 乱码、字段格式不符 |
| 报错排查 | 运行报错修复 | 报错信息、修复策略 | AI通过改数据规避报错 |
| 批量文件操作 | 文件处理任务 | 编码回退、不覆盖、递归目录 | 覆盖原文件、丢文件 |
4. 模板之外的硬功夫:验证、调试与迭代
4.1 让AI生成的代码先过一遍你的测试
不管AI生成代码时看起来多专业,都不要直接上生产环境。我现在的固定流程是:先让它把代码写出来,然后在本地跑一遍,用真实数据或测试数据验证结果。
如果只是验证功能是否正常,可以给AI一个明确的验收描述:“请写一段main函数运行这个脚本,并把处理前后的行数打印出来”。让运行结果自己说话。
真正要上生产环境的代码,至少还需要两步:做代码审查,重点看异常处理是否完整;写单元测试,把关键路径保护住。AI生成的代码可以当成第一版草稿,但不能当成最终版本,这个心态很重要。
4.2 把报错当对话的“下一句”
第一次生成的代码经常有报错,这没什么好意外的。关键在于报错之后你怎么跟AI沟通。直接把报错信息复制给AI,再附上它生成的代码片段,说“报了这个错,请修复”,这通常比你说“不行,你再试试”有效得多。
如果AI连续两次修复不了同一个问题,说明你的提示词可能遗漏了关键信息。比如“这个文件夹里可能有GBK编码的文件”“这个接口有时候会返回空字段”,这些背景信息一句没写,AI就在信息不全的条件下做猜测。
还有一种很有效的技巧是把修复目标反过来描述:告诉AI“修复后应该满足什么条件”。比如“修复后的代码应该能对包含缺失值的文件正常运行,不报错,并输出一条警告”。这等于给AI设置了验收标准,它会在生成修复方案时朝着这个目标调整。
4.3 什么时候不该用AI写Python
AI写代码不是万能的。我自己总结了三个尽量不用AI的场景:
一是安全敏感代码。涉及密钥管理、支付逻辑、权限校验的代码,AI生成的实现方式可能看起来合理但不够严谨,风险太高,应该由人写、人审。
二是逻辑复杂且无法明确验收标准的代码。比如某个业务规则盘根错节的老系统,改动的影响范围很难界定。如果你自己都说不清楚“什么算正确”,AI更不可能说清楚。
三是算法核心需要精细调控性能的场景。虽然AI能做复杂度分析,但真正涉及到缓存命中率、内存布局这类底层优化,人和性能分析工具的配合仍然更重要。
还有一个“少用”的场景是生成一次性脚本时反复雕琢。如果只是临时处理一个小文件,没必要让AI生成20个函数带完整的日志系统。提示词里主动要求“保持简单”,可以让AI不要过度设计。
5. 我踩过的坑和最终留下的提示词习惯
从一开始的“AI写Python不靠谱”到现在“大部分日常脚本用AI写,效率高不少”,这个转变靠的不是某个更聪明的模型,而是提示词习惯的改变。
第一个坑是让AI自己选技术方案。你问它“处理Excel用什么库好”,它可能推荐一堆库,最后代码里混着两三个库的用法,读起来很割裂。现在我会直接指定库和版本,让它写成纯openpyxl方案或纯pandas方案。
第二个坑是一次让AI写的东西太多。有一次让它“给整个项目写一个数据处理流水线,包括数据清洗、聚合、可视化、导出报告”,生成的代码倒是很完整,但每个部分都很粗糙。现在我会拆成多个任务,一个模板只负责一个大环节,分四轮生成,每一轮拿到能跑的代码再进入下一轮。
第三个坑是没给“禁止事项”。后来我在所有模板里都养成了一个习惯,把“不要改什么、不要删什么、不要用什么”写清楚。比如“不要修改原始文件”“不要引入新的第三方库”“不要改变函数签名”。这些否定约束跟正面要求一样重要。
现在我的固定习惯是:写提示词之前,先在草稿纸上写三句话——输入是什么,输出是什么,怎么验证是对还是错。这三句话写明白了,提示词自然就合格了。然后才是补充技术约束和风格要求。
如果你也想把AI写Python这件事从“碰运气”变成“稳定输出”,可以照着我这10个模板试一轮,先选一个你最近要做的任务,把参数替换成你自己的,跑一遍看看效果。大概率你会发现,问题真的不在AI,而在提示词里藏着的那些没说出口的需求。