刚在货拉拉把 AI Coding 从“一群人自己玩”推到“全研发流程用起来”,我印象最深的一句话,是一个后端同学说的:“我自己写代码快了至少一倍,但需求该什么时候上还是什么时候上。”这句话几乎把问题说完了——工具给你省了敲键盘的时间,但需求拆解、跨服务联调、代码评审、测试回归这些环节一点没动,个人提效自然攒不成组织提效。
货拉拉推广 AI Coding 的过程,不是从“选一个多聪明的模型”开始的,而是先接受了一个很别扭的事实:用得爽和用得好是两回事,个人用得爽和组织跑得快更是两回事。这篇文章不兜圈子,直接把我在这轮落地里踩过的坑、验证过的方法、最后沉淀下来的规范和取舍写出来,给正在做类似事情的团队做个参考。
1. 个人效率的“快”为什么没有传导到组织
1.1 个人体验和团队指标出现了明显背离
AI Coding 工具刚铺开的时候,开发者们最直观的感受就是补全快、生成代码快、写单测快。当时我们内部抽测过,一个熟悉业务的开发者在写标准 CRUD 和基础工具类时,编码阶段耗时大概能减少四成到一半,这个数字跟外面公开的案例差不多。
但看研发效能侧的指标,需求交付周期没有明显缩短,线上缺陷率也没有下降,甚至代码评审阶段的讨论变多了。两边的体验完全背离,逼着我们去想:省下来的时间到底去哪了?
答案藏在研发流程的上下游里。写代码只是整条链路的四分之一,前面有需求澄清和方案设计,后面有联调、测试、评审、发布。AI 只压缩了“编码”这一段,其他环节的时间一点没省,甚至因为生成代码变多,评审和联调的负担反而变重了。
1.2 货拉拉复盘时找到的三个真正瓶颈
我们做了一轮比较细的复盘,把几个典型需求的完整研发链路拉出来,从需求进入到上线,逐个环节记录耗时。最后发现卡点根本不在编码:
- 需求到任务的拆解还是全人工。产品给的需求文档是自然语言,能不能开发、涉及哪些服务、有没有隐含的边界条件,全靠开发者在脑子里过。AI 帮不上忙,因为没人把拆解的思路结构化地喂给它。
- 跨模块协作的等待是刚性的。前端等后端接口、后端等数据团队的表结构,这些等待不会因为你代码写得快就消失,反而因为你提前写完了,等待变得特别明显。
- 生成代码的返工成本被低估了。开发者用 AI 生成的速度很快,但生成完自己可能只读了一遍就提交了,等到评审或者联调阶段才发现边界条件没处理,这一段返工时间比手写代码还长。
1.3 结论:个人提效是“离散的”,组织提效是“连续的”
个人用 AI Coding 提升的是单点能力,但组织的研发效率是一条链条。链条的吞吐量取决于最慢的那一环,而不是最快的那个环节。你让一个人写代码快一倍,他下游的评审、测试、联调如果没变,整体交付就不可能快一倍。
所以从那一刻起,我们就把重心从“推荐更好的 AI Coding 工具”挪到了“改造 AI Coding 落地的周边环境”。选模型、调提示词只占很小一部分,真正花时间的,是给 AI Coding 设计规范、护栏和组织配套。这也是后面所有动作的出发点。
2. 从代码补全到研发全流程:选型逻辑走了两轮弯路
2.1 第一轮选型只看“谁生成的代码多”,跑偏了
刚开始选型时,团队内部很容易被“生成代码量”吸引。哪个模型补全快、哪个工具能一次生成几百行代码、哪个平台支持的自然语言描述最丰富,大家都去比这些。
比来比去发现意义不大。生成量大不代表有效代码多,更不代表合入后不出问题。有些代码生成得又快又长,但用的模式和团队现有架构不一致,评审阶段全部打回重写,等于没生成。
我们在第一轮选型之后总结了两个教训。第一个是AI Coding 的评估不能只看生成侧,要看合入侧,也就是“生成的代码最终有多少被合入了”。第二个是不能拿一个工具去解决整个研发流程的所有问题,不同环节的 AI 能力形态差别很大,IDE 补全和 CI 里的自动审查是两件完全不同的事情。
2.2 按研发流程拆解 AI 可介入的环节
第二轮的思路改成先把研发流程拆开,看哪个环节 AI 真正能站稳。货拉拉核心业务链路覆盖乘客端、司机端、企业服务、货运调度这些系统,涉及的研发环节比较典型,我们画了一张流程拆解表来判断各环节的 AI 介入价值:
| 研发环节 | AI Coding 可介入的方式 | 落地难度 | 组织收益 |
|---|---|---|---|
| 需求理解 | 从 PRD 提取验收标准、生成任务草案 | 中 | 中 |
| 技术设计 | 参考架构生成、接口设计建议 | 高 | 中 |
| 编码实现 | IDE 补全、函数/模块生成、重构辅助 | 低 | 高 |
| 单元测试 | 自动生成测试用例、边界值建议 | 低 | 高 |
| 代码审查 | 自动静态检查、反模式识别、变更摘要 | 中 | 高 |
| 缺陷修复 | 根据报错定位可疑代码并生成补丁 | 中 | 中 |
| 文档同步 | 接口文档、数据字典、变更记录生成 | 低 | 中 |
拆完这张表,选型方向立刻清楚了:优先投入编码、单元测试、代码审查三个环节,因为它们落地难度低、组织收益高,而且验证效果周期短。需求理解和技术设计暂时只做辅助,不强行自动化。
2.3 工具选型的三条硬指标
- 和企业现有工具链的打通程度。代码要能直接读写我们的 Git 仓库、走我们现成的 CI 流水线、关联需求管理系统的任务单,不能是孤岛。
- 数据安全边界。代码是企业最敏感的资产,工具必须支持私有化部署,或者至少确保训练数据不会被拿去做公共模型迭代。
- 可度量性。工具要能输出结构化数据,比如生成代码的提交记录、审查意见、合入率,方便我们后面做效能分析。
最终我们选了一条组合路线:IDE 插件负责日常补全和生成,CLI 工具负责命令行的批量操作,CI 里挂自动审查服务,再单独搭一个 Agent 平台用来跑多智能体的复杂任务。不是某一家的全家桶,而是每个环节选最合适的那一个,用规范统一起来。
3. 代码生成规范:先定边界,再谈效率
3.1 代码生成规范要解决的三个问题
代码生成规范不是给 AI 看的,是给团队看的。AI 没有“团队记忆”,它不知道货拉拉的技术规范里对错误处理、日志格式、事务边界有什么要求,如果不在生成阶段就把规范约束进去,后面清理的成本会非常高。
我们定规范主要针对三个问题:
- 代码风格漂移:同一个团队里,人工代码和 AI 生成代码风格不统一,导致后续维护困难。
- 安全意识缺失:AI 生成的代码可能沿用不安全模式,比如过度信任外部输入、日志里打敏感信息。
- 架构一致性破坏:AI 生成代码往往会“图省事”,不走现有的基建框架,而是自己新造一套轮子。
规范的核心不是限制大家用 AI,而是给 AI 生成设置明确的边界和验收条件,让它产出的东西不偏离团队的技术契约。
3.2 需求描述模板:让 AI 听懂“业务语言”
我们试过很多次之后发现,AI Coding 生成质量最大的影响因素,不是模型有多聪明,而是输入的需求描述有多结构化。开发者如果直接丢一句“把这个订单列表接上分页”,AI 生成的代码大概率泛泛而谈,边界条件、错误处理、权限校验全部缺失。
所以货拉拉定义了一套需求描述模板,要求在用 AI 生成代码之前,至少把下面几项填清楚:
【功能背景】这个功能解决什么问题,服务哪个业务方 【输入约束】入参来源、格式、可能的非法值 【输出要求】返回结构、异常时的行为 【边界条件】空数据、并发冲突、超时、重复请求如何处理 【依赖限制】必须使用哪个内部框架/基建,禁止引入哪些依赖 【验收标准】怎样算完成,需要覆盖哪些测试用例第一次用这套模板的人会觉得啰嗦,但坚持一段时间就会意识到,填这份模板的过程本身就是任务拆解。你越早把边界条件想清楚,AI 生成出来的代码就越接近可合入状态,评审阶段的返工也越少。
3.3 生成边界清单与输出要求
需求描述模板解决“怎么描述”的问题,生成边界清单解决“哪些能生成、哪些不能生成”的问题。我们给团队划了一个明确的分界线:
- 允许 AI 生成:标准 CRUD、DTO/VO 转换、单元测试、配置类代码、基础工具方法、接口文档。
- 禁止 AI 直接生成:核心订单状态流转、支付对账、权限校验、异地多活相关逻辑。这些代码要么涉及资金安全,要么和公司核心架构强绑定,必须由人工完成设计和编码,AI 只能做辅助参考。
除此之外,输出要求里还做了硬性约定:AI 生成的代码必须包含完整的错误处理和日志链路,所有对外接口必须有入参校验,数据库操作必须遵循现有的事务和重试框架。这些要求会以提示词的方式预置到 IDE 插件里,减少开发者的记忆负担。
3.4 规范落地:预置提示词 + 自动检测
只在文档里写规范是没人看的,我们的做法是把规范变成工具链的一部分。在 IDE 插件的配置里预置团队规范提示词,AI 生成代码时默认带上这些约束;代码提交进仓库后,自动审查服务会跑一遍规范和反模式检查,不满足的直接在流水线里拦下来。
这套机制让规范落地变得“不依赖个人自觉”。开发者不需要背规范条款,只要正常用 AI Coding,工具就会把团队约定注入到生成过程里,不符合的代码在进主干之前就会被技术手段拦下。
4. 代码质量不会自己掉下去:评分、拦截与责任回归
4.1 在没有护栏的情况下,代码质量真的会掉
行业里一直在问“AI Coding 的到来会不会让代码质量下降”,我们的回答是:如果没有配套护栏,会,而且掉得比想象中快。掉的方式不是那种惊天动地的大缺陷,而是很隐蔽的消耗:
- 代码重复率上升。AI 总喜欢按自己的方式重写一遍,而不是复用已有的公共方法。
- 死代码变多。生成的功能有一半分支在实际业务里根本走不到。
- 安全漏洞出现频率增加。典型的比如对入参不校验、错误信息暴露内部路径、依赖版本选择不严谨。
这些不是模型笨,而是生成过程缺少“上下文”和“约束”。开发者在本地觉得 AI 写得挺好,代码也能跑,但放到真实流量和完整架构里,问题就暴露了。
4.2 三道防线:自动检查、差异化评审、责任回归
为了不让 AI 生成代码变成质量洼地,我们搭了三道防线:
| 防线层级 | 具体动作 | 目标 |
|---|---|---|
| 自动检查层 | 静态检查、重复率检测、依赖漏洞扫描、安全规范扫描 | 用机器拦截低水平问题 |
| 差异化评审层 | AI 生成代码先由机器做初步审查,人工聚焦业务逻辑和架构 | 把人工精力花在最有价值的地方 |
| 责任回归层 | 每条 AI 生成的改动必须有真人署名负责 | 避免“AI 写的所以不怪我”的甩锅心态 |
这套做法的核心逻辑是:AI 可以负责“写得快”,但“写得对不对”必须靠机制保障。自动检查层在提交和 CI 阶段拦截机械性问题,差异化评审让人的注意力集中在流程替代不了的部分,责任回归则保证每个改动都能溯源到具体的人。
4.3 一个真实的小规模失败案例
说一个我们自己的失败案例。早期有一个内部系统,为了验证 AI Coding 的极限,我们允许 AI 生成代码自动提 PR、自动合入,只要单元测试和静态检查过了就不需要人工确认。前两周表面看很顺利,系统运行也正常。
第三周开始出问题。AI 生成的一个定时任务,在处理并发冲突时只做了最简单的重试,没有考虑数据幂等性,结果某个凌晨数据对账出偏差,早高峰前才发现。事后查日志,静态检查没报错,单元测试也过了,但真实场景下的边界条件根本没有被覆盖到。
这次事故之后我们把自动合入关掉了,改成“AI 生成 + 机器初筛 + 人工确认”的流程。不是完全不信任 AI,而是意识到:质量保障不能押注在生成侧,必须在合入侧加一道人的判断。
5. 多智能体 Agent 不是人多力量大:编排与边界
5.1 外界把多智能体想得太“全能”了
多智能体 AI Agent 这个词最近很热,外界的想象通常是:给一个 Agent 下指令,它自己调别的 Agent 写代码、查代码、跑测试,最后交付一个功能。这个画面很美好,但实际落地的时候,多智能体带来的管理复杂度会立刻显现。
我们先小范围验证了一批多智能体场景,结论是:多智能体真正有价值的地方,不是让多个 Agent 一起写代码,而是让不同角色的 Agent 各自负责一段“可验证”的任务。比如需求的拆解、测试用例的生成、代码的初步审查,这些任务边界清晰、产出可校验,最适合多智能体并行处理。
货拉拉内部用到的多智能体角色主要有四类:
- 需求分析 Agent:读 PRD、拆任务、列验收点。
- 编码 Agent:按任务描述生成实现代码,自检编译和基础测试。
- 测试 Agent:根据需求和实现生成测试用例并执行。
- 审查 Agent:检查代码规范、重复模式、常见安全漏洞。
5.2 人机协同的开发标准流程
我们反复试验后,沉淀出一套人机协同流程。整个流程的关键不是“让 AI 多干活”,而是“AI 每干一段活,都有一个人来验收”。
- 产品需求进入开发后,需求分析 Agent 先读一遍 PRD,输出任务拆解草案和验收点清单,由开发负责人确认或修改。
- 任务分配给具体开发者后,开发者用需求描述模板补充细节,编码 Agent 生成初版代码,生成完自动跑编译和基础测试。
- 测试 Agent 根据任务描述和实现代码生成测试用例,执行后把通过率和未覆盖分支反馈给开发者。
- 审查 Agent 做规范检查和代码质量初步审查,输出问题和修改建议。
- 开发者综合测试结果和审查意见修改代码,最后提交人工评审。
对比以前的纯人工流程,编码和单测阶段的时间大概节省了一半,但需求拆解和验收的时间反而变长了。这不是坏事,而是把以前“写一半才发现理解错了”的返工,提前转移到了开发之前。
5.3 多智能体的三个坑
- Agent 之间信息传递失真。A Agent 的输出直接作为 B Agent 的输入,任何格式不统一都会造成理解偏差。我们的解决办法是把中间产物固定成模板,比如任务描述的结构、验收点的格式、测试结果的输出字段。
- 责任边界模糊。多智能体流程一旦出错,容易互相甩锅,说是“需求 Agent 没拆对”或者“测试 Agent 没测出来”。我们规定每个环节必须有一个真实的人做裁决,机器可以跑前面,但最终拍板的是人。
- 幻觉比单智能体更难被发现。多个 Agent 协作时,一个幻觉会被后续环节当成事实继续加工,最后偏差被放大。我们的兜底方案是审查 Agent 里加独立的校验规则,重点检查引用是否存在、依赖是否真实、数据流是否闭合。
5.4 多智能体更需要规范
多智能体场景里,规范和约束的重要性比单点 AI Coding 更高。单体工具出了问题,人一眼能看出来;多智能体链路长,错误在中间环节被放大后才暴露,定位成本很高。
所以我们对多智能体的使用也做了限定:必须是可拆解、可验证、有明确验收标准的任务才能进入多智能体流程。像“重构这个模块”“优化这个接口性能”这类边界模糊的诉求,一律不允许丢给多智能体,必须由人先完成方案设计。
6. 组织提效的隐性成本:度量、培训与信任
6.1 不要制造虚荣指标
AI Coding 落地一段时间后,很多团队喜欢晒“AI 生成代码占比”“工具渗透率”这类指标。这些数字好看,但和我们实际关注的业务目标没有直接关系。开发者开着工具没怎么用,工具就算渗透率 100% 也没有意义;AI 写了一堆代码但大部分被驳回,生成占比高反而是效率损耗。
我们后来坚持看的是这几类指标:
| 指标 | 说明 | 为什么看它 |
|---|---|---|
| 需求交付周期 | 从需求评审完成到上线的时间 | 直接反映组织整体吞吐 |
| 缺陷逃逸率 | 线上问题中有多少是在研发阶段应该被发现但没有发现的 | 衡量质量防线是否有效 |
| PR 返工率 | 一个 PR 从提交到合入的平均修改轮次 | 反映 AI 生成代码的可合入性 |
| 单元测试覆盖率增量 | 新增代码的测试覆盖变化 | 防止生成代码大量缺少测试 |
这些指标不是挂在设计会上看看,而是每个月拉一次数据,按团队维度分析。如果数据没有变化,说明 AI Coding 还没真正影响组织效率,需要继续调整流程,而不是在汇报里换个更漂亮的图。
6.2 培训开发者“和 AI 协作”而不是“会点提示词”
AI Coding 工具本身好学,真正难的是教会团队一套新的工作方式。一个开发者如果只会写“帮我弄一个用户列表”,工具生成的东西大概率用不上;但如果他能把需求拆清楚、把边界条件描述完整、能看懂 AI 生成代码里的潜在问题,工具的价值就会翻倍。
货拉拉内部做过一轮系列培训,核心不是讲工具按钮,而是讲三件事:怎么拆解模糊需求、怎么识别和修复 AI 生成的错误代码、怎么在评审阶段对 AI 产物做有效审查。培训用真实业务需求做练习,开发者现场跑全流程:描述需求、生成代码、跑测试、审查结果、修改提交。
这个过程坚持下来,团队里慢慢形成了一种能力分层:工具使用只是门槛,真正有价值的是判断力和审查力。那些能指出“AI 这里事务处理不对”的人,才是组织里最不可替代的。
6.3 用笔试场景评估真实的 AI Coding 能力
这里回应一下“ai coding 笔试”这个话题。我们后来在团队内部的能力评估里加入了 AI Coding 实操环节,形式接近笔试但考察的不是背题,而是三段式任务:
- 给一份模糊的 PRD 摘要,要求拆出开发任务和验收标准。
- 在给定代码库里用 AI Coding 工具完成一个需求,允许任意使用工具,但必须确保代码通过现有 CI 检查。
- 给一段 AI 生成的代码,要求找出里面的边界问题和安全隐患并修复。
这套“笔试”不考工具的品牌,也不考提示词的花哨程度,只考一件事:你能不能把 AI 的能力真正用到企业级代码库里,并且对它产出的质量负责。实操下来,这项评估比传统的算法笔试更贴近日常工作,也更难混过去。
6.4 组织信任:从试点到规模化
AI Coding 要规模化,最难的不是技术,是人心。一开始有人抵触,怕被替代,也有技术负责人担心 AI 生成的代码质量参差,不愿意放权。这是我们最常用的一招:
选一个相对独立、风险可控的内部系统做试点,先跑两个月,把数据拉出来看。试点团队用实践说话,数据只要证明需求交付周期缩短、缺陷率没有上升,其他团队自然愿意跟进。强制全员使用只会加剧抵触,用结果说服人才是最可持续的路线。
信任建立之后,也容易走另一个极端:盲目扩大 AI 的使用范围。我们的经验是每次只扩大一个环节,验证稳定之后再推下一步。工具永远在迭代,团队的接受度和组织配套必须跟上。
最后分享一个我在货拉拉内部觉得最有用的实操细节。我们每周的代码评审会,会要求开发者把 AI 生成的初版代码和自己修改后的版本一起贴出来,评审时逐块对比差异。这个动作看起来很笨,但坚持几次之后,整个团队对 AI 生成代码的敏感度明显提高:哪里容易出现事务漏洞、哪里会漏校验、哪里风格和团队不一致,都能在对比里一眼看出来。比任何规范文档都直观。
AI Coding 是个放大器,放大的是你原本的研发流程和组织能力。流程本身是乱的,工具越强只会放大乱象;流程顺了,工具才能把组织效率真实地推上去——这大概就是“个人提效攒不成组织提效”背后最朴素的原因。