尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI生成代码占比80%后,AI编程如何兼顾提效与可维护性?

AI生成代码占比80%后,AI编程如何兼顾提效与可维护性? 一家AI公司的技术负责人说他们仓库里八成以上代码由AI生成紧接着又公开呼吁暂停AI开发。这句话第一次看到会觉得拧巴但如果你真的把AI放进日常编码流程就会懂这种矛盾感从哪来。代码、AI、AI开发这三个词过去两年从热搜词变成了工位上的日常。很多人关心的是AI能不能替我写我更关心的是当AI写的代码占比超过某个阈值团队还能不能讲清楚每一行代码为什么在那里。这个问题不解决效率越高隐患越贵。尤其是最近搜“ai编程提示词”“ai应用开发学习路线”“ai agent开发”“ai大模型应用开发”的人越来越多说明大家已经从围观转向动手。但动手之后真正的门槛不是让AI生成示例代码而是让生成的代码在项目里活得下去、改得动、查得到、退得回。1. 代码80%由AI写这家AI公司为什么反而踩刹车1.1 从“AI补全”到“AI主力编写”的分水岭过去我们用AI写代码更多是补全一个函数、解释一段报错、生成一个正则。那时候AI是副驾驶方向盘还在人手里。现在的情况变了不少团队让AI直接生成模块、写测试、改配置、补文档甚至根据issue自动提交合并请求。代码占比从10%爬到80%不是简单的数量变化而是工作流性质的变化。以前你写代码脑子里有完整调用链现在你审代码面对的是别人或AI塞进来的一大块逻辑。你必须重新建立上下文理解它为什么这样写、边界在哪、异常怎么处理。这个分水岭最明显的标志是代码评审从“看风格”变成“看意图”。人写的代码通常带着个人习惯你能从命名、注释、提交信息里推断意图。AI生成的代码往往很“顺滑”命名规整、结构漂亮但它可能悄悄假设了不存在的前提。比如它假设上游一定传非空值假设网络一定稳定假设时区永远是UTC。这些假设在演示环境里没问题一上生产就变成事故。80%这个数字真正吓人的地方不是AI写得多而是人类评审者可能只用了20%的精力去理解它。另一个变化是知识传递被削弱。以前一个新人通过读同事代码能学到业务背景和踩坑历史。现在大量代码由AI生成业务背景可能只存在于某次对话的提示词里。过三个月没人记得为什么这里要重试三次为什么那里要跳过缓存。代码还在知识没了。所以那家AI公司喊暂停我理解不是否定AI编程而是提醒大家当AI成为主力编写者工程体系必须同步升级否则就是在借未来的维护债换今天的交付速度。1.2 为什么越懂AI的人越谨慎越懂AI的人越不会把“AI能写代码”等同于“AI能负责”。大模型本质上是基于上下文的概率生成器它擅长模仿模式不擅长对结果负责。你让它写一个快速排序它能写得很好你让它在一个有十年历史的支付系统里加一个折扣逻辑它可能忽略金额精度、并发扣减、幂等性和对账补偿。这不是模型笨而是它没有你的业务记忆也没有为线上事故背过锅。我见过最危险的心态是把AI生成的代码直接当成“标准答案”。AI给出的代码通常语法正确、结构完整看起来比人写的还整洁这会降低人的警惕。但代码质量不等于语法正确质量还包括可观测性、可回滚性、可测试性、资源消耗和故障隔离。一个没有日志、没有超时、没有重试上限的HTTP调用AI写出来可能只有十行上线后能把整个线程池拖垮。懂行的人看到这种代码会后背发凉不懂的人会觉得“AI真厉害”。还有一个现实问题AI生成的代码越多评审成本越高。一个评审者一天能认真读多少行代码如果AI一天生成几千行评审就会变成盖章。那家AI公司呼吁暂停可能是在说我们跑得太快配套的评审、测试、安全扫描和回滚机制没跟上。这个提醒对任何团队都成立。你可以不暂停开发但必须暂停“无脑合并”。1.3 对普通开发者的真实影响对普通开发者来说这件事不是新闻而是岗位内容的重构。以前核心竞争力是“能写”现在越来越偏向“能定义问题、能验证结果、能兜住风险”。你仍然要懂代码但懂的方式变了。以前你要记住语法和API现在你要能一眼看出AI代码里的隐藏假设。比如它有没有处理空集合有没有考虑时区有没有把同步阻塞放进异步上下文有没有在循环里发请求。招聘市场也在变。搜“ai应用开发工程师”“ai开发java”“ai大模型应用开发”的人多了但企业要的不是只会调API的人而是能把大模型能力接进现有系统的人。你要懂接口设计、懂缓存、懂限流、懂降级、懂权限还要懂怎么评估AI输出。AI可以帮你写Python代码但线上出了问题是你在值班。这个责任关系不会因为代码谁写的而改变。所以我的态度很明确AI写的代码占比可以高但人类对系统的理解不能低。你可以让AI写80%的代码但你必须能解释那80%里每一块为什么存在。否则你只是把代码库变成了一个巨大的、能运行的谜题。平时没事一出事就是连环坑。2. AI编程的甜区与雷区哪些代码能交哪些不能2.1 适合AI主力生成的三类代码第一类是模板化、边界清晰的代码。比如CRUD接口、DTO转换、参数校验、单元测试骨架、配置文件、Dockerfile、CI脚本。这些代码模式固定输入输出明确AI生成后容易验证。你给它一个示例它能把剩下十个类似接口都写出来。这类工作以前占掉大量时间现在可以大幅压缩。第二类是有成熟参考实现的算法和数据结构。比如快速排序、二分查找、LRU缓存、令牌桶限流、常见字符串处理。AI见过大量示例代码生成质量通常不错。但要注意它可能给出递归版本却不处理栈溢出或者给出线程不安全版本却不提醒。所以算法代码可以用但必须配测试尤其是边界测试。第三类是一次性脚本和辅助工具。比如数据清洗、日志分析、文件批量重命名、Excel处理。这类代码生命周期短运行环境可控即使有小问题也能快速发现。你甚至可以让AI生成Python代码自己跑一遍看结果。这种场景下AI的提效非常明显。我自己的做法是把AI当一位手速极快、知识面广、但没在你们公司上过班的工程师。它适合做“有参考答案”的事不适合做“需要为结果负责”的决策。模板、算法、脚本可以交给它业务规则、资金计算、权限判断、核心链路必须人工接管。2.2 必须人工接管的四类代码第一类是涉及资金、库存、权限、隐私的代码。这类代码错一个条件就是事故。AI可能把“大于等于”写成“大于”可能把扣减顺序搞反可能忽略并发。你必须自己写核心逻辑或者至少逐行评审并补充测试。第二类是并发和状态管理。多线程、异步、锁、事务、缓存一致性这些是AI最容易写出“看起来对”的地方。它会用锁但可能锁错对象会用异步但可能阻塞事件循环会用事务但可能把远程调用放进事务里。没有经验的人很难看出问题。第三类是错误处理和降级。AI倾向于写happy path异常处理常常是笼统的try-except。生产代码需要区分可重试错误和不可重试错误需要超时、退避、熔断、降级、告警。这些需要结合业务场景设计AI给不出通用答案。第四类是安全和权限边界。输入校验、SQL注入防护、越权检查、密钥管理这些不能靠AI自由发挥。AI可能生成拼接SQL的示例也可能把密钥硬编码在代码里。你必须用代码诊断插件、静态扫描和人工评审兜底。2.3 用一张表定分工边界代码类型建议AI参与度人工必须做的事常见风险CRUD、DTO、配置高可主力生成检查字段映射、空值、权限字段漏改、越权算法、工具函数高可生成后测试边界测试、性能验证边界错误、栈溢出一次性脚本高可快速生成运行前备份、限制影响范围误删、误改并发、事务、缓存中仅辅助设计锁粒度、事务边界死锁、数据不一致资金、库存、权限低仅参考人工编写、逐行评审资损、越权安全、密钥、鉴权低仅参考安全评审、扫描注入、泄露架构、核心链路低仅讨论人工决策、画图、评审耦合、不可维护这张表不是死的但逻辑很清楚越靠近钱、权、并发、安全AI参与度越低。你可以让AI帮你写测试、写文档、写脚手架但不要让AI替你决定业务规则。很多团队出事不是因为AI不会写而是因为人没看。3. 一套可复现的AI开发工作流从需求到合并3.1 上下文准备让AI先读项目而不是先写代码很多人用AI写代码的方式是打开对话框输入“帮我写一个用户登录接口”然后复制粘贴。这种方式在玩具项目里可以在真实项目里必然翻车。因为AI不知道你的框架、目录结构、命名规范、错误码、日志格式和数据库约定。它只能按训练数据里的常见模式写结果就是风格分裂、重复造轮子。我的习惯是先给AI建立上下文。把项目结构、关键配置文件、相似模块的代码、接口文档、数据库表结构整理成一段说明。你不用把整个仓库塞进去但至少要让它知道“这个项目怎么做类似的事”。比如你要写一个订单查询接口就先让它读现有的订单创建接口、统一响应封装、异常处理类和测试用例。然后要求它“按照现有风格实现”而不是“自由发挥”。这一步很费时间但非常值得。AI编程的质量很大程度取决于上下文质量。你给它的上下文越接近真实约束它生成的代码越不需要返工。反过来你省下的上下文准备时间都会在评审和修bug时加倍还回去。搜“ai编程提示词”的人很多但提示词的核心不是话术而是信息密度。3.2 提示词模板与任务切片我常用的提示词结构是四段背景、目标、约束、验收。背景说明项目和技术栈目标说明要改哪个文件、实现什么行为约束说明不能改哪些接口、必须复用哪些类、错误码怎么定义验收说明要补哪些测试、跑什么命令。这样AI输出会更接近可合并代码。任务切片也很重要。不要让AI一次生成十个文件。让它一次只做一件事先写接口定义再写实现再写测试再写文档。每完成一步你评审一步。这样即使出错影响范围也小。很多人抱怨AI写的代码越改越乱往往是因为一次让它改太多最后自己都理不清哪些是AI改的。还有一个技巧要求AI解释它的假设。比如“在实现前先列出你不确定的地方”。这样你能提前发现它准备假设什么。如果它说“假设userId一定存在”你就知道要补校验。如果它说“假设这个接口不会被并发调用”你就知道要加锁或改设计。AI不会主动暴露假设但你可以要求它暴露。3.3 生成、测试、审查的三道门第一道门是自动化测试。AI生成的代码必须跑测试而且测试不能也让AI随便写。你要检查测试是否覆盖了边界空值、极值、重复调用、并发、异常路径。很多AI写的测试只测happy path覆盖率看起来高实际没测到风险。第二道门是代码评审。评审重点不是格式而是意图和边界。看它有没有改变原有行为有没有引入新依赖有没有硬编码有没有吞异常有没有日志泄露敏感信息。你可以用代码诊断插件辅助但插件只能查模式不能查业务意图。第三道门是集成验证。代码合并前要在类生产环境跑一遍。看接口耗时、错误率、日志、数据库连接数、缓存命中率。AI代码最常见的问题不是语法错误而是资源使用不当。比如在循环里查数据库、在请求里同步调用外部接口、忘记关闭连接。这些问题单元测试查不出来必须集成验证。三道门都过了才允许合并。如果团队做不到三道门那AI生成代码的占比越高事故概率越大。那家AI公司呼吁暂停很可能就是看到了这个剪刀差生成速度飞快验证速度没变。3.4 示例用AI辅助写一个限流器并验证假设我们要在服务里加一个简单的单机令牌桶限流器。需求是容量5个令牌每秒补充1个令牌线程安全。我们可以让AI生成初版然后人工评审。下面是一个可用的Python示例import time from threading import Lock class TokenBucket: def __init__(self, capacity, refill_rate): self.capacity capacity self.tokens capacity self.refill_rate refill_rate self.last_refill time.monotonic() self.lock Lock() def _refill(self): now time.monotonic() elapsed now - self.last_refill new_tokens elapsed * self.refill_rate if new_tokens 0: self.tokens min(self.capacity, self.tokens new_tokens) self.last_refill now def allow(self, tokens1): if tokens 0: raise ValueError(tokens must be positive) with self.lock: self._refill() if self.tokens tokens: self.tokens - tokens return True return False这段代码不长但有几个点值得评审。第一它用了time.monotonic()而不是time.time()避免系统时间回拨导致令牌计算异常。第二它用了Lock保证多线程下令牌扣减安全。第三_refill在锁内调用避免并发补充令牌。第四allow对非正数做了校验。这些点AI不一定每次都能写对所以需要人工确认。再写一个简单验证if __name__ __main__: bucket TokenBucket(capacity5, refill_rate1) results [] for i in range(8): results.append(bucket.allow()) time.sleep(0.2) print(results)预期前5次为True后面因为令牌不足为False等待一段时间后又会恢复。这个例子很小但能说明AI开发的正确姿势AI生成初版人检查关键假设测试验证边界。参数计算也要清楚容量5意味着突发最多允许5个请求每秒补充1个意味着长期平均速率是1 QPS。如果业务需要每分钟60次可以设容量10、每秒补充1允许一定突发。4. AI Agent和AI应用开发代码风险为什么会被放大4.1 Agent循环与工具调用带来的新变量AI Agent和普通代码生成不一样。普通代码生成是你写、它补Agent是它自己决定调用什么工具、按什么顺序、循环几次。你给它一个目标它可能拆成多步调用搜索、数据库、文件系统、第三方API。代码风险不再只是语法和逻辑还包括“它会不会调用错工具”“会不会陷入循环”“会不会把内部数据发到外部”。搜“ai agent开发”“ai智能体开发”的人很多但很多教程只教怎么连工具不教怎么限制工具。Agent一旦拥有文件写入、命令执行、网络请求能力它的错误就会被放大。比如它误解了你的指令把测试数据写进生产库或者它调用了一个没有幂等设计的接口重试导致重复扣款。这些不是模型能力问题是系统设计问题。所以做Agent开发第一件事不是写提示词而是画权限边界。哪些工具只读哪些可写哪些需要人工确认哪些绝对不能碰。第二件事是设循环上限和超时。不能让Agent无限思考、无限调用。第三件事是记录完整轨迹。它每一步调了什么、传了什么、返回什么都要可回溯。4.2 权限、沙箱与回滚设计权限设计的核心是“最小必要”。Agent需要查订单就只给它查订单的只读接口不要给它数据库超级权限。Agent需要写文件就给它一个临时目录不要给它整个项目根目录。Agent需要执行命令就放在容器或沙箱里限制网络和文件系统。这些原则和传统安全设计一样只是Agent放大了执行频率。沙箱不是可选项。只要Agent能执行代码或命令就必须隔离。你可以用容器、虚拟机、受限用户或专用运行环境。不要因为它“只是内部工具”就放松。内部工具一旦误操作影响可能更大因为它有内网权限。回滚设计同样重要。Agent执行的动作要尽量可逆。写操作先写草稿或待审核队列确认后再提交。删除操作先软删除保留恢复窗口。外部调用要带幂等键避免重试造成重复。很多团队做Agent只关注“能不能跑通”不关注“跑错了怎么退”。这是很危险的。4.3 可观测性和日志该记什么Agent的可观测性至少包括四类输入、决策、工具调用、结果。输入是用户或系统的原始请求决策是Agent选择的下一步和理由工具调用是具体参数和返回结果是最终输出和副作用。没有这些出了问题你只能猜。日志还要注意脱敏。Agent可能接触到用户信息、密钥、内部文档。日志里不能明文记录敏感字段。你可以记录调用ID、耗时、状态码、参数摘要但不要记录完整隐私数据。很多团队为了排查方便把请求体全量打印出事就是二次泄露。另外要监控异常模式循环次数突增、工具调用失败率升高、输出长度异常、成本突然上升。这些指标能提前发现Agent行为漂移。AI应用开发和传统开发一样上线不是终点监控才是。5. 团队落地避坑常见问题与我的实操心得5.1 常见问题速查表问题现象可能原因排查动作长期解法AI代码能跑但没人懂上下文缺失、评审走过场找原作者或AI对话记录强制提交说明和设计注释改动频繁冲突任务切片太粗、多人同时改看提交历史和分支小步提交、按文件分工测试总过但线上出错测试只覆盖happy path补边界、并发、异常测试建立测试评审清单接口越来越慢AI在循环里查库或调远程看慢查询、链路追踪加缓存、批处理、超时密钥出现在代码里AI按示例硬编码静态扫描、搜索关键词密钥管理、提交前扫描Agent乱调工具权限过大、缺少确认看调用轨迹最小权限、人工确认成本突然升高循环失控、上下文过长看token和调用次数设上限、压缩上下文代码风格分裂缺少项目上下文看命名和目录统一模板、AI先读规范这张表里的问题我几乎都遇到过。最坑的不是技术难题而是“看起来没问题”。AI生成的代码往往很整洁整洁会让人放松警惕。等你发现它把缓存key写死、把重试次数设成无限、把异常吞掉时可能已经上线了。5.2 我踩过的五个坑第一个坑让AI一次生成整个模块。结果它生成了五个文件接口对不上依赖冲突改了三个小时。后来我改成一次只生成一个函数或一个类评审通过再继续。速度反而更快。第二个坑相信AI写的测试。它写的测试确实能跑通但只测了正常输入。后来我要求测试必须包含空值、边界、异常和并发AI才会补全。测试不是用来证明代码对的是用来暴露代码错的。第三个坑忽略AI的假设。有一次AI写了一个日期处理函数默认时区是UTC。我们业务在东八区上线后日期全部差一天。后来我要求AI在实现前列出假设尤其是时间、编码、空值、并发这四类。第四个坑把Agent放到生产环境试。还好只是内部工具它把测试数据写进了正式表。后来所有写操作都必须经过人工确认或待审核队列。Agent可以建议但不能直接改核心数据。第五个坑没有记录AI对话。三个月后想改一段代码完全不知道当时为什么那样写。现在我把关键提示词和评审结论附在提交信息或设计文档里。代码可以AI写但决策必须留痕。5.3 不同阶段团队的落地建议如果你是一个人做小项目可以大胆用AI。让它写Python代码、生成示例代码、解释报错、写脚本。你的验证成本低试错快。但涉及部署、密钥、数据删除时仍然要小心。一个人项目最大的风险是“自己忘了”所以提交信息写清楚。如果你是三五人小团队先统一AI使用规范。比如哪些目录可以用AI生成哪些必须人工写提交前必须跑哪些测试提示词和评审结论怎么记录。不要一上来就追求80%占比先把一个模块跑通再复制经验。如果你是中大型团队AI编程必须接入现有工程体系。代码评审、自动化测试、静态扫描、集成验证、发布回滚一个都不能少。你还可以建内部知识库把常用提示词、项目上下文、踩坑记录沉淀下来。搜“ai大模型本地部署配置”“代码诊断插件”的人多但工具只是工具流程才是护城河。我个人现在会把AI当成一位手速极快但需要复核的初级工程师。它适合打草稿、写模板、补测试、查文档不适合替我做架构决策和风险判断。代码80%由AI写并不可怕可怕的是人类对那80%一无所知。那家AI公司呼吁暂停我理解为一句提醒先把验证能力建起来再提高生成比例。否则你写的不是代码是未来的故障现场。
返回列表