刚接触 AI 编程那阵子,我也有一段时间处于“瞎用”状态:对着对话框把需求一丢,AI 给出代码,我复制进项目,然后跑出各种奇怪报错,来回拉扯大半天。后来我发现,问题根本不在 AI 能力不够,而是我压根没把它当成一个“协作者”来用。同样是 ChatGPT,为什么有些人能一个小时完成一天的工作,有些人一个小时还在和报错搏斗?差别就在两件事上:会不会把需求说清楚,有没有把 AI 真正嵌进自己的工具链。这篇文章我就把这两件事拆开揉碎聊一遍,覆盖提示词工程、IDE 内 AI 助手、Agent 化工作流,以及从需求到交付的完整实战过程。适合刚入门 AI 编程的程序员,也适合想系统化提效、不想再“瞎用”的团队。
1. 为什么你的 AI 总在“一本正经地胡说八道”:先认清工具的边界
1.1 大模型的“幻觉”是概率计算的结果,不是 bug
很多人第一次被 AI 坑,都是被它“自信的语气”骗了。你问它一个 API 怎么调用,它能给你编出一个根本不存在的参数,还像模像样地带了示例代码。这不是它故意骗你,而是大模型的本质是“根据上文预测下一个最合理的词”,它并不像数据库那样精确存储知识,而是在生成“听起来合理的内容”。
我习惯这样理解:AI 像一个记忆力超强、表达力爆表的实习生。它看过海量文档,能言善辩,但当你问到一个它其实没记清楚的知识点时,它不会老老实实说“不知道”,而是会基于自己的语言能力把答案“圆”回来。所以你拿到的回答,本质上是一个“概率最高”的文本,而不是“经过验证的事实”。
这个认知是所有高效用法的地基。一旦接受了这个设定,你就不会再把 AI 的输出当成权威答案,而是当成“一个高水平的初稿”。初稿质量越高,你的工作量越小;但不管初稿多好,最终验证责任一定在你身上。把验证环节做扎实,比背一百条提示词技巧都重要。
1.2 程序员用 AI 最常见的三个误区
结合我带团队和日常交流时观察到的情况,程序员“瞎用” AI 一般逃不出这三种模式:
- 把 AI 当搜索引擎用。想查某个函数的精确用法、某个库的最新版本,直接问 AI。但大模型的训练数据有截止时间,它也不知道你项目里装的是哪个版本。查精确文档,应该去官方文档或本地源码,AI 更适合帮你理解概念,而不是代替文档。
- 一个 prompt 想要全部答案。上来就说“帮我写一个电商系统”,AI 回你一个几百行的代码框架,然后你会发现它既没有数据库表设计,又没有权限逻辑,根本没法落地。上下文窗口再大,也装不下一个完整的业务系统。
- 拿到代码不审查直接用。AI 生成的代码能跑通小样例,不代表它能扛住异常输入、并发场景和边界条件。太多人把“能跑”当成“能用”,最后坑的是自己和队友。
认清这三个误区之后,自然会得到两个结论:第一,你需要在“提问”这件事上花更多心思;第二,你需要在“验证”这件事上建立流程。后面的内容,就是围绕这两点展开。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 提示词工程:把需求说清楚的技术含量
2.1 上下文:给 AI 一张“完整的设计图纸”
很多人以为提示词工程就是背几个“咒语”,比如在开头加上“请你扮演一个资深 Python 工程师”。这些技巧有用,但真正决定回答质量的,是上下文是否完整。
所谓上下文,就是你在提问时提供的所有背景信息,包括:你要解决什么问题、使用场景是什么、技术栈是什么、有哪些约束条件、希望输出什么样格式的结果。你可以这样理解:给 AI 发需求,和给新来的同事派活是一样的。你说“把那个接口修一下”,同事一定一头雾水;你说“登录接口在用户密码错误时返回了 500,BFF 层日志里能看到具体报错,你去查一下异常堆栈,修好后写个单测”,同事就能直接开工。
具体到提示词里,一个合格的上下文至少应该包含五个部分:
- 角色定位:你希望 AI 以什么身份来回答(资深后端工程师、代码审查者、教学者)。
- 任务目标:一句话说清楚你要什么。
- 背景信息:项目类型、技术栈、已有代码结构、相关文件路径。
- 约束条件:性能要求、兼容性要求、不能依赖某个外部服务、代码风格规范。
- 输出格式:代码、Markdown 文档、表格、还是逐步解释。
这里对比一下低质量和高质量的 prompt。
低质量:
帮我写一个 Python 脚本,批量重命名文件。
高质量:
帮我写一个 Python 脚本。项目是 Windows 环境下的文件整理工具,已有依赖只有标准库。需求:将指定目录下所有以 “IMG_” 开头的 jpg 文件重命名为 “photo_001.jpg” 这种格式,序号不足三位补零。要求:递归处理子目录,文件名冲突自动追加后缀,同时输出一份操作日志。运行环境是 Python 3.10,请给出可以直接运行的完整代码。
同样的需求,后者的产出质量会高出一大截。原因很简单:AI 需要猜的事情越少,错的概率就越低。
2.2 角色与约束:从“帮我写个函数”到“按规范实现”
角色设定不只是“扮演专家”这种空话,而是为了让 AI 从对应的角度组织回答。比如同样一段代码,你让“资深安全工程师”审查,它会关注注入、越权、敏感信息泄露;你让“性能优化工程师”审查,它会关注循环遍历、内存分配、缓存策略。不同角色,看到的点完全不同。
除了角色,约束条件才是更硬的“规矩”。我看过太多人写 prompt 只提需求不提约束,然后 AI 给出了一个需要安装第三方库的方案,而你的项目恰恰不允许新增依赖。所以在 prompt 里明确写出“禁止使用 requests 库,只能用标准库 urllib”“不要使用全局变量”“所有函数必须有类型注解”这类硬性约束,能省掉后面大量的来回拉扯。
还有一个实用技巧:让 AI 自己列出“潜在风险和边界条件”。你可以在 prompt 末尾加一句“实现完代码后,用列表指出这段代码可能出现的异常情况,以及对应的处理建议”。这一招比我手动检查还靠谱,因为它强制 AI 在生成代码时就把健壮性考虑进去。
2.3 迭代式提问:把大任务拆成一连串小对话
我观察到一个新手很难改掉的习惯:想一步到位。希望 AI 一次性生成一个完整的 C++ 类、一个完整的 React 组件、一整条业务链路。结果就是 AI 给了一大坨代码,里面处处是你没要求过的假设,改了这里那里崩,整体完全失控。
正确的做法,是像带实习生一样,把任务拆成多个阶段,每个阶段单独对话:
- 先对齐方案:不急着写代码,先让 AI 给出实现思路和备选方案。
- 再确认设计:针对方案提出细节问题,比如数据结构怎么选、接口怎么设计。
- 然后分层实现:一次只让 AI 实现一个模块或一个函数。
- 最后整合测试:把各段代码拼起来,让 AI 写测试用例验证。
这样每个回合的对话都短而聚焦,AI 的输出质量会稳定很多,你也更容易在早期发现问题。很多所谓的“AI 编程高手”,其实不是提示词写得多花哨,而是他们懂得把复杂任务拆成一个一个清晰的小步骤,再一步步推进。
2.4 几条可以直接抄的提示词模板
聊完原理,给几条我日常高频使用的模板,可以直接复制改着用。
| 场景 | 提示词模板 |
|---|---|
| 需求梳理 | 我现在要做【需求描述】。我的技术栈是【技术栈】。请先不要写代码,向我提出你理解这个需求所必须知道的问题,然后我把答案给你后,你再给出完整方案。 |
| 代码生成 | 请用【语言】实现【功能描述】。约束:1.【约束一】2.【约束二】。输入是【格式】,输出是【格式】。请给出完整可运行的代码,并说明核心逻辑。 |
| 代码审查 | 请以资深【领域】工程师的身份审查下面这段代码。重点关注【安全性/性能/可读性/边界条件】。请列出发现的问题、问题严重程度、以及修改建议。代码:【粘贴代码】 |
| 补写注释 | 请为下面这段代码补充中文注释。要求注释解释“为什么”而不是“是什么”,尤其标注出代码中的隐含假设和易错点。代码:【粘贴代码】 |
| 生成单测 | 请为下面这个【函数/类】编写单元测试。请覆盖正常路径、异常路径、边界条件。使用【测试框架】。代码:【粘贴代码】 |
这些模板看起来简单,但每一条都是在“减少 AI 猜测空间”这个原则下设计的。建议你先用它们跑通几条真实需求,再根据自己的项目特点,演化出自己的模板。
3. 工具链拼图:从聊天框到 IDE 里的 AI 编程助手
3.1 对话式 AI 与 IDE 内助手的定位差异
很多人的另一个“瞎用”是:只在一个地方用 AI。要么只开网页版聊天框,写代码全靠复制粘贴;要么只装 IDE 插件,遇到复杂问题就觉得 AI 很蠢。实际上,这两类工具的分工完全不同,配合起来才是完整的工具链。
- 对话式 AI(网页端/独立客户端):适合做需求梳理、方案设计、概念学习、代码解释。它上下文窗口大,可以承载你贴过来的大量背景和需求描述,适合“讨论”和“规划”。
- IDE 内 AI 助手(Copilot、通义灵码、Codeium 等):适合做代码补全、行内生成、选中重构、单文件解释。它直接感知你的代码上下文,可以把你的函数名、变量名、已有代码风格都利用起来,生成更贴合项目的代码。
简单说:对话式 AI 管“想清楚”,IDE 助手管“写顺手”。你完全可以在对话式 AI 里把方案敲定,然后回到 IDE,让 AI 助手按你敲定的方案快速补全实现。这是最舒服的姿势。
3.2 代码补全、代码生成、代码解释三类场景怎么做
在 IDE 里用 AI 助手,也不是随便敲几句就能发挥全部价值的。要按场景选择合适的操作方式:
- 代码补全:关键在于给 AI 足够的“启动信息”。不要把光标悬在空文件里等它猜,而要先把函数签名、docstring、参数注释写清楚。比如你写下
def calculate_discount(price: float, user_level: int):,下面再补一行 docstring “根据用户等级计算折扣,普卡 9 折,银卡 8 折,金卡 7 折。”,AI 的补全质量会远超它盲写的水平。 - 代码生成:选中一段代码或直接在空行位置,用自然语言描述“在下面生成一个 xxx 模块,完成 xxx 功能,使用 xxx 方式”。IDE 助手会结合你当前打开的文件内容来生成,所以尽量保持当前文件结构清晰,它才能生成风格一致的代码。
- 代码解释:如果你接手一段看不懂的老代码,选中那段代码,让 AI“逐行解释这段代码的作用,并指出哪些地方有潜在问题”。这个操作我几乎每天用,接手历史项目时的效率提升极其明显。
3.3 Agent 化工具链:把“问一句”升级成“跑一遍”
如果说补全和生成是“单车模式”,那 Agent 就是“自动驾驶模式”。AI Agent 类的工具(比如各家大厂推出的编程 Agent,以及 IDE 里的 Agent 插件)不只是“回答你一个问题”,而是能够自己读项目代码、定位相关文件、修改多处代码、运行测试、查看报错再迭代修复,最后给你一个经过验证的改动结果。
我第一次用这类工具时最大的感受是:它把我的“验证环节”也包了大半。它不只是“给一段代码”,而是真的会去检查这段代码在你的项目里能不能通过编译、能不能跑过测试。
但这里要泼一盆冷水:Agent 仍然需要人盯着。我见过 Agent 为了修一个 bug,直接删掉了一个看起来“没用”但实际背地里被反射调用的方法;也见过 Agent 跑测试时只跑了自己新增的用例,没有跑全量回归。所以用 Agent 的正确姿势是:给它一个明确、有边界的任务,然后让它按照“定位问题 -> 修改代码 -> 运行测试 -> 报告结果”的流程来执行,最后你还是要亲自做代码 review。
3.4 工具链集成案例:给 Keil 配置外部的 GCC 工具链
工具链并不只是“AI 工具”本身,还包括把你日常的开发环境打通。前两天群里有个朋友问了一个事:他下载了 Qt 6.12,安装完后构建项目时无法配置编译工具链,但安装目录里明明有对应的 MSVC 2022 64 位工具链。这种问题我遇到过很多次,本质上就是 IDE 没有自动检测到工具链路径,手动指定一下 VC_INSTALL_DIR 或重新安装 VS Build Tools 组件就能解决。
类似的情况在嵌入式开发里更常见。很多人拿 AI 生成了 C/C++ 代码,结果在 Keil 里编译不过,就想当然觉得“AI 不行”,其实问题是 Keil 自带的 ARMCC 编译器太老,根本不支持 C++20/23 特性,而 AI 生成的代码用了现代语法。
解决办法是给 Keil 配置外部 GCC 工具链,让它能完整支持 C++20/23。大致思路是:
- 下载并安装合适的 ARM GCC 工具链(比如 ARM GNU Toolchain)。
- 把工具链的 bin 目录加入系统 PATH 环境变量。
- 在 Keil 的 Options for Target 里,把编译器路径指定为外部 GCC,并配置好对应的 Include 路径和宏定义。
- 重新编译,逐步修正和 Keil 默认配置不兼容的地方。
这个过程本身就是一次“人负责打通环境、AI 负责生成逻辑”的典型分工。AI 再能写代码,如果你的工具链连现代语法都解析不了,产出也没法落地。所以我在做技术方案时,一定会先把“AI 生成的东西需要在什么环境里跑起来”这个问题想清楚。
4. 完整实战:从需求到交付,AI 参与一个功能的完整生命周期
4.1 需求拆解与方案设计
光说方法论没有感觉,下面我带一个真实小需求完整走一遍。需求很简单:写一个 Python 工具,批量重命名一个目录下的所有图片文件,文件名按规则统一格式。
我打开对话式 AI,第一轮不急着要代码,先做需求梳理:
我要做一个批量重命名工具。场景:摄影爱好者会把相机导出的照片按“IMG_20240101_001.jpg”这种方式命名,我希望改成“20240101_001.jpg”这种更干净的格式,同时保留原始拍摄信息。技术栈:Python 3.10,最好只用标准库。请先别写代码,先帮我把需求边界理清楚:需要考虑哪些情况、有没有我没想到的问题。
AI 很快就给我列了一批问题:子目录要不要递归处理?重命名后如果文件名冲突怎么处理?要不要同时处理 RAW 格式?重命名后要不要更新文件的修改时间?要不要按拍摄时间而不是文件名里的时间重命名?
这些问题里有几个确实是我没细想的,尤其是“按拍摄时间还是按文件名里的时间”,这直接影响实现方案。经过这轮对话,需求从一句话膨胀成了一个小规格说明书:递归处理、自动处理冲突、保留 EXIF 信息、先 dry-run 输出预览再实际执行。你看,这就是“先方案后代码”带来的价值——它帮你把脑中的模糊想法,逼成了一个可执行的任务。
4.2 让 AI 生成核心代码
需求确认后,我进入第二轮对话,把确认好的规格一次性交给 AI:
需求确认如下:1. 递归遍历整个目录树;2. 只处理 jpg、jpeg、png、raw 后缀文件;3. 新文件名格式为 YYYYMMDD_HHMMSS_序号.ext,其中时间戳从 EXIF 的拍摄时间提取;4. 如果 EXIF 里没有拍摄时间,则跳过,并把该文件写入 warning 列表;5. 重命名冲突时自动在文件名末尾追加 _1、_2;6. 默认先执行 dry-run,只打印将要执行的操作,加 --apply 参数后真正执行。请用 Python 标准库实现,要求函数拆分清晰,每个函数加 docstring,主入口用 argparse 实现命令行参数解析。
AI 给出了一个约 150 行的脚本,核心逻辑基本准确。但我没有直接跑,而是先做了一件事:让它解释一个关键决策。
为什么要用 Piexif 之外的纯标准库实现 EXIF 时间读取?如果标准库没法可靠读取 EXIF,我的替代方案是什么?
这个追问让 AI 坦承:纯标准库读取 EXIF 其实需要手写二进制解析,可靠性不高,建议用 piexif 库。这就是典型的“AI 首次回答为了满足你的约束、但牺牲了可靠性”的情况。如果你不追问,它可能就给你一个表面满足“只用标准库”,实际解析逻辑脆弱的方案。
最终我调整了方案:允许使用 piexif 依赖,把约束从“只用标准库”改成“只增加必要依赖”。这段经历我想特别强调一下——AI 给你的第一版答案,只是讨论的起点,不是终点。多问一句“为什么”“有没有更好的方案”,往往会触发它给出明显更好的选项。
4.3 代码审查与调试:AI 也能当 reviewer
代码生成完,接下来是很多人容易跳过的一步:代码审查。我以前的习惯是自己先跑一遍再修,后来发现先让 AI 自己审一遍,能省掉很多低级错误的来回。
我把代码粘贴给 AI,附上指令:
请以资深 Python 工程师的身份审查这段代码,重点关注:1. 文件异常处理是否完整;2. 文件名冲突逻辑是否在并发场景下有问题;3. 是否有内存方面的问题(比如一次读取超大文件);4. 代码可读性和可维护性。请列出每个问题的严重程度和具体修改建议。
AI 提出了三个有价值的问题:EXIF 读取失败时可能抛异常中断整个程序,建议捕获并跳过;重命名可能跨越文件系统边界导致异常;timezone 信息在格式化时间时会丢失。前两个是真实存在的隐患,第三个我也认同。这些点如果不经过审查,等跑起来再发现,又得耗费额外时间。
审查通过后,我再让它生成一组基于 pytest 的单元测试,覆盖正常路径、无 EXIF 文件、文件名冲突和目录不存在四种场景。有了这层保障,这个工具才算真正达到“可交付”状态。整个流程跑下来,我从需求确认到拿到可用代码,只花了不到一小时。
5. 从“能跑”到“能上线”:程序员提效的最后一公里
5.1 哪些代码不要交给 AI
聊了这么多提效方法,也得讲讲边界。代码安全和核心业务逻辑,这两类代码我强烈不建议直接交给 AI 闭眼生成。
安全敏感代码,比如认证、鉴权、支付回调、加密解密相关逻辑,AI 可以帮你打草稿、帮你审查,但最终实现必须由有经验的人逐行确认。原因很简单:安全问题的漏洞往往不在“功能路径”上,而在“异常路径”上,比如并发下的一次校验绕过、一个边缘输入导致的内存问题,这些恰恰是 AI 概率生成方式最容易出错的地方。
核心业务逻辑同理。如果一段代码直接决定你的核心收益,比如交易计费、库存扣减、推荐排序,我建议人肉把关每一个分支。AI 适合处理的是“有标准答案”的工程问题,而真正复杂的是业务规则之间互相纠缠的场景。
另外还有一点:永远不要让 AI 生成你完全看不懂的代码,然后直接上线。如果你自己都无法解释某段代码的每一行在做什么,那你就没法调试、没法维护、没法向别人负责。让 AI 生成代码时,要求它附带逐步解释,把你觉得模糊的部分问清楚,直到每一行你都能看懂。
5.2 建立自己的提示词库与工作流模板
高效使用 AI,不是靠临场发挥,而是靠沉淀。我在本地笔记里维护了一个“AI 工作流”目录,里面按照场景存放了经过实战验证的提示词模板、代码片段和检查清单。
比如我沉淀了“接手旧项目检查清单”,内容包括:先让 AI 帮你梳理项目整体结构和核心模块关系图(文字版);让 AI 解释每个核心模块的入口函数;让 AI 标记出项目里的 TODO、FIXME、和潜在 bug 点。另一条是“写周报辅助模板”,我把这周做的事描述给 AI,让它帮我整理成给领导看的结构化周报,省下不少时间。
我建议你也从今天开始,准备一个这样的文件:
- 标题:给模板起一个一眼能认出来的名字。
- 适用场景:什么情况下用这个模板。
- 模板正文:把变量用【】标出来,复制时替换。
- 使用效果:记录一次实际使用效果,方便以后优化。
坚持一个月,你会积累出十几条真正好用的“私家提示词”,到时候你会发现,AI 提效的真正壁垒不是模型本身,而是你对业务、对工具、对沟通的梳理能力。
5.3 让 AI 生成注释与文档:维护阶段的提效
最后聊一个很多人忽略但极其常见的场景:给旧代码补注释。网上有个梗叫“公司要求前程序员回公司写注释”,虽然搞笑,但确实很多团队面临历史代码没人维护、注释缺失的困境。这种事完全可以让 AI 来干。
方法很简单:选中一段函数,让 AI“为这段代码补充中文注释,要求解释为什么这样做,以及隐含的业务假设”。AI 能根据函数名、变量名、上下文和调用关系,推断出相当一部分业务意图,比人肉逐行看效率高一个数量级。我之前处理过一个老项目里的几个核心模块,以前光是梳理逻辑就得花两三天,现在让 AI 先通读梳理、我再校对修正,一天不到就能给出完整的模块说明文档。
需要注意的一点是:AI 对业务意图的推断只是猜测,注释里类似“这里疑似在处理订单超时关闭”这种推测性描述,一定要标注出来,不要直接冒充事实写进文档。我的做法是:让 AI 把所有不确定的地方主动标上【待确认】,然后我拿着清单去问懂业务的老同事,效率比从头看代码高得多。
我在实际使用中的体会是,AI 提效最明显的时间点,往往不是“写新代码”的时候,而是“理解旧代码”的时候。从提示词到工具链,这些方法和工具单独看都不复杂,但它们加在一起,会把一个程序员的日常节奏从“反复试错”变成“快速验证”。别再像以前那样把需求一丢就等着抄答案了——把需求讲清楚,把边界画出来,把验证流程接到工具链里,AI 真的能成为你手里最称手的那个协作者。
