
最近我把不少业余项目都扔给了AI来写从最开始拿它补个函数、写个正则到后来干脆让它独立完成一个带界面的小工具前后折腾了快两个月。说实话这个“AI写代码尝试1”系列的第一篇我想先把我踩过的坑、用顺手的流程、以及那些网上没人细说的细节整理出来。这篇文章不谈虚的直接说我怎么选工具、怎么写提示词、怎么让AI从“能写”变成“写得能直接用”以及中途遇到的那些让人抓狂的问题。适合正在犹豫要不要把AI放进日常开发流程的人也适合那些已经用AI写过几段代码、但总觉得它不够靠谱的读者。1. 工具选型别被“最强”忽悠先想清楚你缺什么1.1 从“哪个AI写代码最强”这个问题说起每次打开技术社区总能看到“国产AI写代码最强的是谁”“Codex到底值不值得付费”这类话题。我自己的结论是没有最强的模型只有最适合你工作流的搭配。现在能写代码的AI基本分两类一类是聊天式的大模型比如ChatGPT、Claude、国内的通义千问、Kimi、豆包这些你给它一段需求它直接吐代码另一类是深度集成在编辑器里的编程助手比如GitHub Copilot、Cursor、Codex还有国产的通义灵码、Fitten Code它们能直接读你当前文件、补全下一行、甚至帮你改整个文件。我前两周专门做了个对比测试让五款主流AI写同一个“批量重命名文件”的小工具语言用Python要求带进度显示和撤销功能。结果很有意思聊天式模型给出的代码往往结构更完整注释更详细但你需要自己复制到文件里运行编辑器内助手则更擅长在你已有的工程上下文里做局部修改但它单独回答复杂问题时反而不如聊天模型。所以我的建议是写独立小工具、临时脚本用聊天式大模型在现有项目里改代码、补逻辑用编辑器内助手。两者是互补关系不是替代关系。1.2 我最终留在手边的三件套折腾一圈之后我目前的工作流里固定了三样东西Claude或同等水平的通用大模型负责从零写独立脚本、设计代码结构、解释陌生代码。我习惯把需求描述得尽量具体它给出的代码基本能跑通。VS Code 国产AI插件Fitten Code或通义灵码负责在编辑器里补全、问答、解释选中代码。选国产插件主要是因为响应速度快而且对中文注释的支持更自然。Codex付费版或支持CLI的AI工具用在批量任务上比如让AI一口气重构一个目录下的多个文件。不过这个我用的频率不算高因为免费方案已经能覆盖大部分日常需求。选型时有一个特别容易忽略的点AI工具对你常用语言的支持深度。比如你天天写C/C有些AI对编译错误的理解远不如对Python/JavaScript深刻。热搜词里有人搜“vscode写c没有代码提示”这个我后面会专门讲它其实不全怪AI更多是编辑器配置问题。但反过来如果你让AI写嵌入式相关的C代码它给出的内存布局、指针操作经常需要你反复推敲。反倒是Python这类动态语言AI写起来几乎毫不费力。所以如果你打算让AI帮你写代码第一原则是从它最擅长的语言开始别一上来就让它写冷门领域的高难度代码。提示不要盲目付费。先把你日常最频繁的10个编码场景列出来看看免费方案能覆盖几个。我用了两周免费方案之后发现90%的需求根本不用花钱真正需要付费的是重度使用、需要隐私部署、或者需要和自有代码库深度联动的场合。2. 核心实操我是怎么把需求“喂”给AI的2.1 写提示词不是聊天是写需求文档很多人在AI写代码这件事上失败最大原因不是模型不行而是提示词太含糊。你问它“帮我写个程序”它只能给你一个“猜你想做”的模板。我试过几次之后总结出一套固定格式基本可以稳定输出可用的代码。这套格式包含五个要素我管它叫“五件套”角色与目标你希望AI扮演什么角色要完成什么具体的事。比如“你是一个有十年经验的Python开发工程师请编写一个Windows下批量重命名文件的脚本”。输入输出描述输入是什么格式的数据输出希望保存成什么格式。不要只写“给它一批文件”要写清楚“输入是文件夹路径程序扫描该路径下所有.jpg文件输出是重命名后的文件列表并打印到控制台”。功能细节清单把你要的功能逐条列出来比如“支持自定义前缀”“支持序号从1开始并补零”“重命名失败时跳过并记录日志”。技术约束只能用标准库还是可以装第三方库要兼容Python 3.8吗要不要GUI界面这些必须提前说否则AI很可能给你装一堆你用不上的依赖。验收标准怎么判断程序写对了。比如“处理100个文件时间少于10秒”“重命名后文件名格式统一为 prefix_001.jpg”。我第一次用这个格式让AI写一个文件整理工具时它一次性给出了完整代码还附带异常处理。对比之前随口问“写个整理文件的程序”得到的那种半成品完全是两个世界。2.2 一个完整示例让AI写一个重复文件清理工具拿一个我真实做过的需求举例。我的下载文件夹常年堆着几千个文件其中大量是重复下载的副本后缀带“(1)”“(2)”这种。我让AI帮我写一个清理工具提示词如下你是Windows系统专家擅长Python标准库编程。请编写一个脚本功能是扫描指定文件夹下的所有文件识别文件名中形如“文件名(1).ext”“文件名(2).ext”这种重复副本并列出它们供用户确认后删除。要求如下 1. 使用os和re模块不引入第三方库。 2. 通过命令行参数接收要扫描的文件夹路径。 3. 删除前必须输出完整文件路径列表并要求用户输入y确认默认不删除。 4. 统计扫描了多少文件、找出多少重复项、实际删除多少文件。 5. 如果文件路径包含中文或空格要能正常工作。 6. 代码需要包含main函数Windows下用UTF-8编码。AI给出的代码大约80行我用记事本存成.py文件打开命令提示符运行结果一次通过。这个例子说明一个道理需求写得越接近“验收单”AI的输出越接近“交付物”。你甚至可以要求AI先写代码再写一个测试用例清单你用清单去逐条验证这一步能过滤掉大量逻辑错误。2.3 让AI自己“解释给你听”比直接贴代码有用很多时候AI生成的代码你不敢直接上生产是因为你不理解它的逻辑。我的做法是在提示词末尾加一句“请用自然语言解释这段代码的每一步在做什么给出关键行注释”。别小看这个要求它有两个作用第一强制AI在生成代码时理清思路减少胡编第二你通过读解释能快速判断它有没有理解你的真实需求。有一次我让它写一个解析日志文件的功能它给出的代码能跑但解释里写着“本函数用于按照行号提取数据”我一看就发现它完全理解错了——我要的是按时间范围提取不是按行号。如果我只拿代码跑一遍可能跑通之后才发现结果完全不对。所以现在我的流水线永远是生成代码 - 阅读AI自己的解释 - 验证代码 - 提出修正。另外如果AI给的代码让你越看越糊涂别硬着头皮改。直接告诉它“这段太复杂请拆分代码每一部分用单独的函数实现并加上中文注释”。让AI把大函数拆成小函数是降低出错率最有效的手段之一。我发现模型的拆解能力普遍比它的全局统筹能力好很多与其让它一次性写出一个500行的大文件不如让它分块写再由你手动合并。3. 多AI协作与Agent让AI互相“卷”起来3.1 双AI评审一个写一个挑刺如果你用过AI写代码一定遇到过这种情况它生成的代码表面完美但藏着几个边界条件BUG比如数组越界、没有处理空输入、资源没有释放。单靠一个模型自查很多时候它发现不了自己的问题。后来我开始尝试“多AI协作”简单说就是让模型A生成代码让模型B审查代码。这里的A和B可以用不同公司的产品也可以用一个产品开两个会话窗口让第二个窗口扮演严格的代码审查员。我实际执行时会给审查AI这样的指令“你是资深代码审查员以下代码用于生产环境请找出所有可能的崩溃点、性能瓶颈、安全隐患不要夸赞直接指出问题并给出修改后的完整代码。”神奇的是审查AI往往能找到生成AI漏掉的边界条件。举一个例子生成AI写了一个按大小排序文件的逻辑排序本身没问题但当文件夹为空时它直接抛异常。审查AI一眼就指出了这一点还顺手加了空文件夹判断。这种“互相挑刺”的工作模式比让单个AI反复优化靠谱得多。3.2 用AI Agent串联整条任务链最近大家聊“AI Agent”特别多热搜词里也有“ai agent搭建”“多ai协作”这种。我理解所谓Agent就是给AI一个更长期的目标让它自己拆解步骤、调用工具、逐步完成。放在写代码这个场景里最简单的Agent实践是你只提一个总目标比如“把某个Git仓库里所有Python代码中的print改成logging记录”AI自己拆解成“读取仓库目录 - 遍历.py文件 - 用正则替换print语句 - 保留原有缩进 - 生成修改报告”然后逐个执行。我试过用命令行版的AI工具配合脚本模拟这种Agent流程。我把整个任务拆成了几个环节先让AI分析仓库结构生成待处理文件清单再让AI对每个文件单独生成修改方案最后用一个自定义脚本批量应用修改。这样看起来笨重但实际上每一步都可以检查和回滚比让AI一口气直接改所有文件安全得多。我踩过的坑是AI一次性改多个文件时经常把文件编码搞乱或者替换时多删了括号。分步、留痕、可回滚是Agent落地时的三条铁律。如果你不想自己搭Agent现在很多工具也内置了类似功能比如“圈选代码AI添加Log”“AI生成单元测试”这种半自动操作本质上都是Agent思想的简化版。核心逻辑没有变你给AI一个明确任务边界它在边界内自行规划并执行。3.3 MCP Server给AI接上“外部设备”顺便提一下热搜词里那个“altium designer ai接口 mcpserver”。MCPModel Context Protocol简单理解就是给AI模型装一个标准USB口通过这个口它可以调用外部工具。比如你在VS Code里装了一个MCP ServerAI就能直接读取你本地的文件列表、执行你允许的命令、甚至读取实时报错日志。这大大增加了AI写代码时的“感知能力”。以前AI只能通过你贴给它的代码片段来理解项目有了MCP它可以自己去看项目的目录结构、读取相关文件、运行测试并读取输出。我看到Altium Designer这种硬件设计软件也开始做AI接口说明MCP正在从纯编程向更多专业软件渗透。如果你平时用的软件支持MCP建议花一两小时配置上体验完全不一样。不过这里要提醒一句MCP给了AI执行命令的能力也意味着风险。一定要在配置里严格控制权限只允许AI读取你指定的目录绝对不能让它拿到整个硬盘的读写权限。我见过有人把MCP配置成全盘可读AI一个误操作把他整个项目文件夹改名了。这种事不用怕但一定要有边界意识。4. 写代码过程中的常见坑与排查实录4.1 为什么VS Code写C没有代码提示这锅不全是AI的热搜词里“vscode写c没有代码提示”出现率很高正好我最近也折腾过。我用AI生成了一段C语言链表代码复制进VS Code才发现编辑器里函数名、结构体字段全都没有高亮更没有自动补全。折腾半天才想起来VS Code本身不是C语言IDE你要装C/C扩展并配置好编译器路径。AI生成的代码再完美也不解决编辑器环境问题。具体解决路径很简单在VS Code扩展市场搜索“C/C”安装微软官方出的那个扩展。安装完成后用CtrlShiftP打开命令面板输入“C/C: Edit Configurations (JSON)”检查编译器路径是否指向你系统里的gcc或clang。如果你还没有安装编译器Windows上可以用MinGW-w64或Visual Studio Build ToolsmacOS上装好Xcode Command Line Tools即可。设置完成后还要让VS Code的“IntelliSense”模式匹配你实际用的标准比如C11否则部分语法仍然没有提示。这些搞定之后AI生成的代码就有智能提示了。换句话说你让AI帮你写代码之前先确保自己的编辑器能正常显示代码否则会把AI造成的环境问题混淆在一起。我当时排查了将近半小时以为是AI生成的代码格式有问题最后发现是自己在Windows上没装MinGW。这属于典型的新手误区。4.2 当AI给你报错的API、虚假的函数时怎么办AI写代码最烦人的一件事是“一本正经地胡说八道”——它可能给你一个看起来合理、实际根本不存在的库函数。我遇到过一次它让我用pathlib.Path.glob(**/*.py)这个存在但又让我用os.path.get_file_size()我找了半天没这个函数。后来我明白了对AI来说代码生成是基于概率的有些“常见”函数其实是它从别的语言或版本里混过来的。解决这个问题我的经验是三步走让AI标注版本在提示词里明确说“请标注代码中使用的每个外部库的官方文档链接或至少标注库的版本号”。如果AI给不出你就要警惕。把报错喂回去当代码运行报错时把完整的堆栈信息复制给AI说“这是Python 3.11环境下的报错请修正”。模型对报错信息的理解通常比对需求描述深刻得多往往一次就能修对。用搜索验证如果你怀疑某个API存在性直接让AI自己搜索如果你用的工具有联网功能或者你手动搜索。我自己的习惯是让AI先给出替代方案然后运行测试。4.3 上下文太长导致AI“失忆”怎么办另一个高频问题是你和AI聊了几轮之后它开始忘记最开始的需求。比如你让它先写一个下载文件的脚本它写好了接着你让它“把下载的文件按日期归档”它也改了再让它“加一个断点续传”它改了最后你问它“整个脚本的入口在哪里”它答非所问。这是典型的长上下文衰减。我的应对方法是过一段就开新会话每次重大改动前开一个新会话把当前完整代码和你要的新需求粘进去。新会话虽然失去了历史但你的“五件套”提示词可以完整描述当前状态回到正轨。让AI每个任务输出一个“项目状态说明”这招很好用每次它完成一个阶段就让它在代码开头用注释写清楚“当前实现的功能、已知限制、下一步计划”。下次你把这份状态说明连同代码一起发给新会话AI能无缝衔接。格式化你的代码AI的注意力有限它处理几百行代码时容易忽略中间部分的细节。你让它写的每个函数尽量控制在50行以内并且每个函数都加文档字符串。一个函数只做一件事既方便AI修改也方便你人工审查。4.4 “AI改坏了我的好代码”自救清单我遇到过最窝火的情况原来的代码运行得好好的我想着让AI加个新功能结果它一顿操作把别的地方也改崩了。这时千万别用“撤销”一遍遍碰运气。我的自救流程是让AI只输出“差异补丁”不要输出整个文件。在提示词里写明“只输出改动部分用diff格式给出不要重贴完整代码”。人工审查diff确认每一行改动都是你想要的效果再合并到原文件。如果AI无法给出干净的diff那就把原文件复制一份让AI在新副本上改改完测试通过后再手动合并回主线。养成用版本管理的习惯哪怕是自己的个人项目也让AI操作之前先提交一个commit。它要是乱来你就git checkout回退一分钟的事。这个清单对我非常有用推荐大家人手一份。5. 提示词进阶钱花在刀刃上别让AI瞎忙5.1 模板从“哦”到“哇”的差距很多教程喜欢给一堆花哨的提示词模板我实际用下来真正有效的就那么几类。我把最常用的三个模板整理在这里你可以直接复制使用。模板一Bug修复以下代码在使用XX库版本X.X.X时测试失败。 请按以下流程处理 1. 分析代码逻辑指出最可能导致异常的位置。 2. 对可疑位置补充日志代码帮我确认问题原因。 3. 根据日志确认的结果给出修复方案。 4. 请用中文解释你做出每个判断的依据。 代码 在这里粘贴你的代码 异常信息 在这里粘贴完整的报错信息模板二功能扩展现有程序实现了基础功能运行的入口是main()。 现在需要增加新功能给结果导出为CSV文件编码使用UTF-8-BOM以兼容Excel。 要求 1. 新增函数export_to_csv(data, filepath)不修改原有函数逻辑。 2. 在main()最后调用这个函数输出文件路径放在config变量里。 3. 遇到文件写入失败时控制台提示错误并返回不崩溃。 4. 改动后请只输出新增和修改部分的diff。 现有完整代码 粘贴代码模板三代码解释与重构你面前是一段没有注释的旧代码我要移植到新平台。 请先解释这段代码整体完成了什么任务然后 1. 指出其中依赖了哪些全局变量、外部状态、平台特性。 2. 给出重构方案消除全局变量把逻辑封装成纯函数。 3. 用现代语法调整但不要改变原有行为。 4. 输出重构后的完整代码并逐段说明改动原因。 代码 粘贴代码这三个模板我用了很长时间修改一下项目名和数据格式基本能覆盖日常工作的八成场景。核心就是给AI设定明确的边界、明确的输出格式、明确的验收方式。5.2 “充值代码怎么写”背后的问题别让AI教你写支付系统热搜词里“充值代码怎么写”让我有点警觉。这里得说清楚如果指的是给游戏或应用写个充值功能那属于商业支付领域牵扯到支付渠道、合规、安全绝不是让AI随便生成一段代码就能上线的。我在网上看到过有人让AI写“跳过支付验证”“破解会员”之类的逻辑这既违法也违背工程伦理。AI写代码这个工具应当用来提升效率而不是用来绕过规则。凡是涉及资金、权限、鉴权、加密的代码我都强烈建议你不要依赖AI生成后就直接使用必须经过专业安全审计。这是我的底线也是每个开发者该有的自觉。5.3 让AI学会“自测”——我心中的最佳实践我理想中的AI写代码流程不是“AI写完、人跑来跑去测试”而是让AI自己给自己“找毛病”。具体做法是在提示词里加一段请为上述代码编写一个冒烟测试脚本覆盖以下场景 - 正常输入 - 空输入 - 极端大输入 - 非法字符输入 测试脚本需要断言程序不崩溃并输出预期结果。AI生成的测试脚本往往比代码本身还啰嗦但这没关系你运行一遍测试等于给AI代码做了一次体检。如果测试没通过把测试结果贴回去让它修代码几个来回之后代码稳定度会显著上升。我现在大部分自动化小工具都保留着AI生成的测试脚本哪怕不纳入CI/CD也能在本地快速验证改动是否影响旧功能。注意AI生成的测试脚本默认是“按AI认为对的方式”断言所以你要自己确认断言的条件确实符合你的需求。别测试全绿了结果它测试的东西根本不是你想要的。5.4 怎么让AI“回头改”而不推翻你的架构经常有这种情况AI第一版代码写得不错你让它“稍微改一下”某处结果它把其他部分也改了导致你后续维护困难。为了防止AI“过度重构”我会在提示词里明确写“保持现有函数签名不变”“只修改xxx函数内部实现”“不要动其他任何代码”。这句“约束性指令”出现的次数越多AI越会小心翼翼。如果AI还是不管不顾地大改那就在新会话里重发原代码继续强调“只改我指定的地方”。这个技巧听起来简单但救了我不下十次。6. 从“跑通”到“好用”代码之外的润色与工程化6.1 让AI处理的不仅是代码还有异常与日志AI生成的代码能跑通但离“好用”还有一段距离。比如程序跑一半遇到权限不足它可能直接抛出一个纯英文的Traceback普通用户看了根本不知道怎么办。我在让AI写面向别人使用的工具时会专门加一条要求“所有可能失败的输入输出操作都包一层try-except捕获异常后用中文输出提示比如‘无法访问该文件夹请检查权限’。”就这么一句话程序的可用性提升了一个档次。再比如日志如果不想用第三方logging库我让AI用print输出带时间戳的信息方便排错。对于自己长期用的工具我还会让AI“在每次运行开始时记录当前时间、Python版本、操作系统”这样出问题时能快速定位。6.2 文件编码与跨平台兼容AI最容易翻车的地方我统计了一下AI生成的代码第一次运行报错的原因里文件编码占了相当大的比例尤其是涉及中文文件路径、Windows系统时。AI默认会按UTF-8处理字符串但Windows控制台默认编码可能是GBK导致print中文时直接报UnicodeEncodeError。解决方法是让AI在代码开头统一设置输出编码import sys import io sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)或者干脆在提示词里要求“兼容Windows控制台所有字符串输出前先encode”。另外路径分隔符也是个坑AI经常只写/Windows下其实也能识别但如果你用字符串拼接路径遇到C:\users\这种带反斜杠的就会出问题。我的请求里固定加一句“所有文件路径拼接优先使用os.path.join或pathlib.Path”。AI理解这个要求后生成的代码跨平台性会好很多。6.3 不要停留在“能用”你可以让AI继续优化很多人拿到AI的第一版代码就完事了其实你可以继续要求它做性能优化。比如它对一个大列表用了双层循环你可以问“这段代码处理1万条数据要多久能不能用字典或集合把复杂度降到O(n)”AI通常会马上给你一个优化版本。它甚至能给出不同方案的基准测试代码。我在处理大量文件时就是这么干的让AI先写一版简单实现再让它优化一版对比后保留更快的。这种“先让它跑通再让它跑快”的两步法比一开始就要求高性能更容易得到正确代码。6.4 把AI写代码变成团队协作最后我想说一个心态上的转变把AI当成一个“经验丰富但偶尔马虎的实习生”而不是“无所不知的神”。实习生写的代码你需要reviewAI写的也一样。你给出清晰任务、验收标准、安全边界它就能逐渐进入状态。你要培养自己读AI代码的能力而不是无脑复制。我现在每个由AI生成的函数都会自己再读一遍确认没有隐藏的坑这和以前带新人时做code review是一样的流程。这样下来AI写代码的效率才能真正转化为你的生产力。