
你每天让AI帮你写代码但用AI写代码和用AI放大你的编码能力完全是两码事。前者的终点是生成一段能跑的语法块后者要解决的是AI如何理解你所在系统的约束、为什么它在重构老模块时比新写功能更危险、怎样让它生成的测试不是绿色垃圾。这是《生成式人工智能与超级增强的编码》系列的第二篇。上一篇聊了基本配置、补全习惯和先让人看懂、再让AI写的入门路线这一篇直接进入实战现场——日常开发、历史重构、测试和审查这些环节里AI到底怎么用才算得上超级增强。我按自己在一线团队里的实操经验拆开讲不聊理论不讲厂商宣传只说踩过的坑、验证过的方法以及那些让效率真正翻倍的细节。1. 从被动补全到主动设计AI助手定位的三次转变很多人对AI编码助手的理解还停留在打字加速器我输入一半它补一半我按Tab接受。这个定位没有错但它只发挥了生成式人工智能最浅层的能力。真正开始感觉到超级增强是在AI助手的工作方式发生三次转变之后。1.1 第一次转变它不再等你的回车而是先给你一个可讨论的方案早期我使用补全工具的习惯是起个头看它能接住多少。接得住就用接不住就自己写。这本质上还是我在主导代码流向AI只是个局部展开器。直到我开始尝试一种新交互描述一个完整的问题域让它先出一个整体方案我再逐段审问它。举个例子我需要给内部的一个消息推送模块增加延迟重试机制。以前的做法是打开某个接口文件把重试逻辑一段段写进去。现在我会先把模块的背景写清楚目前推送系统使用同步调用第三方接口超时时间为3秒失败后没有补偿要求新增最多3次重试退避策略需要可配置。然后让AI先给出设计方案包括状态字段怎么加、重试由谁来触发、重试任务是否需要持久化。它给出的第一版方案确实有参考价值在推送记录表上增加 retry_count 和 next_retry_time 两个字段由定时任务扫描而不是在调用线程内 sleep。这个思路直接影响了下游设计——如果让我从空白开始写大概率会做成同步阻塞重试那在高峰时段会很危险。AI的这一次主动设计实际上是在我还没把问题完整说出来之前先给了我一版需要判断的求解路径。1.2 第二次转变从单文件操作走向跨文件影响判断本地补全和项目级理解之间的差距是很多人觉得AI华而不实的分水岭。当你让AI修改一个核心接口的签名时它能感知到调用方需要同步调整吗当你在工具类里新增一个带默认值的参数时它能主动排查有没有地方因为传参顺序出问题吗我在实际使用中体会到目前市面上的主流AI代码助手对单个文件内上下文的把握已经相当不错但对跨文件全局影响的把握仍然需要人先画好边界。我常用的做法是明确告诉AI这个函数被以下三个模块调用我需要你列出所有调用点并逐一标注会影响什么。它给出的清单不总是完整的但可以当作索引去核对。这个阶段AI最大的价值不是替我做迁移而是帮我把需要迁移的范围从凭记忆猜测变成可检索、可对照的排查清单。1.3 第三次转变AI的知识覆盖面替代不了你对变更动机的掌握当前AI编码工具的底层是语言模型它见过海量公开代码所以它知道一个订单系统通常会有什么表一个权限校验一般放在哪里。这是它的知识优势也是它的陷阱——它倾向于给你一个世界平均水平的答案而你所在的系统往往是平均水平上的局部特例。有一次我需要给一批历史接口补充操作日志。AI自动生成的方案非常标准中间件模式、注解标记、切面统一拦截。但问题是这套系统里有一部分接口经过了一个老旧的网关转发入参对象在转发层被改写过日志切面只能拿到改写后的对象拿不到原始参数。如果按AI的方案直接上线日志记录会是残缺的。这个问题只有熟悉业务脉络的人才会知道AI的知识里没有这个信息。所以我越来越倾向于把AI定位成拥有广泛经验但不懂我们系统的实习生它能快速给出候选方案但方案能不能落地取决于你是否给它足够的业务约束。这三重转变合在一起才是超级增强的基本盘人的决策权上升AI的产出效率提升两者缺一不可。2. 提示与上下文让AI进入业务现场而不是停留在语法层我见过很多人抱怨AI生成的代码看起来对跑起来错。大多数问题不出在模型能力而出在提示信息太稀薄。你只给它一个文件名和一个动词它只能回你一堆正确的废话。2.1 为什么帮我写个订单导出功能这类需求会让AI翻车帮我写个订单导出功能这句话信息量约等于零。订单指哪些订单按什么状态过滤导出格式是CSV还是Excel数据量是几万行还是几百万行导出操作的入口是同步请求还是后台任务要不要考虑大数据量下的内存溢出这些约束缺失时AI会自己脑补一套最经典的方案而这个方案往往和你的真实场景不匹配。比如它可能会默认从数据库一次性查出所有满足条件的订单再写入文件流。听起来没毛病但当你一个月有千万级订单、筛选条件跨了三个表、数据库连接池只有二十个连接时这个方案分分钟把线上服务拖垮。AI没有错错在你没告诉它这个查询走不了索引、导出必须走异步任务、每秒最多处理两千条。2.2 我维护的项目事实清单长什么样为了解决这个问题我开始为每个核心模块维护一份项目事实清单并在需要AI介入时先把清单喂给它。这份清单不追求完整只记录那些外部人不可能从代码里直接推断的事实。我的清单一般包含以下内容字段示例模块名称订单导出服务核心职责按条件查询订单并生成Excel上传到对象存储后通知用户数据量基线单次导出最多50万行超过则拆文件已知技术约束订单表按天分表跨月查询需要合并多个分表结果关键依赖依赖外部商品中心接口该接口QPS上限500历史坑位金额字段在旧数据中有String类型导出前必须统一转Decimal这些信息一次性给到AI它生成的方案精度会明显提升。比如在上述约束下AI不会再傻乎乎地建议直接SQL join商品表而会主动考虑批量调用商品中心接口并做本地缓存。2.3 把提示封装成团队内的共享模板个人经验可以靠自觉团队经验必须靠模板。我们在内部把事实清单 任务描述 输出要求整理成了固定格式任何人在让AI动手前都必须按模板填写。模板长下面这样背景与目标用两三句话说清这个任务的业务价值。现状与约束列出数据规模、性能指标、已有依赖、不能动的部分。任务输入输出给出确切的输入样例和期望的输出格式。验收标准写明怎样算完成比如单测覆盖新增逻辑导出耗时小于30秒不改变对外接口签名。这样做的好处不只是提升AI生成质量更让开发者自己在写提示的过程中把需求重新梳理了一遍。很多需求在写给AI的时候自己就发现矛盾了这比写完代码再返工划算得多。这一章的核心观点是提示不是魔法它是把你以为AI知道、但AI根本不知道的信息显式地告诉它。AI编码能力的上限不取决于模型而取决于你喂给它的上下文质量。3. AI承担的第二岗位测试、审查与文档代码生成只是AI编码增强的第一层。实际推进过程中我发现AI在测试编写、代码审查和文档维护上的价值往往比代码生成本身更稳定、更可复用。原因是这三类工作都有相对明确的结构模板AI不需要太多灵感只需要忠实执行并保持一致性。3.1 让AI先写棋后测试测试生成的最优时机你在什么时间点让AI生成测试效果差别非常大。我试过两种时序第一种是写完业务代码后立刻让AI补测试第二种是写业务代码前先让AI基于需求描述生成预期行为清单再逐步把清单转成测试用例。第二种方式明显更好。原因在于纯事后补测试时AI容易盯着实现细节走——你实现了什么它就断言什么等于把你自己的bug复制进测试里变成了正确行为。如果我让AI先针对需求生成测试比如给定用户有未完成订单时取消接口应当返回特定错误码那么后续业务代码就必须实现这个行为而不是让业务代码反过来定义测试。我把它叫做棋后测试先让AI站在需求侧把棋盘摆好再让人和AI一起下棋。当然生成测试同样需要给AI足够约束。我通常要求它包含三类用例正常路径、边界路径、异常路径。边界路径至少包括空集合、超长字符串、极端时间值、并发场景下的临界条件。异常路径则要看业务特有的失败模式而不是只覆盖OOM和空指针。3.2 AI审查怎么防正确废话给AI规定审查清单让AI做代码审查最大的风险是它只会说看起来不错建议补充异常处理这类正确废话。为了让它变成真正有用的第二双眼睛我给AI规定了明确的审查清单每次审查都要逐项给结论变更是否引入了事务边界问题并发场景下是否存在共享可变状态资源文件句柄、连接池、线程有无显式释放日志中是否可能记录敏感信息新增依赖是否必要版本是否锁定兼容性是否有老客户端在调用被修改的接口实践下来的效果是AI对已明确列出的检查项表现不错它能快速扫出资源未关闭日志打了整个User对象这类字面问题。但对这个新分支逻辑是否会绕过之前的校验流程这类语义关联问题AI的判断力仍然有限。所以我的用法是AI过显式清单人过语义链路两轮互补。3.3 被忽略的胜利自动生成变更说明与接口文档文档维护在大多数团队里都是优先级最低的活但它恰恰是AI增强最适合的领域。每从AI那边确认一版代码改动我就要求它同步输出一份变更说明内容包括改动背景、影响范围、兼容性处理、回滚方式。这份说明的初稿质量通常不错我再花三分钟补充业务细节就能直接贴到代码评审申请单里。接口文档也一样。服务对外暴露接口变更后让AI把代码差异转成文档差异初稿由我确认后提交。这样既可以避免代码改了但文档没人更新的老问题又能让AI的生成文本能力用在它最擅长的地方——结构化描述与对比。测试、审查、文档这三件事的共性是它们都有明确对错和固定格式。AI生成的代码可能掺杂风格偏好但审查结论和文档描述更容易被客观检验。如果你想让AI编码在团队里快速落地建议从这三个方向入手它们带来的价值会迅速被大家感知到。4. 重构期实战AI放大能力的同时也放大风险如果说新功能开发时AI是马力强劲的引擎那老模块重构时它更像一把双向剑——能替你大量体力活也能把隐藏问题放大得干干净净。4.1 一次失败的老模块重写启发式迁移的错误示范有一回我们要重构一个支付状态流转的旧模块。它历史悠久状态改来做去中间还夹着一段已经没人说得清为什么要存在的状态跳转逻辑。我尝试让AI直接从旧代码翻译成新结构它干得很快半小时就给出了一套更简洁的状态机。代码本身看着很精炼单元测试也全部通过。但上线后出问题了旧逻辑里存在一个隐性的状态补偿通道某些超时未支付的订单会经另一条定时任务路径修改状态恰好避开了状态机的合法转换。AI在简化过程中认为这个通道是历史遗留死代码删掉了。结果就是一部分订单卡在中间态手工处理了两天才恢复。这次事故让我明白一个道理AI擅长识别模式但它无法区分有意的复杂和无意的复杂。在它眼里多余的状态迁移和冗余代码看起来没什么区别。4.2 可验证小块策略让AI每次只完成一个行为迁移后续我们调整了策略不再让AI做整模块重写而是把重构拆成行为序列每个行为单独过一遍原实现 新实现 对应测试的闭环。每迁移一个行为都要确认原行为完全一致后才放行下一个。比如支付状态机重构时我先列出所有状态迁移路径给AI的任务是只把待支付到已支付这条路径的新旧行为做映射其他路径不要动。AI输出的代码范围被严格限制在这个行为里交叉影响的概率大幅下降。每个行为都配套两条测试一条验证新实现正确一条验证旧实现等价。等价测试非常关键有时候新旧实现输出一样但过程里多了或少了一个关键副作用只有等价测试才能暴露这类问题。4.3 重构期必须人工盯死的三件事我的经验是重构期间有三件事无论如何不能让AI独立拍板哪怕它给出了一版很完美的答案。第一是外部对接方的兼容性。你要重构的接口是给别的系统调的AI不知道下游系统会上传什么诡异字段人工必须确认好所有历史调用方。第二是隐性的业务补偿逻辑。就像上面那个状态补偿通道这类逻辑通常藏在定时任务、延迟队列或手工运维脚本里AI看不到这些需要人来标记这块代码不能删。第三是数据迁移的正确性。如果重构涉及表结构、缓存键、消息格式升级AI生成的转换逻辑再漂亮也必须经过灰度比对和样本抽查。重构期AI的意义是加速执行已验证的决策而不是帮我们做决策。把这两件事分清AI就是最好的重构助理分不清它会成为最快的踩坑加速器。5. 不可靠贡献者的兜底机制确定性校验与验收清单无论AI生成的代码看起来多合理它本质上是概率输出。把这种输出当作外部依赖来治理是我近半年最核心的心得。你不能假设它稳定你要假设它有概率犯错然后在系统层面兜住错误。5.1 把AI输出当作外部依赖校验层设计我之前犯过的一个错误是在本地让AI生成一段批量处理脚本看它试跑了几条数据没问题就放到生产环境执行结果漏处理了一类特殊编码的分片。自那以后我建立了一个原则AI生成的任何代码进入主干前都要过一套明确的自动化校验而不是靠肉眼review。这套校验我做了三层第一层静态检查。包括编译、Lint、安全检查工具。主要拦住明显的语法错误和常见漏洞模式。第二层行为测试。每个新增功能至少有两个正向用例、一个反向用例和一个边界用例。不要求覆盖率100%要求关键路径被验证。第三层语义一致性检查。针对变更涉及的业务规则把旧逻辑和新逻辑的输出放到对照环境里跑一遍比较结果差异。第三层听起来重但只在行为迁移和重构场景才需要。日常小功能开发走前两层就能挡住绝大多数问题。5.2 三层验收法编译通过、单元测试、语义一致性这套验收法对应着我认为合理的AI代码落地顺序先让它能跑起来再让它能证明自己正确最后用对照实验看它有没有破坏已有行为。举个例子某次我让AI把一段基于字符串拼接的报文生成逻辑改成模板化生成。它改完之后编译通过单测也过了但等我把新旧两份报文生成结果做逐字段diff时发现它处理某个特殊转义字符的方式和老逻辑不一致。这个差异单测测不出来因为测试用例里没有那个特殊字符但生产数据里有。没有第三层对照这个bug就会悄悄上线。5.3 回滚与保留如何让AI生成内容不污染主干还有一个容易被忽略的问题AI生成的代码频繁变动稍不留神就会把尝试性的改动混进确定性的改动里。我的做法是严格区分分支用途。AI探索性的重构在独立分支进行验证不通过就直接丢弃绝不cherry-pick半成品。只在确认验收通过后才由人合并进主干。这个习惯看似保守却帮我省掉了大量AI改了一版更好但改坏了另一个功能的混乱场面。把AI当作一个频繁提需求但偶尔撒谎的贡献者来看待所有代码都走同样的准入流程反而能最大程度放大它的生产能力不让不确定变成项目风险。6. 团队层面的超级增强一个季度试行后的经验账最后把视角拉高一点。我们团队在一个季度里做了三周的集中对比实验同样一批需求任务一部分人按传统方式写一部分人用我前面说的这套流程配合AI完成。实验结果不算严谨的学术结论但对团队落地很有参考价值。实验后整理的数据大致如下基于某小型开发团队样本维度传统方式AI配合方式人均完成故事点数基线提升约 40%单元测试覆盖率基线提升约 15%评审返工率基线下降约 25%新人上手简单需求的速度基线明显加快6.1 效率分布受益最大的是中间层开发者而不是新手有意思的是收益分布并不均匀。团队里受益最明显的是有一定经验、但还不熟悉所有业务模块的中间层开发者。他们借助AI可以快速补齐陌生模块的常用写法提示的有效性高又能自己判断生成的代码对不对。刚入行的新手反而容易掉进一个陷阱AI生成的代码他们看不懂出了bug也查不出原因。原本查一个变量来源可能要dive五分钟现在可能因为信任AI输出而直接跳过dive最后在集成阶段发现问题代价更大。所以我对新人的建议是初期先限制AI的使用范围强制自己先手写、理解再放开工具。6.2 提效的代价审查负担转移与新人培养路径变化AI并没有让评审消失它只是让评审的压力换了位置。以前是代码写得慢但写出来基本是人的思路评审主要在追逻辑漏洞现在是代码产出快但每段都带着AI的风格和偶尔的想当然评审必须更关注这个实现是否符合我们的约定。我们相应调整了评审机制把评审清单从泛泛地看代码质量改成固定项逐条确认。这既减轻人的认知负担也让AI生成的代码在进入主干前有了统一的过滤口径。对新人的培养路径也变了以前从写小函数开始现在从给AI梳理需求、审查AI代码、修正偏离业务约束的部分开始。这要求新人先理解业务边界再把编码当作一种表达手段而不是上来就追求手速。6.3 可持续落地的工作流清单最后沉淀一份我现在每天都在用的工作流清单给想直接抄作业的读者需求到手中先写三段式提示背景、约束、验收标准不写清楚不让AI动手。让AI先给方案再写代码。方案确认过来才进入实现避免生成与目标无关的设计。代码生成后不做人工逐行review而是先跑三层验收。验收不过直接打回不讨论。涉及业务语义的改动务必让人过一次下游影响确认。AI负责细节人负责边界。所有AI尝试性改动放独立分支通过验收再合并主干永远保持可发布状态。我把这套流程跑了几个月之后最大的感受是AI并没有让开发变成按回车它反而让开发工作里确认和判断的比例上升了。以前花很多时间打字现在花很多时间决定哪个方案是正确的、边界应该画在哪、生成的东西是否真的符合业务预期。这种变化才是超级增强的本质——人的角色从编写者转向决策者而AI把决策点到落地之间的距离压缩到了极限。如果你正在团队里尝试推广这类工具我建议不要一上来就追求AI自动完成整个功能而是先把提示模板、验收流程和回滚习惯建好再逐步放大AI承担的范围。磨刀不误砍柴工这套底子越稳后期放开的胆子才能越大。