ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI写代码如何管?从风险识别到分级治理的研发管理实战指南

AI写代码如何管?从风险识别到分级治理的研发管理实战指南

最近收到安全团队的一封邮件,说是仓库扫描发现内部代码库里出现了大量疑似由AI生成的代码片段,特征明显但又说不清来源。我顺着查了一圈,发现团队里超过一半的工程师电脑上装着各类AI编程辅助工具,每天通过补全、对话、自动生成测试的方式输出代码,而公司这边既没有统一的工具评估,也没有对应的使用规范。这个场景我猜不少技术负责人都不陌生——AI写代码这件事根本没法当作“要不要引入”来讨论,因为研发团队已经先用了。

这篇文章想聊的,就是公司层面怎么把AI写代码这件事“管起来”:既不靠禁令硬卡,又不能让风险敞在那里不管。我会从现状、风险、分级分类的管理思路,再到制度、技术、流程上的具体落地做法,最后聊聊我实际推行时遇到的阻力和一些还没想清楚的边界问题。适合正在管研发团队、或者被安全合规部门追着问“AI用没用、怎么用”的技术管理者参考。

1. 先别急着定制度:AI写代码的渗透速度远超管理预期

1.1 团队里真实存在的五种AI编程使用场景

我发现很多公司对AI写代码的理解还停留在“编辑器里有个补全冒泡提示”,但实际上团队里的使用方式远比这复杂。第一种是内联补全,写代码时AI实时给出下一行或下一个函数的建议,这个最普遍,工程师用着用着就离不开了。第二种是对话式生成,把需求描述或报错信息直接丢给AI聊天窗口,让它生成整段代码或修复方案,然后复制粘贴进项目——这是风险最大的一种场景,因为工程师往往会把内部信息一并粘贴进去。第三种是自动生成单测和文档注释,这个看起来人畜无害,很多人以为只是在省时间,但它会悄悄改变团队对测试质量的判断。

第四种是批量重构,让AI批量改写某类代码,比如给所有函数加日志、把某个库的调用方式统一替换。这种场景下,一旦生成的模式有隐患,问题会在整个代码库里成片出现。第五种是替代搜索引擎查API用法,严格来说这不直接产生代码,但团队成员养成的习惯会影响后续决策——AI给的建议可能看着合理,实际是过时或错误的API用法。

我把这五种场景拉出来,是因为很多管理动作之所以失效,就是管理者以为AI写代码只是“补全”,做出来的制度只覆盖了第一种场景。实际上后面几种场景的风险和治理手段完全不同。

1.2 管理焦虑的来源:不可见代码量正在膨胀

有段时间我发现代码仓库的合并频率明显上升,单次PR的代码量也在涨,但仔细看又找不到什么人为此负责。后来做了一次内部统计,抽样那些合并进主分支的PR,超过三成代码的提交说明和编码风格都透出明显的AI痕迹,而所有PR在流程上都是正常走过review的——只是reviewer根本不知道哪些代码是AI写的,哪些是人写的。

这其实就是管理焦虑的根源:代码量在膨胀,但每段代码背后的思考过程消失了。过去一个函数写得精不精,能看出作者的思路和意图,现在大家接受AI秒出的一版,再手动改两下就提交了。团队成员自己可能都讲不清这版代码为什么这么写,reviewer就更没法深究了。再加上多数AI工具允许用户在浏览器、编辑器、命令行等各种入口使用,靠统一装软件、封IP这类老办法基本堵不住。管理这件事的难度,不在于“想不想管”,而在于“根本看不见”。

2. 管AI写代码,先弄清楚风险到底集中在哪三个层面

2.1 数据与合规层面:提示词里夹带的东西远比想象多

先说数据风险。工程师在用对话式AI工具时,最容易发生的事情是:排障的时候把一长段报错日志直接贴进对话框,顺手把涉及内部系统名的SQL或配置片段也贴进去了。在你看来这是“打个补丁求个解释”,但在工具服务商的视角里,这些文本就是他们在用真实业务数据训练模型。更麻烦的是那些连接串、密钥、内部域名,一旦进入外部服务商的日志或训练集,事后几乎无法彻底撤回。

合规风险则体现在许可证上。AI模型的训练数据里包含大量开源项目,这些项目的许可证各不相同。AI生成的代码完全有可能带有类似GPL这类“传染性”许可证的片段,如果业务代码里混入这样的内容,一旦要对外发布或做商业授权,版权排查会是非常头痛的问题。这个领域法务部门往往比技术部门更敏感,但技术部门才是第一道防线。

我实际处理过一个挺典型的情况:一位工程师让AI“帮忙修复一个正则表达式的性能问题”,他粘贴的代码里包含公司内部特有的字段命名风格,而这个对话工具的免费版本声明会拿数据改进模型。等于说公司的内部设计习惯直接被送出去了。这类事故很难靠事后审计解决,必须从入口制度上堵。

2.2 安全与质量层面:AI生成代码的默认安全基线

关于AI生成代码的安全性,我的看法可能比较直接:默认不安全,必须按人类代码同等的标准去走安全测试流程。这不是说AI水平差,而是它的训练目标本来就不是“写出安全的代码”,而是“写出看起来正确的代码”。两者经常不一致。常见的几类问题我列一下。

  • 注入类漏洞:AI特别喜欢生成SQL拼接字符串,原因很简单——公开代码库里这种写法太多了,模型学到的概率就高。
  • 依赖与版本问题:AI可能推荐一个旧版本的库,理由是训练语料里这个版本出现频率高,导致引入了已知漏洞。
  • 异常处理缺失:生成的代码经常对边界情况处理得很粗糙,看起来按主流程跑通了,但一旦输入异常就崩。
  • 过度信任输入:对外部传入的参数缺乏校验,这种情况在AI生成的网络接口代码里尤其常见。

质量层面还有个容易被忽略的问题:AI生成代码的“风格一致性”很差。同一个项目里,每段AI生成代码的命名方式、错误处理习惯、日志格式可能各不相同,长期积累下来代码库会变成拼贴画。更要命的是,AI会把一个错误的写法在多个地方复制出同样的副本,这种成片出现的坏味道,比单个bug难收拾得多。

2.3 工程与组织层面:能力退化从新员工开始

这个风险在组织层面,但我认为它比前两个更值得警惕。一个很明显的现象是:新入职的工程师遇到问题,第一反应从“查文档、读源码、问同事”变成了“直接问AI”。结果是他可能在一个月内产出了不少代码,但对公司技术体系的底层原理几乎不了解。

AI写代码带来的能力退化,和当年搜索引擎普及后的记忆退化类似,但它更隐蔽。因为搜索引擎至少会给你链接,你还需要自己读、自己判断、自己过滤;而AI直接给你答案,思考环节被压缩到了最小。长期下去,团队里能讲清楚“为什么这样设计”的人会越来越少,而这类隐性知识恰恰是代码库可维护性的最后一道防线。

组织层面的另一个问题是角色责任感模糊。代码是AI写的,reviewer看着也合理就点了通过,测试是AI生成的,看起来覆盖率高但断言都很水。出问题之后,谁该负责?如果制度不明确,最后就变成人人都有理,但人人都不用负责。这对工程文化的伤害,远比一两个线上事故大。

3. 治理的核心不是一刀切:用分级分类替代“封禁”

3.1 核心原则:分级授权、分类管理、场景管控

我见过不少公司面对新技术的第一个反应是“禁止”,结果无一例外都失败了。原因很简单:AI编程工具的情感和效率价值太直接,工程师感知不到风险,只感知到“公司给我添麻烦”。所以真正的管理应该建立在“用还是要用,怎么用要有规矩”这个共识上。

我建议套用信息安全管理里成熟的分级授权思路,落到AI编程场景就是三句话:按代码敏感程度分级,按工具能力分类,按任务场景管控。直白点说,就像开车一样,A照能开大客车、C照只能开小客车,你不能直接禁止所有人开车,而是要根据驾照类型和道路条件决定允许开什么车。代码敏感级别高的模块,用的工具和流程就要更严;公开的开源项目,爱怎么用怎么用。

3.2 管控矩阵:敏感度、工具类型、任务类型三个维度怎么组合

在实操里,我把代码资产先分成三层。L1是公开项目或演示代码,L2是普通内部业务代码,L3是核心算法、新项目预研、涉及重要业务数据的模块。工具侧也分三类:公有免费服务、有企业保障的商用服务、本地化或私有化部署的模型。再加上任务类型,就组成一个三维矩阵。

代码级别允许工具范围数据内容要求流程要求
L1(公开/演示)所有合规工具不包含任何内部信息正常Review即可
L2(内部业务)企业版或经审批的商用服务禁止粘贴密钥、日志、客户数据标注AI辅助程度,强制安全扫描
L3(高敏感模块)仅私有化或本地模型全部内容不得出境强制双人Review+专项巡检

任务类型上也需要区分。比如让AI生成单元测试和文档注释,几乎任何时候都值得鼓励;让AI读取整个模块上下文做批量重构,则需要单独审批;而让AI解释一段遗留代码、协助代码审查,只把结果当参考意见,不能直接作为结论。这个矩阵不需要一步到位,可以先定粗颗粒度,运行一个月后再细化,比如把“内部业务代码”继续按模块拆出更细的敏感级别。

3.3 工具链选型对比:公有服务、企业版、私有化如何取舍

工具这块我建议别急着追求“最强模型”,先看“数据能不能兜住”。三个档次的差别主要在数据流向上:公有免费服务通常会在服务条款里写明数据可能被用于改进产品,对个人开发者无所谓,但对公司内部代码就是一颗定时的雷;商用企业版提供数据隔离承诺和管理后台,能登记成员、看使用量、控制策略,对大多数公司来说是最划算的起点;私有化或本地部署的大模型则能把数据完全留在内网,但需要额外承担硬件和运维成本,而且模型能力往往比云端版本落后。

选型的时候容易被忽略的是“管理后台”。很多企业版工具贵是贵了一点,但贵在有地方看“谁在用、用了多少、往哪个服务传了什么”,这个能力在出事的时候是救命稻草。没有管理后台的工具,哪怕单次调用再便宜,我也会直接排除掉——因为公司没法审计,等于把治理体系的地基抽掉了。低于五十人的小团队,我认为先上企业版配一套白名单就够了,私有化的投资可以等规模和管理需求明确后再加。

4. 从零到一落地一套“管得住又不寒人心”的完整方案

4.1 制度文本怎么写:具体到允许、禁止和例外

很多公司的AI使用制度写得像学术论文,从定义到背景再到原则,最后还全是“建议”“倡导”,真正遇到问题的时候根本没法执行。我的建议是制度文档不要超过三页,把四个问题讲清楚就行。

第一,允许什么:列一个白名单,明确哪些工具经过技术评估和安全确认,全员可以直接使用,并注明每个工具适用的代码级别。第二,禁止什么:列出几条硬红线,比如禁止把生产环境日志、客户个人信息、密钥和连接串粘贴到未审批的AI服务;禁止用公有免费工具辅助核心算法模块的开发。第三,特殊场景例外:明确申请流程,比如“我确实需要引入一个新的AI工具”,提交一个包含数据流向、作用范围、替代方案的申请表,由平台负责人和法务联合审批。第四,责任归属:写明AI辅助生成的代码,提交者和reviewer的责任不因“代码是AI写的”而减轻,这条必须有,否则流程立刻崩塌。

制度里最好再加一条“制度更新机制”。AI工具迭代极快,三个月前的格局可能就变了,固定条款容易被迅速淘汰。我实际操作中是每个季度滚动更新一次,动态调整白名单和禁用范围,避免制度刚发布就过时。

4.2 技术链路怎么搭:终端、网关、仓库、审计四道关卡

制度要靠技术落地,否则就是墙上的一堆字。我梳理了四条链路,可以按顺序逐步建设。

第一道关卡在终端侧,统一下发开发环境镜像,通过软件管理策略限制IDE插件的安装范围,没有审批的AI插件装不进去。这个阶段不用搞得太激进,只拦截未登记的插件,不影响正常开发。第二道关卡在网关侧,把AI工具的API访问统一接入内部代理或网关,在网关层记录调用日志、做关键词和DLP检测,比如检测提示词里是不是出现了密钥特征、身份证号、内部域名这类信息。第三道关卡在仓库侧,接入代码扫描流水线,包括密钥扫描、许可证扫描、已知漏洞扫描,顺带用一些启发式规则识别代码中的AI生成特征,比如某些命名风格和注释模式。第四道关卡在审计侧,安全或平台团队按月出使用报告,看白名单之外的工具是否有访问记录、各团队的使用量变化,以及扫描结果的趋势。

这四个关卡不一定要一次全上。我当时的顺序是先把仓库侧扫描接通,再管终端插件白名单,最后才做网关层的调用审计。最优先也是最便宜的永远是仓库侧的自动化扫描,因为无论代码怎么进来的,最后都要落到代码库,这里守住了,大部分问题都能暴露出来。

4.3 研发流程怎么改:Code Review和CI的调整

管理AI写代码,最关键的动作其实不在制度层面,而在研发流程的改造上。第一件事,是给PR描述增加一个“AI辅助声明”字段,不强制每个人去填那复杂的表格,就问两个问题:这个PR的代码有没有使用AI辅助生成?如果有,主要是哪几个文件?很多工程师一开始会嫌麻烦,但习惯之后这个信息对reviewer的价值极高——它能把reviewer的注意力引导到最需要人肉检查的地方。

第二件事,是在CI上增加一个“疑似AI生成高危模式”的检查项。技术方案上有现成的SAST工具,配合一些自定义规则,比如SQL字符串拼接、缺失输入校验、硬编码密钥等模式,命中后流水线告警并自动添加审阅标签。说白了,代码是不是AI写的不重要,重要的是用机器先兜住最典型的几类安全问题,再让人去处理更复杂的逻辑问题。

第三件事,是设一个“AI生成代码专项抽查”机制。每个迭代周期,由架构组或技术委员会随机抽取若干已合并的PR,对照AI辅助声明做复核,重点看有没有没声明却明显是AI生成的、有没有滥用工具生成低质量代码的。抽查不追求数量,但要让团队知道“随时可能被抽到”,这个机制对规范使用的约束力,比任何惩罚条款都强。

4.4 培训与沟通怎么组织:让制度可理解、可执行

再好的制度,如果只有发邮件通知,那落实效果接近于零。我给团队做的是一小时左右的实战培训,内容基本固定:先花十五分钟展示真实脱敏案例,比如“这段代码被提交后泄漏了什么信息”“这个AI生成的接口为何会在线上炸”,先让工程师直观感受风险;然后花二十分钟教他们怎么安全地使用AI,包括哪些信息能贴、哪些绝不能贴、贴之前如何做脱敏;剩下的时间讲制度和流程,以及每人如何申请新的工具。

培训完了之后,我会专门给团队Leader和架构师加一场“如何Review AI生成的代码”的专项课。Reviewer面对AI代码最常见的两个困惑是:看不出哪些是AI写的,以及即使看出是AI写的不确定该关注什么。我分享的方法很简单——AI生成代码最薄弱的地方是边界条件和异常处理,reviewer重点盯这两个方向,往往就能抓住真正的隐患。另外我会建一个内部的FAQ文档,团队遇到拿不准的数据安全问题时能查到该怎么做,也会根据大家的问题持续更新。

5. 推行过程中的真实阻力:有些坑只有落地时才会撞到

5.1 情绪阻力:开发者第一反应是“公司要监控我”

任何涉及开发工具使用的制度,落地时第一波反弹几乎都是情绪问题。最常听到的问题是“公司是不是要监控我每天写多少代码”,还有“我连用什么工具都要报备吗”。这个阻力处理不好,后面所有流程都会被执行者用脚投票。

我的经验是,沟通的角度要从“管控”转成“保护”。明确告诉团队,审计日志的目的不是针对个人统计业绩,而是在发生数据泄漏或合规纠纷时,有能力还原事实、划定责任。说白了,公司不是要管着你,是要在出事的时候保护你,让外部问起来“为什么自己的代码会跑到外部服务里”时,团队能给出一个交代。这个逻辑大多数工程师是能接受的,但前提是制度的沟通稿里必须写清楚目的,而不是甩出来一张冷冰冰的管控表格。

5.2 过度管控的反噬:影子AI与形同虚设的制度

这里我想说一个身边反复出现的坑:有的公司一开始把AI编程工具全禁了,结果团队用得更野。开发者在个人电脑上开AI工具生成代码,通过聊天工具或网盘把结果传进办公环境,再粘贴到代码库里。这样的“影子AI”完全没有审计,信息照样出境,而且公司对使用情况毫不知情——管了个寂寞。

所以我一向主张,制度定底线而不是定上限。你禁止所有外部AI工具,等于把使用行为赶到看不见的地方去;你允许在指定条件下用企业版,大家反而更愿意走正规通道。制度能不能守住,不在于罚得有多重,而在于合规路径是否足够顺畅好用。

5.3 价值评估的尴尬:AI写代码的ROI怎么量化

说句实话,AI写代码这件事的投入产出很难算清楚,但管理层一定会问。我建议不要用“人均代码量”这种指标,那只会诱导大家无脑多产出、多提交。相对靠谱的几个代理指标包括:需求到首次提PR的周期、PR的平均停留时间、测试覆盖率的真实增长,以及安全扫描拦截到的问题数量变化。再有价值的是定期的匿名访谈,问工程师“同样的功能,现在和三个月前相比写代码时间少了多少”,虽然主观,但趋势明显。

特别提醒要注意的反面指标:如果测试覆盖率涨了但线上故障率没降,那说明大量测试是AI生成的水断言;如果PR周期变短但返工率上升,那说明前面写得快后面还得还债。量化一定要同时看效率和质量两个方向,只看一边就会误判。

5.4 多部门目标冲突:法务、安全、研发各说各话

落地过程中最累的其实是协调法务、安全和研发三方的预期。法务想把版权风险降到零,希望禁用所有不确定来源的AI生成代码,但这在实操上等于让大家回到纯手写时代;安全团队更关注数据泄漏和漏洞,倾向于最严格的网络管控;研发则天然站在效率一边,觉得各种限制都在添乱。

三方目标和视角完全不同,如果不找一个结构化的决策机制,会上一个月都掰扯不完。我的做法是引入“风险可接受度”的分级:把每一项限制措施都标成“可接受、需要缓解、不可接受”三个等级,需要缓解的措施配一个技术补偿手段就放行,只有真正不可接受的红线才禁止。这样各个部门至少能在同一个框架里对话,而不是各说各话。

6. 管理的边界:接下来一年我关注的变化

6.1 治理的“度”到底在哪里

做了一圈制度、技术、流程之后,我自己的体会是治理的“度”其实很难拿捏,但有一个判断标准:制度在正常使用的时候应该是透明的,只有在失控的时候才显形。如果团队每天都要为AI工具的使用填写大量表单才能开工,那治理就过重了;如果某天发生了数据泄漏或版权纠纷,公司完全没有能力追溯和调查,那治理就是过轻的。

我见过治理做得很好的团队,制度说穿了只有一页纸,但配套的扫描、审计、抽查链路一个不少。平时大家用AI工具用得很顺手,偶尔有疑问时查一下FAQ就能解决。真正出现异常时,审计日志能把问题定位到具体的人、时间、工具和内容。这个“平时无感、出事有据”的状态,应该就是管理AI写代码这件事比较理想的状态了。

6.2 团队文化比制度文本更重要

制度能约束行为的下限,但团队文化能抬高整个使用水平的上限。一个愿意分享“哪些提示词模板对我们这个项目最有效”“AI生成代码后发现哪些坑”的团队,和一个只知道“制度限制了这个、禁止了那个”的团队,长期下来产出质量会差很远。

我在内部建了一个很简单的共享文档,让大家把自己用AI写代码时觉得好用的提示词、踩过的坑、脱敏技巧都放进去。这个文档后来变成了新员工的入门教程,也成了制度培训的补充。它带来的额外好处是,团队对AI编程的态度从“被管着”慢慢变成“我们自己在管”,这个心态转变,比发多少条例都有用。

6.3 从管人用AI到管AI协作的演进

再往前看一步,AI编程正在从“帮人补全代码”往“智能体自动执行多步开发任务”演进。以后可能不是工程师在IDE里接受AI的补全建议,而是更复杂的智能体直接拉分支、改代码、跑测试、提MR,人类只是在关键节点做审批。那时候管控的对象不再是“人用了什么工具”,而是“智能体在什么条件下可以被信任、可以触碰哪些代码、可以自主到什么程度”。

这就意味着现在建立的分级分类框架,到时候只需要扩展一列“自动化等级”就能复用。很多公司在这一步之前就把框架做死了,反而要重来。所以我的建议一直是:治理体系要设计得比需求超前一点,宁可现在粗一点,也别把路堵死——AI写代码这件事,变化只会越来越快,管理的核心永远是动态调整,而不是一锤定音。

最后分享一点个人体会。我在管理AI写代码这件事上踩过最大的坑,不是技术选型选错了,也不是制度定得不严,而是一开始太想把所有问题都一次性想清楚再行动。实际上AI编程的生态每个月都在变,与其憋大招做完美方案,不如先上一个够用的框架,让风险可视、让流程可控,然后跟着团队的实际使用情况滚动调整。如果你现在正被这个问题困扰,我的建议很简单:先接通仓库侧的扫描和审计,把“看不见”变成“看得见”,再谈后面精细化的治理。很多时候,推动管理动作发生的不是制度本身,而是第一次能说出“我们的代码库里到底有多少AI生成的代码”的时刻。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进