1. 先想清楚一件事:AI编程到底在学什么
去年有个朋友跑来问我:“我想学AI编程,从哪儿开始?”我反问他:“你现在手里有没有一个具体到能写进一句话里的需求?”他愣了一下,说没有。我就知道,真正难住他的不是工具,而是他还没想清楚自己要的到底是什么。
这也是我做这个入门到实战系列时最想先掰正的一个观念:AI编程的重点不是“AI”,也不是“编程”,而是中间那个“翻译”的过程。你要把脑子里的模糊想法翻译成AI能听懂的具体指令,再把AI输出的代码翻译回业务的正确性。如果你没有做过这种双向翻译,买再贵的工具、装再多的插件,最后也只是在用AI玩“代码生成游戏”,而不是在解决真实问题。
这篇文章想讲清楚的就是这条完整的路径:从基本观念、工具选型、提示词设计,到真实项目怎么撸起袖子干,再到报错后怎么让AI自救、怎么沉淀出一套属于自己的工作流。适合三类人看:
- 完全零基础,只会打开编辑器,想用AI辅助处理手头杂活的新人;
- 写过一点代码,但觉得AI生成的东西不可控、越用越心虚的初级开发者;
- 想把手头重复劳动自动化,但不知道从哪个需求切进去的业务人员。
我自己属于中间那类,早期也踩过不少坑。这篇文章不讲那种“三分钟让AI写个贪吃蛇”的Demo,它只讲一件很朴素的事——怎么让AI帮你把一件真实的小事干完、干对、干稳。
2. 重新理解AI编程:它像一个外包新人,不是一个自动代码机
2.1 “让AI写代码”和“用AI编程”是两回事
现在很多人对AI编程的想象还是这样的:我把需求往对话框里一扔,AI咔咔一顿输出,复制粘贴,项目完成。我被这种想象害过不止一次。准确地说,这种想象适用于“写一段独立小函数”的场景,但一旦进入真实项目,情况完全不同。
我更喜欢把大模型AI编程助手想成“一个能力很强、但对你的上下文一无所知的外包新人”。这个新人读过海量的代码,能写得很溜,但他不知道你的数据长什么样、不知道你公司的命名规范、不知道你运行环境的版本。你交代任务时少说一句“输入文件里有空行”,他就敢默认没有空行;你没说“价格字段里可能有逗号”,他写的解析代码就可能在第一条脏数据上报错。
所以,如果你用“甩手掌柜”的心态去用AI,它回报你的就是一堆看起来精美、跑起来崩溃的代码。正确的心态是把自己当成一个既当产品经理又当验收员的角色:需求要你来写,成果要你来验,中间的执行他来做。
2.2 为什么说卡在“入门”和“实战”之间的,往往是需求描述
这几年很多人问我:“我看了好多教程,每个都会,怎么一到实战就不会了?”
我的观察是:教程普遍在教“AI能做什么”,却很少教“怎么把自己的问题说清楚”。而后者才是拉开差距的地方。
现实中的需求都是模糊的。比如有人说:“你帮我写个脚本,处理一下这个表格,弄利索了。”这句话里,表格是什么格式、怎么算“利索”、要不要汇总、结果输出成什么样,全是未定义的。你直接拿这句话去问AI,它给你返回的也是“看起来合理但根本不干活”的东西。
反过来说,如果一个人能在动手前把需求描述成:
输入是一个CSV文件,编码可能是GBK也可能是UTF-8,表头有“商品名、分类、价格、库存、备注”。目标是清洗数据:去掉完全重复的行、去掉关键字段为空的记录,价格列里如果有“元”字尾缀要去掉,最后按分类输出数量和库存汇总。
那这个项目的成功率基本在九成以上。因为在描述过程中,你已经把业务逻辑想清楚了,AI只是帮你把逻辑翻译成代码。
这里我有一个建议:不要一上来就学什么提示词模板,先练习一个动作,把你手头要做的事用“输入是什么、要做什么处理、输出是什么”三句话写下来。这个能力练好了,AI编程就成了一半。
2.3 AI编程的前100个小时,到底该分配到哪里
结合我自己的经验,我会把入门阶段的时间大致这样分配:
- 30%的时间花在学会怎么清楚地“说话”(需求拆解与提示词设计)上;
- 30%的时间花在“读懂AI写的代码”上,不用达到精通,只要能搞懂每一段在干什么;
- 20%的时间花在“跑起来和找错误”上,包括装环境、看报错日志;
- 20%的时间花在“验收”上,也就是构造测试数据,确认AI写的代码真的处理对了。
如果时间有限,我建议把“读代码”放在“写代码”的前面。AI编程时代,阅读能力比写作能力值钱得多。你能读懂AI输出的代码,才知道怎么让它改、改哪里,也才不会在它一本正经地胡说八道时被它带沟里去。
3. 工具选型:入门期别急着买最贵的“全家桶”
3.1 三条技术路线,各有利弊
聊完心态,聊点实在的。市面上能用大模型做编程的路径,大致能分成三类。我分别试过之后,感受如下:
| 方案类型 | 典型形态 | 上手难度 | 成本 | 隐私 | 最适合的场景 |
|---|---|---|---|---|---|
| 商用大模型API | 直接调用云端大模型的接口 | 低,注册即可 | 按调用量计费,个人使用一般不贵 | 数据会上传,不适合敏感环境 | 快速干活、处理个人脚本 |
| 本地部署开源模型 | 在自己电脑上跑模型,通过工具或服务调用 | 中高,要懂环境配置 | 硬件成本高,电费忽略不计 | 数据不出本机 | 重视隐私、想研究原理 |
| IDE原生AI插件 | 集成在编辑器里的补全和对话式助手 | 低,装好就用 | 多为订阅制 | 取决于服务方策略 | 日常写代码时的补全和局部修改 |
这三条路不冲突,可以叠加。我的建议是:入门期用第一条路把流程跑通,不要一上来就折腾本地部署。本地部署看起来省钱、私密,但你要先搞定显卡驱动、模型下载、量化版本选择、参数调优,一套下来半天就没了,而你可能只是想算个库存汇总。
3.2 成本算一笔账:心里有数之后反而不焦虑
很多人一听“按调用量计费”就慌,怕AI聊出一个天价账单。我把自己几个月的真实使用情况摊开算一下,给你个参考。
我日常的编程类对话,平均一轮请求大概消耗几百到两三千个token。注意,token不是字数,一个汉字大约等1到2个token,代码的token消耗会更高。如果按一次完整任务可能来回对话20轮到50轮算,一个中等规模的小工具项目(比如后面那个表格处理案例),总消耗不过几万到十几万token级别。折合成大多数商用API的计费标准,大概也就是一两杯咖啡的钱。真正贵的是那种“反复让AI重写同一段代码、每次都是全量重新生成”的蛮干型用法,对话轮数爆炸,钱也跟着爆炸。
所以我更推荐的姿势是:先自己把问题想清楚,把需求写成一段明确的话,再一次性丢给AI,而不是把AI当成橡皮泥,一点一点挤牙膏式地让它猜。这样既省钱,又省时间。
3.3 环境准备中容易翻车的三个小细节
第一条技术路线看起来是“注册就能用”,但我在帮身边几个朋友上手时发现,有三个细节最容易卡住:
- API密钥不要写死在代码里。我见过有人把密钥直接贴在脚本里发给同事,结果密钥泄露,被刷了不少量。标准做法是存入环境变量或单独的配置文件中,并且定期更换。
- 不要忽略超时和重试。调用云端模型是网络请求,网络偶发抖动、服务端繁忙都很正常。靠谱的做法是在代码里设置合理的超时时间(比如30秒到60秒),加上2到3次指数退避重试。
- 上下文长度要在理解范围内使用。大模型能接受的输入上下文是有限的,虽然现在的模型能接收很长的文本,但“能接收”不等于“效果好”。我在实战中发现,一次性塞给它好几百页代码,它给出的修改建议不仅变慢,还容易漏掉关键逻辑。正确做法是只粘贴和当前改动相关的文件片段。
4. 学会和AI对话:提示词设计的三层功夫
4.1 用结构化模板替代“一句天马行空”
很多人以为提示词是“咒语”,背几个魔法句式就能让AI言听计从。我的经验是没那么玄,核心就一条:给足上下文,不给足自由发挥的空间。
我自己常用的提示词模板长这样:
你是一个资深的Python开发工程师。 我需要完成一个数据处理任务,请只输出可以直接运行的代码,并在注释中说明使用方法。 任务目标:…… 输入数据说明:格式是CSV,表头分别是……,可能包含以下脏数据:…… 输出要求:处理后的结果保存为新的CSV,并额外在终端打印一条统计信息…… 如果输入数据和预期不符,请在代码中增加必要的检查,并打印警告信息。
这个模板看起来普普通通,但每个字段都有作用。设定角色是让AI知道该用什么层次的技术栈来回答;“只输出代码”是防止它给你灌一大堆废话;“输入数据说明”是减少它靠猜的空间;“增加检查”是让代码面对真实数据时更稳,而不是在理想数据上跑通就算完。
4.2 给一个“长得对”的例子,抵得上解释十句话
如果模板里的概念还不够具体,最好的办法是给few-shot示例。这个概念不复杂,就是小模型时代就有的做法:给AI一个输入和期望输出之间的对应关系,让它照着这个“感性认识”来写代码。
我举一个真实发生的例子。有一次我需要从商品备注字段里提取尺寸,比如“红色L码”“M号黑色”“XL白色”。我第一次给AI的描述是“提取备注中的尺码”,它给出的代码五花八门,有的只匹配数字,有的把“红色L码”提取成了“L码”倒是还行,但碰到“M号”就出错。
后来我改成给它几个示例:
输入:“红色L码棉质T恤”,期望输出:“L” 输入:“M号黑色卫衣”,期望输出:“M” 输入:“XL白色加绒衬衫”,期望输出:“XL” 请按上述规律写一个提取函数。
模型一下就稳定了。因为你用“样例”说话,模型就有了可推断的模式,不用再猜你心里的“尺码”到底指什么。
4.3 大任务拆小:一小时的问题别让AI一次回答
新手最容易犯的错,是丢给AI一个完整系统级的需求:“帮我写一个客户管理后台。”AI真能给你写出来,但是一个几千行的庞然大物,你根本没法验证它对不对、也改不动。
我更推荐的做法是“函数级协作”:
- 任务一:“帮我写一个读取CSV并简单清洗的函数”;
- 任务二:“帮我写一个按分类汇总统计的函数”;
- 任务三:“帮我写一个把结果输出为新的CSV的函数”。
每个函数都能单独运行验证,最后我再自己把这些函数拼起来。如果拼的过程中出了问题,报错信息也容易定位——要么是A函数输出格式和B函数期望输入不匹配,要么是边界条件没处理。这种拆分习惯,和传统编程里的模块化思想是同源的,只是现在执笔者换成了AI。
4.4 让AI“站在你这边”:给足验证与防御空间
我越来越觉得,AI生成的代码最大问题不是“不聪明”,而是“太理想化”。它默认输入都是完美的,默认环境都是干净的。所以我会习惯性在提示词里加上一句话:
注意:真实数据中可能包含空行、重复项、金额带单位、编码不一致等情况。请在代码中预先处理这些情况,并在遇到无法处理的数据时不要终止整个程序,而是打印警告并跳过。
这句话一分钱不值,但它能把AI从“理想主义实习生”拉回到“面对现实的老工程师”状态。很多人在使用AI编程时的痛苦,根源就在于——AI写出来的代码只在他的假想世界里是对的,一到你的真实数据上就垮。
5. 实战:用AI从0到1做一个数据清洗与汇总小工具
5.1 从一个“老板会这么提”的真实需求出发
下面这个案例是我实际做过的,为了讲清楚逻辑,我把细节稍微简化了,但流程完全一致。背景是这样的:某天我拿到一个几百行的商品信息表,内容是商品名、分类、价格、库存、备注。表是别人从系统里导出来的,脏得可以——有重复行、有空行、价格里有“元”字尾缀、分类有缺漏、备注格式五花八门。
需求就一句话:“把这个表弄干净,然后按分类看一眼有多少品和多少库存。”
按照第4章的方法,我没有把这句话原样丢给AI,而是先自己把它翻译成了结构化描述:
你是一个Python开发工程师。 任务:清洗一个CSV格式的商品信息表并输出分类汇总。 输入:一个名为products.csv的文件,编码可能是GBK也可能是UTF-8,表头包括“商品名、分类、价格、库存、备注”。 清洗规则:
- 删除完全重复的行;
- 删除“商品名”为空的记录;
- 价格列去掉“元”字尾缀,转成数字,无法转换的丢弃并打印警告;
- 分类为空时填“未分类”。 输出:一个名为products_clean.csv的新文件,同时在终端打印各分类的商品数和总库存。 请输出完整可直接运行的Python代码,并加注释。
5.2 第一次生成:拿到骨架,但别高兴太早
AI返回的代码骨架是这样的(简化版本):
import pandas as pd # 读取CSV,尝试处理编码问题 try: df = pd.read_csv("products.csv", encoding="utf-8") except UnicodeDecodeError: df = pd.read_csv("products.csv", encoding="gbk") # 清洗:去重、去空、类型转换 df = df.drop_duplicates() df = df.dropna(subset=["商品名"]) df = df[df["商品名"].str.strip() != ""] # 处理价格中的“元” df["价格"] = df["价格"].astype(str).str.replace("元", "").str.strip() df["价格"] = pd.to_numeric(df["价格"], errors="coerce") df = df.dropna(subset=["价格"]) # 分类缺省 df["分类"] = df["分类"].fillna("未分类") # 输出清洗后文件 df.to_csv("products_clean.csv", index=False, encoding="utf-8-sig") # 按分类汇总 summary = df.groupby("分类").agg(商品数=("商品名", "count"), 总库存=("库存", "sum")) print(summary)这代码在整体思路上没问题,但离真正能跑还有三道坎。这也正是AI编程实战中最常见的情况:思路框架给得不错,但细节总有疏漏。
5.3 第一次运行:三个报错,逐个击破
我在电脑上新建目录,装好pandas,把代码存成脚本运行,第一波报错就来了:
- 第一个报错:
ModuleNotFoundError: No module named 'pandas'。这是我自己的环境问题,与AI无关,用pip install pandas解决。 - 第二个报错:读取CSV时出现编码报错。AI其实已经预料到了,但它的try-except只处理了“UTF-8读取失败改用GBK”,如果两个都失败,程序照样崩。我在反馈里加了一句:“请用更稳妥的兜底逻辑,尝试多个常见编码。”
- 第三个报错:库存那一列里居然有“N/A”这种字符串,
sum算不了。我把报错直接贴给AI,它补了一段代码,把库存也做了pd.to_numeric(..., errors="coerce"),并丢弃无法转换的行。
这个过程中我有两条深刻的体会:第一,AI生成的代码必须运行之后再信,别听信它的“应该没问题”;第二,把报错信息原样贴回去,让AI自己解释再修改,比自己瞎猜效率高一个量级。
5.4 第二轮迭代:新增需求,验证工作流
清洗跑通之后,我加了一个新需求:每个分类下面,再算一下平均价格,并且把结果按“库存从高到低”排序。这次我没有重写整个任务,而是在原代码基础上追加一句提示词:
在上面的基础上继续修改:
- 每个分类的输出中增加“平均价格”;
- 汇总表格按“总库存”降序排列。 只需要输出修改后的汇总部分代码。
这个“增量修改”的习惯很重要。很多人每次迭代都把完整代码重新生成一遍,结果AI经常在重写时把之前修好的问题又带回来。尽量用“继续修改以上代码”的对话方式,让上下文保持在同一个会话中,稳定性会好很多。
最终结果是一份干净的表和一张分类汇总。整个过程大约用了一小时,其中一半时间花在确认“清洗规则是否符合业务预期”上,真正敲代码、调报错的时间其实很短。
6. 排错与迭代:AI生成了代码,然后呢
6.1 报错后的第一个动作:别自己瞎改,先让AI解释
我见过很多新手拿到AI代码,一报错就自己上手乱改,改不动再回去怪AI不靠谱。其实报错信息是AI最容易处理的输入之一。你把报错完整贴回去,连代码上下文一起发过去,然后问它:
这段代码在运行到第X行时出现了以上报错。请先解释可能的原因,再给出修改后的完整代码。
这里有个小技巧:要求AI先解释、再给代码。如果它直接给代码,你只知道改了什么,不知道为什么。让它先解释一遍,你能看到它的推理过程,也能顺带判断它是不是在胡编。
6.2 警惕“一本正经地胡说八道”的幻觉
AI编程最大的坑不是代码写错,而是它可能使用一个不存在的函数、不存在的库、或者过时的API。它描述得煞有介事,但实际上在某个版本里根本不存在。这种幻觉在“代码”这种高度依赖精确上下文的任务里尤其危险,因为语法看起来都对。
我吃过一次亏:让AI写一个“把数据输出为Excel表格”的脚本,它给出了一段同时使用了两个第三方库的代码,第二个库我都没听说过,但它描述得特别合理。一运行,报错“module not found”,连安装都装不上——因为这个包根本不存在。
现在的应对方法是,我会在提示词里提前约束:
请只使用Python标准库和我指定的第三方库,不要使用任何需要额外安装其他依赖的包。如果你建议安装某个库,请先说明它的用途和发展状况。
真正生产环境里,还可以要求AI“给出使用的每个第三方库的版本要求”,这样至少能减少版本冲突。
6.3 让AI自己写测试,但它说的话也别全信
AI编程的验收环节,我强烈建议让AI顺手把测试也写了,但测试能不能通过,要以实际运行为准,不以AI的口头承诺为准。
有一次我让AI写一个日期解析函数,它自信地说“已经处理了所有月份缩写形式”。我扔给它一组测试数据,其中包含“Sep 31”这种不存在的日期,它的代码没有报错,直接把日期解析成了10月1日。这个结果放在某些场景下能接受,但如果是财务场景就会出大事。所以,AI写出来的测试,只是帮你节约了设计测试用例的时间,不等于代码就是对的。
有一个很简单的验收思路:拿出一小段“已知正确答案”的数据,让AI代码跑一遍,对比输出结果。这个金标准永远有效。
6.4 哪些错误不能赖AI
作为使用者,有时候也要反思是不是自己没把输入说清楚。常见“赖错人”的场景包括:
- 你给的需求前后矛盾,比如先说“删除重复行”,后又说“但合并相同商品名的库存”,AI选择了其中一个,你开始骂它理解能力差;
- 你没有说明运行环境,AI按最新版本写法输出,你的环境跑不了;
- 你说“处理一下数据”,但没指定输出格式,AI输出成表格,你要的是JSON;
- 你反复修改需求,却没有告诉它“之前的方案废弃了”,导致它在新旧逻辑之间摇摆。
遇到以上情况,第一反应应该是检查自己给出的上下文是否完整,而不是立刻判定AI不行。这有点像现实里带新人:你说得越清楚,他干活越靠谱;你没说清,然后骂他蠢,不是他的问题。
7. 从“问一句写一段”到“让AI替你打工”:攒一套自己的协作流程
7.1 建一个自己的提示词片段库
用了几个月AI编程之后,我最大的一个变化是开始攒自己的提示词库。现在每完成一个领域的任务,我都会把那些“产出过好结果”的提示词保存下来,分类整理。
我的提示词库大致分几类:
- 数据处理类:读CSV、清洗空值、转编码、按组汇总;
- 脚本工具类:批量重命名文件、定时任务、爬取简单页面;
- 代码解释类:把一段复杂代码逐行解释、给小白讲懂;
- 排错反馈类:报错贴回、要求先解释再改代码。
这些片段不是普通的网文模板,它们都经过我真实项目的锤炼,每一条都写过“吃过的亏”。比如我的数据处理提示词里默认会加一句“注意编码可能是GBK或UTF-8”,因为我在真实数据上被编码坑过。好的提示词是你个人经验的编码化结果,这才是真正属于自己的核心竞争力。
7.2 明确分工:哪些事适合AI,哪些事必须自己扛
AI不是万能的,有些事交给它纯属浪费时间。以下是我现在取舍的标准:
| AI擅长,放心交给它 | AI不擅长,自己扛 |
|---|---|
| 胶水代码、样板代码 | 业务规则判断与需求决策 |
| 正则表达式、文本解析 | 系统架构设计和模块划分 |
| 数据清洗和格式转换 | 安全与合规审查 |
| 写单元测试和测试用例 | 排查逻辑矛盾,比如状态管理 |
| 解释报错与生成修改建议 | 修复“涉及全局状态”的深层次问题 |
| 代码重构和简单翻译 | 高并发、强一致等复杂场景的优化 |
这条线会随着模型能力往前移,但“业务规则的负责人是你”这条线,永远不会变。
7.3 时代变了:核心竞争力从“怎么写”变成“验得对”
最后聊聊心态。我自己是从“一行一行敲代码”的年代走过来的,刚接触AI编程时有过一段很别扭的时期,总觉得让AI写代码是“作弊”。后来想通了:工具就是要让效率变高,重要的是交付的东西对不对,而不是谁敲的键盘。
现在我把更多时间花在“验收”上——看AI写的代码是否真的满足业务需求、性能是否可以接受、边界条件有没有遗漏。换句话说,我的核心竞争力从“能把代码写出来”变成了“能不能看出需求和代码之间的差距”。
这个能力怎么练?有一个很硬核的方法:拿到AI代码后,不要急着夸它,先尝试“打爆”它。给它喂脏数据、空数据、超大数据、带特殊符号的数据,看它在哪一步最先崩。这个过程一开始可能有点沮丧,但多练几次,你会发现你对一个系统的理解深度,比你自己写一遍还要强。
最后的个人体会
真要说这大半年用AI编程最大的收获,不是效率翻了几倍,而是它消除了一种“不会写就不敢动手”的恐惧。以前遇到没接触过的领域,我要先花几天查文档、看教程、搭环境,才有底气开工。现在我可以在几小时内把框架搭起来,再通过不断修正逐步推进。但我也清醒地知道,这种“无所畏惧”是基于一个前提的——我至少知道自己要什么,知道什么叫“做对了”。AI编程只是把你的“知道”快速变成现实,它不会替你产生那个“知道”。
所以,如果你也想从入门走到实战,我给的建议特别简单:找一件你身边真实的、很小的、重复到烦的事,把它用“输入-处理-输出”三句话写下来,打开一个AI编程工具,让它帮你做第一版。然后把这个过程重复二十次。到那个时候,你根本不需要再问任何人“AI编程怎么学”,因为你已经在路上了。