1. 为什么我不再把 AI 当“代码生成器”,而是当“结对搭档”
我平时写代码,AI 已经深度嵌进了日常工作流。不是那种“帮我写个贪吃蛇”的玩具用法,而是真正在业务代码、线上排查、重构评审这些场景里当主力辅助。踩过的坑不少,也总结出了一套相对稳定的用法。这篇文章就把我日常最常用的 5 个场景拆开讲,每个场景配可直接复制的 Prompt,顺便把背后的思路和注意事项说清楚。
先说一个核心认知:AI 写代码的质量,八成取决于你怎么问,两成取决于模型本身。很多人抱怨“AI 写的代码不能用”,大概率是 Prompt 太模糊。比如“帮我写个登录接口”,AI 只能给你一个最通用的模板,跟你的项目结构、鉴权方式、错误码规范完全不搭。但如果你把上下文、约束、输出格式都交代清楚,它能给出的东西直接就能进代码库。
这篇文章适合几类人:刚接触 AI 编程辅助想系统了解的、已经在用但觉得效果不稳定的、以及想把这套方法带到团队里做规范的。下面每个场景我都会给出完整的 Prompt 模板,你可以直接复制改参数就用。
2. 场景一:从零写一个新模块——把需求拆到 AI 能“接得住”
2.1 为什么直接说“帮我写个 XX”大概率会翻车
新手最容易犯的错,就是把 AI 当成一个“需求翻译器”,扔一句话就等结果。我早期也这样,后来发现问题的根源在于:AI 没有你项目的上下文。它不知道你用的是哪套框架、数据库字段怎么命名、异常怎么抛、日志怎么打。你给的信息越少,它就越倾向于输出“教科书式”的通用代码,而这种代码往往跟你的项目格格不入。
我的做法是:在让 AI 写代码之前,先花两分钟把“约束条件”列清楚。这就像你给一个新同事派活,你得告诉他项目用什么技术栈、代码规范是什么、这个模块跟哪些已有模块交互。信息给到位,产出质量立刻上一个台阶。
2.2 我常用的“新模块生成”Prompt 模板
下面这个模板是我反复打磨过的,适用于后端接口、工具类、数据处理脚本等场景。核心思路是:角色 + 技术栈 + 功能描述 + 约束条件 + 输出格式。
你是一名资深后端工程师,熟悉 Python 3.11 和 FastAPI 框架。 【任务】 帮我实现一个用户积分查询接口。 【技术栈】 - 框架:FastAPI - 数据库:PostgreSQL,使用 SQLAlchemy 2.0 ORM - 缓存:Redis,用于热点数据缓存 - 鉴权:JWT,用户 ID 从 token 中解析 【功能要求】 1. 接口路径:GET /api/v1/user/points 2. 入参:无(用户 ID 从 JWT 中获取) 3. 出参:{ "user_id": int, "points": int, "level": str, "updated_at": str } 4. 积分等级规则:0-99 为 bronze,100-499 为 silver,500 以上为 gold 5. 缓存策略:先查 Redis,命中则返回;未命中查数据库,写入 Redis,TTL 300 秒 【约束条件】 - 所有数据库操作使用异步 session - 异常统一抛出 HTTPException,错误码遵循项目规范 - 日志使用 structlog,记录关键路径 - 不要写测试代码,只写业务逻辑 【输出格式】 - 先给出完整的路由函数代码 - 再给出对应的 Pydantic 响应模型 - 最后用注释说明每个关键步骤的意图这个模板的关键在于“约束条件”那一段。很多人会忽略它,但恰恰是这段决定了代码能不能直接用。比如“异步 session”这一条,如果你不说,AI 很可能给你同步的写法,你还得手动改。
2.3 拿到代码后我必做的三件事
AI 给出代码只是第一步,直接复制粘贴进项目是危险的。我通常会做三件事:
第一,通读一遍逻辑,重点看边界条件。AI 经常在“积分等级规则”这种地方写错边界,比如 100 到底算 bronze 还是 silver,它可能理解反了。第二,检查依赖导入,AI 有时会引入你项目里根本没装的库。第三,跑一遍类型检查,Python 项目我会跑 mypy,TypeScript 项目跑 tsc,能提前发现不少问题。
注意:AI 生成的代码里,异常处理往往是最薄弱的一环。它倾向于用最通用的
except Exception,这在生产环境是大忌。拿到代码后,务必把异常处理改成项目统一的错误码体系。
3. 场景二:排查线上 Bug——把日志和堆栈喂给 AI 的正确姿势
3.1 排查 Bug 时 AI 最怕你只给一句“报错了”
线上出问题的时候,人容易急,直接把一句“接口 500 了,帮我看看”扔给 AI。这种问法基本没用,因为 AI 没有任何线索。排查类问题的核心是:你给的信息越具体,AI 的推理链越短,定位越准。
我一般会准备三样东西:完整的错误堆栈、相关的代码片段、以及触发条件(什么操作、什么参数、什么时间点)。这三样凑齐,AI 的排查效率比我翻日志还快。
3.2 我的“Bug 排查”Prompt 结构
你是一名擅长排查线上问题的资深工程师。 【现象】 调用 /api/v1/order/create 接口时,约 5% 的请求返回 500。 错误信息:KeyError: 'user_level' 【完整堆栈】 (粘贴完整 traceback) 【相关代码】 (粘贴出错的函数以及上下游调用链,大约 50-100 行) 【触发条件】 - 只在用户等级为 None 时出现 - 新注册用户首次下单必现 - 老用户复现概率低 【已排查项】 - 数据库 user_level 字段确实存在,但部分老数据为 NULL - 代码里没有对 None 做兜底 【请帮我】 1. 定位根因 2. 给出修复方案,优先考虑兼容历史数据 3. 指出这类问题在代码里还有哪些潜在位置这个模板里,“已排查项”是我后来加上的,效果非常好。它能避免 AI 重复你已经做过的工作,把精力集中在真正的盲区上。
3.3 排查类 Prompt 的三个实战技巧
第一个技巧:堆栈要完整,不要截断。很多人只贴最后几行,但真正的根因往往在中间某层调用里。第二个技巧:代码片段要给上下文,不要只贴出错那一行,上下游的调用关系很重要。第三个技巧:明确告诉 AI 你要什么,是要根因分析、修复方案,还是预防建议,说清楚它才不会跑偏。
我实测下来,用这套结构问排查问题,AI 给出的根因判断准确率能到七八成,剩下两三成需要我自己结合业务判断。但即便它判断错了,它列出的排查方向也常常能给我启发。
提示:涉及敏感数据的日志,粘贴给 AI 之前记得脱敏。用户 ID、手机号、订单号这些,用占位符替换掉。这不是不信任工具,而是基本的职业习惯。
4. 场景三:代码重构与评审——让 AI 当那个“挑刺的同事”
4.1 重构场景下 AI 的真正价值在哪
很多人用 AI 重构,就是让它“把这段代码优化一下”。但“优化”是个很模糊的词,AI 不知道你关心的是性能、可读性还是可维护性。我的经验是:重构类任务,一定要明确优化目标。
比如一段查询代码,你可以让 AI 从“减少数据库查询次数”的角度优化,也可以从“提升可读性”的角度优化,两个方向的产出完全不同。目标越具体,产出越有价值。
4.2 代码评审 Prompt:让 AI 扮演严格的 Reviewer
你是一名严格的代码评审员,有 10 年 Python 后端经验。 【待评审代码】 (粘贴代码,建议控制在 200 行以内) 【项目背景】 - 这是一个订单状态流转的核心模块 - 日均调用量约 50 万次 - 对性能敏感,要求 P99 延迟低于 50ms 【评审重点】 1. 性能问题:有没有不必要的循环、重复查询、内存拷贝 2. 并发安全:多线程/协程环境下有没有竞态条件 3. 边界处理:空值、超长输入、异常路径是否覆盖 4. 可维护性:命名、职责划分、注释是否到位 【输出要求】 - 按严重程度分级:致命 / 严重 / 建议 - 每条问题给出具体行号和修改建议 - 不要泛泛而谈,要指出具体代码位置这个 Prompt 的精髓在“评审重点”和“输出要求”。分级输出能帮你快速抓住关键问题,具体行号则让你改起来有的放矢。
4.3 重构时我踩过的坑
有一次我让 AI 重构一个数据处理函数,它把原本 30 行的代码压缩到了 12 行,用了各种列表推导和内置函数。看起来很美,但可读性直线下降,团队里其他人 review 的时候一脸懵。后来我学乖了,重构 Prompt 里会加一句:“优先保证可读性,不要为了简洁牺牲清晰度”。
还有一次,AI 重构时悄悄改了一个边界条件,把>=改成了>,导致一个边缘 case 出错。这提醒我:AI 重构后的代码,diff 一定要逐行看,尤其是条件判断和循环边界。
5. 场景四:写测试用例——AI 最擅长但也最容易偷懒的地方
5.1 为什么测试用例特别适合交给 AI
写测试是个重复性很高、但又必须覆盖全面的活。AI 在这件事上有天然优势:它能快速枚举各种边界条件,而且不会像人一样因为“觉得这个 case 不可能发生”而漏掉。我现在的习惯是:业务代码自己写,测试用例让 AI 先出一版,我再补充。
但 AI 写测试有个通病:它倾向于只写 happy path。正常流程的用例写得很全,异常路径、边界值、并发场景经常一笔带过。所以 Prompt 里必须明确要求覆盖这些。
5.2 测试用例生成 Prompt 模板
你是一名测试工程师,擅长用 pytest 编写高质量单元测试。 【被测函数】 (粘贴函数代码) 【函数说明】 - 输入:用户 ID(int)、时间范围(start_date, end_date) - 输出:该时间段内的订单列表 - 依赖:数据库查询、Redis 缓存 【测试要求】 1. 覆盖正常路径:有订单、无订单 2. 覆盖边界值:时间范围为空、起止时间相同、跨年 3. 覆盖异常路径:数据库超时、缓存穿透、非法用户 ID 4. 使用 pytest + unittest.mock,mock 掉数据库和 Redis 5. 每个用例要有清晰的 docstring 说明测试意图 【输出格式】 - 按测试类组织,每个类对应一类场景 - 使用 parametrize 处理多组输入5.3 测试用例的验收标准
AI 给出的测试代码,我会重点检查三件事:断言是否有效(有些测试只断言“不报错”,等于没测)、mock 是否合理(mock 太宽会导致测试失去意义)、用例是否独立(用例之间有依赖是测试的大忌)。
我个人的经验是,AI 生成的测试用例大概能覆盖 60%-70% 的场景,剩下的 30% 需要我根据业务理解补充。但即便这样,也省了我大量时间。尤其是 parametrize 那部分,AI 写得比我规范。
注意:AI 有时会写出“永远通过”的测试,比如断言一个必然为真的条件。拿到测试代码后,建议故意改坏被测函数,看测试能不能挂掉。挂不掉,说明测试是假的。
6. 场景五:技术方案调研——让 AI 帮你快速摸清一个陌生领域
6.1 调研场景下 AI 的定位是“加速器”不是“决策者”
遇到不熟悉的技术选型,比如“消息队列该选哪个”“这个场景用哪种缓存策略”,我现在的第一反应是让 AI 先给我梳理一遍。但要注意:AI 给的调研结论不能直接当决策依据,它可能信息滞后,也可能一本正经地胡说。它的价值在于帮你快速建立认知框架,知道该关注哪些维度,然后你再去查官方文档验证。
6.2 技术调研 Prompt 模板
你是一名架构师,帮我做一次技术选型调研。 【场景】 - 日均消息量约 200 万条 - 要求消息不丢、支持顺序消费 - 团队现有技术栈:Java + Spring Boot - 运维能力:中等,没有专职中间件团队 【候选方案】 - Kafka - RocketMQ - RabbitMQ 【请从以下维度对比】 1. 吞吐量与延迟 2. 消息可靠性保证机制 3. 顺序消费的实现难度 4. 运维复杂度与社区活跃度 5. 与 Spring Boot 的集成成本 【输出要求】 - 用表格对比 - 每个维度给出明确结论和理由 - 最后给出推荐方案,并说明在什么情况下推荐会改变这个模板里,“在什么情况下推荐会改变”这一句很关键。它能逼着 AI 给出条件化的结论,而不是一个武断的答案。技术选型本来就没有银弹,条件化结论才有参考价值。
6.3 调研结论的验证方法
AI 给的调研结果,我会做两件事验证:查官方文档确认关键数据(比如吞吐量、延迟),搜社区讨论看实际使用者的反馈。AI 说的“Kafka 单机吞吐百万级”这种数字,往往是最理想情况下的理论值,实际部署要打不少折扣。
另外,AI 对新兴技术的了解可能滞后。比如某个框架最近出了重大更新,AI 可能还在按老版本回答。所以调研类问题,时效性强的部分一定要自己核实。
7. 让 AI 真正好用的几个底层习惯
7.1 Prompt 要“可复用”,不要每次现编
我见过很多人每次用 AI 都是临时想怎么说,效率很低。我的做法是:把高频场景的 Prompt 存成模板,用的时候改参数就行。比如新模块生成、Bug 排查、代码评审,这三个模板我存在笔记里,随时调用。这样不仅快,而且质量稳定。
模板化的另一个好处是:你可以持续迭代。每次发现 AI 输出不理想,就回头改模板,加约束条件。用久了,你的模板会越来越精准。
7.2 上下文要给够,但不要给太多
这是个平衡问题。给太少,AI 瞎猜;给太多,它抓不住重点。我的经验是:代码片段控制在 100-200 行,日志控制在关键部分,需求描述控制在 5 条以内。超过这个量,AI 的注意力会被稀释,反而容易漏掉关键信息。
如果确实需要给大量上下文,我会分步来:先让 AI 理解整体结构,再针对具体问题深入。不要一次性把所有东西塞进去。
7.3 永远保持“验证者”心态
这是最重要的一条。AI 是个能力很强但会犯错的搭档,它给的每一行代码、每一个结论,你都要有验证的意识。我见过太多人因为“AI 说的”就放松了警惕,结果引入 bug 或者做出错误决策。
具体到操作上:代码要跑测试,结论要查文档,方案要结合业务判断。AI 负责提速,你负责把关。这个分工不能乱。
7.4 常见问题速查表
| 问题现象 | 可能原因 | 解决思路 |
|---|---|---|
| AI 生成的代码跑不起来 | 依赖缺失或版本不匹配 | 检查 import,确认项目依赖版本 |
| 代码逻辑跟项目规范不符 | Prompt 里没交代规范 | 补充技术栈、命名规范、错误码体系 |
| 排查 Bug 时 AI 答非所问 | 信息给得太少或太杂 | 按“现象+堆栈+代码+触发条件”结构重问 |
| 重构后引入新 Bug | AI 改了边界条件 | 逐行 review diff,重点看条件判断 |
| 测试用例覆盖不全 | Prompt 没要求异常路径 | 明确要求覆盖边界值和异常场景 |
| 调研结论不准确 | AI 信息滞后 | 查官方文档和社区讨论交叉验证 |
这张表是我从实际踩坑中总结的,基本覆盖了日常用 AI 写代码时八成以上的问题。遇到卡壳的时候对照着看,能省不少时间。
8. 我个人的一点使用体会
用 AI 辅助写代码这两年,最大的感受是:它改变的不是“写代码”这件事本身,而是“思考代码”的方式。以前遇到问题,我得自己从头捋逻辑;现在我会先让 AI 给几个方向,然后我判断哪个方向对。这个过程里,我的角色从“执行者”更多转向了“决策者”。
但有个前提:你得有判断力。AI 给的东西对不对,你得看得出来。所以基础功不能丢,该学的原理还得学,该踩的坑还得踩。AI 是放大器,它放大你的能力,也放大你的短板。
最后分享一个小习惯:我会定期把 AI 给出的好代码和好方案整理到一个笔记里,标注当时用的 Prompt。时间长了,这就成了一个私人知识库。下次遇到类似问题,直接翻笔记,比重新问 AI 还快。这个习惯坚持了半年,我的 Prompt 模板库已经有三十多个了,覆盖了日常工作的绝大部分场景。