AI写代码实战指南:从提示词设计到代码验证与多AI协作
最近同事问我“你真的让AI写代码那还要程序员干嘛”我笑了笑反问他“你会用计算器怎么没见你把会计辞了”其实我最近的“AI写代码尝试1”项目就是一个很典型的例子我想做一个批量处理Excel的小工具以前我会花一个下午翻文档、调库、改编码。这次我只是把需求扔给了AI它三分钟给了我一版能跑的Python脚本我花了二十分钟验证、修边界情况、把异常处理补齐最终落地。这个经历让我意识到AI写代码这件事最关键的从来不是“让AI把代码写完”而是“你怎么把意图说清楚以及有没有能力验收它给的代码”。这篇文章我就围绕这次尝试把从工具选型、提示词设计、代码验证、问题排查到多AI协作的思路完整捋一遍。适合正在观望AI编程的新手也适合已经在用AI但经常翻车的从业者。1. 先搞明白AI写代码到底在写什么1.1 它生成的不是“代码”是“概率上像代码的文本”很多人的第一个误区是把AI当成一个“会编程的专家”。其实大模型写代码的原理和你用输入法打字差不多——它在预测“下一个最可能出现的token词元”是什么。你给它一段需求描述它根据训练时见过的海量代码生成一串在统计意义上“最像答案”的文本。这就是为什么AI生成的代码经常出现两种极端一种是写得非常漂亮结构清晰、注释完整像教科书示例另一种是“一本正经地胡说八道”用了一个根本不存在的函数或者把两个库的API混在一起。后者不是它笨而是它只是在“模拟像代码的文本”并不真正理解你的运行环境、库版本和业务逻辑。理解这一点之后你就不会再拿“一次生成就能跑”作为标准。正确的心态是把AI当成一个知识面极广、但完全不了解你项目上下文的实习生。它写出来的代码必须经过你的审查、测试和修正才能进入正式环境。我在项目里体会到的最重要的一件事AI写代码的真正价值不是“替代写码”而是“压缩从想法到初稿的时间”。以前从需求到第一版可运行代码可能需要一小时现在可能只要十分钟剩下五十分钟用在验证和打磨上——这笔账怎么算都划算。1.2 哪些任务适合交给AI哪些最好别碰我在这次尝试中总结了一张清单可以帮你快速判断一个任务适不适合丢给AI适合让AI写不适合让AI写数据处理脚本CSV合并、Excel清洗、格式转换核心算法涉及复杂数学推导、性能极致优化的代码正则表达式AI写正则简直又快又准安全敏感逻辑认证、加密、支付、权限校验胶水代码调用API、读写文件、解析JSON高并发场景需要深入理解锁、线程、分布式的代码框架样板代码Django/Flask/Spring的骨架遗留系统维护没有文档、依赖复杂的老项目单元测试、代码注释、文档生成你完全看不懂、无法验收的代码为什么安全敏感和核心算法不适合因为AI无法为它生成的代码负责。加密算法的实现如果出了漏洞影响的是真金白银和数据安全。你用它生成一段AES加密代码看着没问题但可能用的是不安全的模式这种坑不是肉眼能看出来的。反过来说脚本类、工具类、一次性任务类的工作是AI的绝对主场。我这次做Excel处理就属于典型的数据清洗任务输入输出明确、逻辑简单、即使出错也不会造成严重后果非常适合拿来做AI写代码的第一次尝试。2. 动手前先选好工具模型、插件和提示词模板2.1 模型怎么选对话式、补全式、本地式工具选型这件事很多新手一上来就懵。我建议从使用场景出发分三类来看第一类是对话式AI用来“描述需求、生成整段代码”。目前比较主流的包括ChatGPT、Claude这类通用大模型也有专门的代码模型比如DeepSeek-Coder、通义千问的coder版本。对话式的优势是你可以来回沟通第一版不对你直接把报错信息贴给它它几秒钟就能给出修改版。我的Excel处理脚本第一版就是用对话式AI生成的整个交互过程大概五轮效率远超我手写。第二类是IDE补全插件用来“在写代码过程中实时提示”。热词里提到的Fitten Code以及GitHub Copilot、通义灵码、CodeGeeX都属于这一类。补全插件适合你已经有大致思路、但不想记忆API细节的情况。你写一个函数名它帮你补全函数体你写个注释它帮你生成实现。个人建议新手从对话式AI开始因为它的交互方式更接近“向同事请教”你不用管光标焦点、上下文选择这些细节。等你熟悉了AI的输出模式再装IDE插件。第三类是本地部署模型适合对隐私有要求的场景。如果你的项目代码不能出内网可以基于Ollama这类工具部署本地模型比如Qwen2.5-Coder、DeepSeek-Coder的量化版。本地模型的缺点是对机器配置有要求效果也不如大厂在线模型但胜在数据可控。2.2 5分钟搭好一个可用的AI编程环境这次尝试我用的环境很简单你照着做五分钟就能搞定装Python和VS Code或者PyCharm热词里提到的“pycharm好用的ai插件fitten”也很实用。VS Code去官网下载安装包一路默认即可。在VS Code里装Fitten Code插件。打开扩展商店搜“Fitten Code”安装后注册登录。它免费额度对个人开发完全够用而且国内网络环境友好不用折腾什么额外配置。准备一个对话式AI的入口。打开任意一个主流大模型网页端比如可以选你自己常用的那家。如果你想要本地化再装个Ollama拉一个代码模型下来。建个项目文件夹比如ai_code_practice把测试脚本放进去方便AI生成的代码直接运行调试。搭好环境之后你还需要建立一个“AI工作目录”意识给每个AI写码任务单独开一个文件夹里面放requirements.txt依赖清单、input_data测试数据、output运行结果。这样AI代码跑挂了排查环境和依赖问题会清晰很多。2.3 新手必看3条提示词黄金法则含万能模板提示词是AI写代码的重中之重。同样的需求不同的描述方式生成结果的质量可以差一个量级。我总结了三条黄金法则法则一给AI一个角色和明确任务边界。不要只说“帮我写个Python脚本”要说“你是一个Python数据分析工程师请帮我写一个脚本读取文件夹下所有CSV文件合并后去掉重复行输出到一个新文件”。法则二提供输入输出示例。这是最容易被忽略的一条。AI对模糊文法的理解能力有限但你对它给出一个“输入长这样输出长那样”的例子它就能立刻锁定方向。比如输入文件 a.csv: id,name,amount 1,张三,100 2,李四,200 合并后的输出 data_all.csv: id,name,amount,source_file 1,张三,100,a.csv 2,李四,200,b.csv法则三声明约束条件。包括“使用标准库不要装额外依赖”“处理中文时用utf-8编码”“给关键步骤加注释”“如果是Windows环境注意路径分隔符”。这些看起来琐碎的约束能帮你避免大量返工。我整理了一个可以直接抄的万能模板存成文本文件每次用AI写代码前先套一遍你是[角色]擅长[语言/领域]。 请完成以下任务 [任务描述一句话说清楚要做什么] 输入说明 [输入文件、数据格式、字段含义] 输出要求 [输出文件、结果格式、存放位置] 约束条件 - 使用[语言版本/库] - 处理[编码/平台特殊情况] - 添加[注释/日志/异常处理] - 不要使用[明确排除的方案] 参考示例 [给出一个小样本输入输出对照] 请先解释你的实现思路再输出完整代码。最后一句“请先解释你的实现思路再输出完整代码”尤其好用。它逼着AI先思考后产出能显著降低胡说八道的概率。而且你从它的思路里就能提前判断这个方案靠不靠谱不用等跑起来才翻车。3. 一个真实案例从模糊需求到可运行脚本3.1 把一句话需求拆成机器能理解的任务清单我这次的需求原话很简单“帮我把一堆Excel合并一下去掉重复的。”但这句话里有三个坑“一堆Excel”是哪些要不要包含子文件夹“合并”是上下拼接还是按某列关联“去掉重复的”是按整行去重还是按某一列比如订单号去重如果你不拆清楚就丢给AI它大概率会“猜”一个方案然后你在运行时才发现不对。所以我在项目里先写了一个任务清单读取./data/input目录下的所有.xlsx文件统一表头如果列名不一致以第一个文件的表头为准做一个列名映射按订单号列去除重复记录保留每个订单号最早出现的那一条新增一列来源文件记录每行数据来自哪个Excel把结果写入./data/output/merged_result.xlsx。这个清单是我自己写的不是AI生成的。你可能会问这不还是要自己动脑吗没错但你要明白需求拆解这一步恰恰是AI无法替代的核心能力。AI擅长的是“把清晰的任务转化为代码”而不是“帮你把模糊的业务诉求想清楚”。这就像你请一个厨师做菜你得先告诉他要做辣的还是不辣的、用鸡腿肉还是鸡胸肉他才能动手。3.2 让AI写出第一版代码并逐段看懂它的思路把任务清单和提示词模板组合好发给AI之后它给了一段类似这样的代码这里我简化了一部分import pandas as pd from pathlib import Path def merge_excel_files(input_dir: str, output_file: str, key_column: str): input_path Path(input_dir) all_data [] for file_path in input_path.glob(*.xlsx): df pd.read_excel(file_path) df[来源文件] file_path.name all_data.append(df) merged pd.concat(all_data, ignore_indexTrue) merged merged.drop_duplicates(subset[key_column], keepfirst) merged.to_excel(output_file, indexFalse) print(f合并完成共 {len(merged)} 条记录) if __name__ __main__: merge_excel_files(./data/input, ./data/output/merged_result.xlsx, 订单号)这段代码第一眼很干净确实能跑通。但我逐行审查后发现了三个隐患第一个隐患列名不一致时直接报错。pandas的concat遇到表头不同的DataFrame会生成大量NaN列而不是自动对齐。AI并没有处理我需求清单里的“列名映射”问题。第二个隐患read_excel默认把第一个工作表读进来但我的Excel有些文件有多个sheet里面还带汇总行。这样合并出来的数据会混入“合计”“总计”之类的脏数据。第三个隐患没有异常处理。如果某个文件被占用、格式损坏或者编码不对整个脚本直接崩溃而且不会告诉你具体是哪个文件出了问题。这个审查过程我大概花了十五分钟如果是以前手写代码这个时间可能不够排查一个编码问题。但正因为AI把主体框架搭好了我能把精力集中在这几个关键边界条件上。3.3 跑起来之后验证、修错、再让它自己改发现问题后我没有自己动手修而是把问题描述又丢回给了AI。这里有一个非常实用的交互技巧把报错信息原样复制给AI然后追问一句“你觉得可能是哪里的问题怎么改”。比如我改了代码之后运行时遇到了一个编码报错UnicodeDecodeError: utf-8 codec cant decode byte 0xd6 in position 0: invalid continuation byte我直接把这段报错粘贴给AI它很快给出判断这个Excel文件其实是旧版的.xls格式或者内部使用了GBK编码的中文表头建议统一用pd.read_excel(file_path, encodinggbk, header0)。注意read_excel其实不接收encoding参数AI给出的这个建议本身也有问题——但这恰恰说明了你作为验收者的重要性AI给你一个方向你还要判断这个方向是否适用。最后我让AI分别在三个层次上修改用pd.read_excel的分页读取逻辑处理多sheet、加try-except定位坏文件、用df.columns映射统一列名。来回大概四轮对话最终代码稳定跑通输出文件的记录数和抽样验证结果都对得上。以我这次的体会AI调代码的定位更像一个“快速试错伙伴”。你抛给它一个问题它能给出多个尝试方向你不用一个个去翻文档直接挑一个看起来合理的方案测试就行。测试失败就再抛下一个问题一直到跑通为止。4. 常见问题与排查技巧实录4.1 AI一本正经地胡说八道代码里用了不存在的函数这是遇到最多的问题。AI生成代码时引用了某个库的某个函数看起来有模有样但实际运行直接AttributeError。热词里那句“由于找不到msvcp140.dll无法继续执行代码”也属于类似思路——很多报错看起来和代码逻辑无关其实是环境和依赖层面的问题。对策很简单要求AI先注明依赖库和版本。你可以在提示词里加一句“请列出脚本需要的依赖库和安装命令并注明版本”。这样AI会收敛到它“见过”的稳定组合而不是捏造一个不存在的方法。如果还是翻车就把报错信息丢给它让它自己解释。我统计过这种“AI报错 - AI自己修”的循环平均三轮以内能解决大部分问题。核心思路是把AI当成一个有经验但偶尔犯糊涂的同事问题来了先让它自辩而不是急着换人。4.2 依赖装不上、版本冲突、运行时报缺DLL这类问题在Windows环境特别常见。热词里有条“由于找不到msvcp140.dll无法继续执行代码是什么原因”很多人第一次遇到时一脸懵。实际上这不是你代码的问题而是某些Python扩展库需要微软的VC运行库支持。我处理这类问题的标准流程是看报错是ImportError、ModuleNotFoundError还是DLL load failed。ModuleNotFoundError说明没装库执行pip install xxx就行。DLL load failed通常是本地环境缺VC运行库去微软官网装“Visual C Redistributable for Visual Studio”装完重启终端。版本冲突就把pandas、numpy这些核心库统一升级或降级到AI提示的版本用pip list确认。另外我强烈建议给每个AI项目建独立虚拟环境。Windows下的命令很简单python -m venv .venv .venv\Scripts\activate pip install pandas openpyxl独立环境最大的好处是AI代码里的依赖不会污染你的全局环境出了问题直接删掉重建一分钟恢复原状。4.3 中文乱码和路径反斜杠Windows用户的专属血泪AI生成的代码默认跑在Linux风格的环境上但你的电脑大概率是Windows。于是两个坑就出现了。第一个坑是编码。Windows下Python读写文件默认可能用GBK但AI习惯写utf-8。处理含中文的Excel和CSV时要么在open时指定encodingutf-8-sig要么让AI“兼容Windows中文环境”。第二个坑是路径分隔符。AI生成代码里的路径常写成./data/input在Windows命令行一般没问题但如果AI给你的代码里出现了类似path C:\Users\name\data的写法反斜杠会让它变成一个非法转义字符。解决办法是让AI统一使用pathlib.Path或者把路径写成Path(data) / input的形式。这类问题没什么技术含量但很消耗时间。我的经验是在提示词的约束条件里直接写明“运行平台是Windows 10Python 3.11”让AI在生成代码时就把这些因素考虑进去能省掉不少来回调试的功夫。4.4 AI写出来的代码有安全风险怎么办很多人只关心“跑不跑得通”忽略了“代码干不干净”。比如AI可能给你生成一段直接执行用户输入的命令代码import os user_input input(请输入命令) os.system(user_input)如果这个脚本是内部工具自己用勉强凑合但只要被别人碰一下这就是一个高危后门。还有AI可能把数据库连接密码、API Key直接硬编码在代码里如果你把代码上传到码云这类公开仓库等于把密钥公之于众。所以我在工作流里加了一步“代码规范检查”。你可以让AI自己审一遍请检查下面这段代码的安全性和健壮性重点看 1. 是否存在命令注入、eval执行用户输入等安全问题 2. 是否有硬编码的密钥和敏感信息 3. 异常处理是否完善 4. 是否符合PEP8规范。 请列出问题清单和改进方案。这一步相当于给AI的代码做了一次“结对评审”。我的实际体验是AI审AI有时候给出的建议有点吹毛求疵但抓硬编码密钥、命令注入这类明显问题还是比较靠谱的。4.5 问题排查速查表一次解决80%的翻车现场这里我把项目里遇到过的典型问题整理成一个速查表方便你直接对号入座现象可能原因处理办法ModuleNotFoundError: No module named xxx依赖没装pip install xxx或用虚拟环境重装AttributeError: DataFrame object has no attribute xxxAI用了不存在的API把报错丢给AI让它核对库版本UnicodeDecodeError编码不匹配让AI指定encodingutf-8-sig或对应编码数据合并后出现大量NaN表头不一致先统一列名映射再用concat输出Excel打开乱码编码或Excel兼容问题写Excel时用indexFalse必要时转CSV用utf-8-sig运行时提示缺msvcp140.dll缺VC运行库安装Visual C Redistributable其实吧这些报错Google也能查但用AI排查的体验好在一个地方它会结合你的代码上下文给答案而不是给你一个泛泛的解决方案。这一点在遇到“冷门报错”时尤其有价值。5. 进阶玩法多AI协作与AI Agent5.1 让一个AI写、另一个AI审效果比单打独斗好很多热词里出现了“多ai协作”这确实不是噱头。我试过的协作模式是用A模型写代码用B模型做审查。因为不同模型的训练数据、风格偏好、盲区都不一样A没发现的问题B可能有不同看法。具体的操作流程是把需求和提示词模板发给A让它生成实现代码拿到代码后把代码原样转发给B附上一句“你是资深代码评审专家请从正确性、健壮性、风格三个方面指出问题并给出修改建议”把B给出的建议带回给A让A判断哪些合理、哪些是无中生有如此来回两三轮最终代码质量会明显高于单一AI的输出。这个流程很像真实团队里的“写码-评审-修订”循环但两个参与方都是AI速度极快。我甚至会在一些正式一点的项目里用这种“双AI交叉验证”的模式把评审记录保留下来作为团队内部的学习素材。5.2 用AI Agent把“写代码-跑测试-修bug”串成流水线再往上一层就是热词里的“AI agent”了。所谓AI Agent就是让AI不再满足于“你问一句它答一句”而是让它自主规划任务、调用工具、根据反馈持续行动直到目标完成。举个实际例子我之前用过某平台的Agent模式下达任务“检查当前项目所有Python脚本是否符合PEP8并自动修复格式问题”。Agent会自动列出待检查文件、逐个读取内容、调用ruff命令检查、看到报错后再修改代码、重跑检查直到全部通过。整个过程不太需要我逐条确认。如果你对这套感兴趣可以从两个方向入手在IDE里用支持Agent模式的插件比如Fitten Code也好、Continue也好看它们是否具备“自动执行命令并读取结果”的能力使用专门的Agent编排工具把“写代码”“跑测试”“读日志”“修bug”几个环节串成一个自动化工作流每个环节由一个AI子任务负责。我目前对Agent的使用深度还停留在“半自动”阶段因为全自动仍然存在一个致命问题Agent可能在一个错误的方向上反复循环俗称“死循环”。如果没有外部干预它会把资源耗在没必要的地方。所以我的建议是Agent适合做目标明确的机械性任务比如“格式化代码”“补全测试用例”“重命名变量”不要一开始就让它全权负责一个完整功能开发。5.3 把AI代码review当成团队刚需而不是个人玩具最后一个进阶思路是把AI接进团队的代码协作流程里。热词里“上传代码到码云”提示了一个常见场景代码Push到远程仓库之后团队里的其他成员要review。这时候可以让AI先做一轮“预审”把风格问题、明显bug、安全隐患提前过滤掉人类reviewer只需要关注业务逻辑和架构设计。实现方式也不复杂如果你用的是码云Gitee这类国内平台可以在CI阶段加一个任务自动跑ruff、mypy这样的静态检查再把检查结果和AI的评审意见一起贴到Pull Request评论里。这样一个人工review的能力就被释放出来了。我在项目里试过让AI先审查我提交的代码它指出“这个函数命名不够语义化”“这里缺少空值校验”之类的问题。我改完再提交人工review的批注明显少了很多。这种“AI跑第一棒、人跑第二棒”的协作方式可能是目前最稳妥、落地成本最低的AI编程实践。6. 最后说说我个人用AI写代码的几条体会这次“AI写代码尝试1”项目做下来我最深的感受是AI不是编程神器而是编程的“加速器陪练”。它加速了从想法到初稿的过程也逼着你把需求想得更清楚不然你连提示词都写不出来。我在实际调试中还有一个特别管用的技巧把AI生成的代码按函数拆成小块分别追问“这个函数的作用是什么”。不是为了测试AI而是为了让自己快速理解它写的逻辑。你只要能流畅地向AI提问、让AI解释每一段代码你就等于完成了一次高效率的代码阅读。对新手来说这是比任何教程都生动的编程课。如果你也想尝试我建议从一个小脚本开始就是我做的这种Excel合并、日志分析、文件批处理的活儿。记住三件事第一提示词写清楚输入输出有例子 第二跑起来之前一定要自己看一遍代码 第三报错别慌直接复制给AI让它解释和修。踩过几次坑之后你会慢慢形成自己的“AI协作手感”。那时候你会发现编程这件事的门槛正在悄悄变低但“想清楚自己要什么”这件事的门槛反而变高了。能想清楚问题的人无论有没有AI都会是最大的赢家。