1. AIoT项目为什么需要AI辅助代码审查
1.1 从一次固件内存泄漏说起
去年下半年,我参与了一个智能家居网关的固件迭代项目。这个项目基于某款低功耗MCU,跑的是实时操作系统,代码量大概在八万行左右,涉及传感器驱动、通信协议栈、电源管理、OTA升级几个大模块。项目组一共六个人,每个人负责一到两个模块,代码合并频率很高,几乎每天都有PR要审。
问题出在一次例行版本发布之后。设备在实验室跑了两天没问题,一到现场部署,大概运行十几个小时就会莫名其妙重启。排查了整整三天,最后定位到是某个驱动模块里的一处内存分配没有对应的释放路径——在一个异常分支里提前return了,把释放逻辑跳过去了。这种问题在Code Review阶段其实是有机会发现的,但当时审这段代码的同事主要关注的是功能逻辑对不对,没注意到资源释放的完整性。
这件事之后我开始认真思考一个问题:在AIoT开发场景下,代码审查到底应该怎么做才靠谱?传统的同行评审当然有效,但人是有疲劳期的,尤其是面对大量重复性的驱动代码、协议解析代码时,注意力很容易下降。而AI辅助Code Review恰好在这个环节能补上人的短板——它不会累,不会因为赶进度而跳过检查项,而且可以针对特定领域规则做定制化扫描。
1.2 AIoT代码审查和普通应用开发有什么不同
很多人觉得代码审查就是看代码写得规不规范、有没有明显的bug,这个理解在纯应用开发里可能够用,但放到AIoT领域就太浅了。AIoT项目的代码有几个非常鲜明的特点,直接决定了审查策略必须做针对性调整。
第一是资源极度受限。MCU上的RAM可能只有几十KB,Flash也就几百KB,每一个字节都要精打细算。这意味着代码审查必须关注内存分配是否成对、栈深度是否可控、全局变量是否过多。一个在服务器端无关紧要的局部变量,在MCU上可能就是压垮骆驼的最后一根稻草。
第二是硬件耦合度高。驱动代码直接操作寄存器,时序要求严格,中断服务程序里不能做耗时操作。这些规则在普通应用开发中根本不存在,但对AIoT项目来说是生死线。审查时必须检查中断上下文里有没有调用可能阻塞的函数,有没有在ISR里做浮点运算,有没有关中断时间过长。
第三是通信协议复杂。AIoT设备通常要跑MQTT、CoAP、BLE、Zigbee等多种协议,协议栈代码的状态机逻辑很容易出问题。比如MQTT的QoS 1消息重传机制,如果状态机设计不当,可能导致消息重复消费或者丢失。这类问题靠人工审查很难覆盖全,但AI可以基于规则做系统性检查。
第四是安全要求高。设备部署在用户家里或者工业现场,固件被逆向、通信被截获的风险是真实存在的。代码审查需要关注密钥存储方式、通信加密实现、调试接口是否在生产版本中关闭等。这些检查项如果靠人一条条过,效率很低且容易遗漏。
1.3 AI辅助审查能解决哪些具体痛点
我在实际项目中梳理了一下,AI辅助Code Review在AIoT场景下最能发挥价值的几个环节:
- 重复性规则检查:比如内存分配释放配对、中断安全、volatile变量使用、位操作边界检查。这些规则明确、模式固定,AI扫描的准确率和速度都远超人工。
- 跨文件依赖分析:AIoT项目的驱动层、中间件层、应用层之间调用关系复杂,一个函数的修改可能影响多个模块。AI可以快速构建调用图,识别出受影响的代码路径。
- 协议状态机验证:针对MQTT、CoAP等协议的状态转换逻辑,AI可以检查是否存在死状态、不可达状态、缺少超时处理等问题。
- 安全漏洞初筛:缓冲区溢出、格式化字符串漏洞、整数溢出、硬编码密钥等常见安全问题,AI可以快速标记出来供人工确认。
- 编码规范一致性:团队里每个人的代码风格不同,AI可以统一检查命名规范、注释完整性、函数长度等,减少Review时的风格争论。
但这里必须说清楚一个前提:AI辅助审查是增强,不是替代。AI能发现的问题类型是有限的,它擅长模式匹配和规则检查,但对业务逻辑的合理性、架构设计的优劣、需求实现的完整性,判断力远不如有经验的工程师。所以正确的做法是让AI做第一轮筛查,把低级问题和规则性问题过滤掉,人再做第二轮深度审查,聚焦在逻辑和设计层面。
2. 搭建AI辅助审查流程的核心思路
2.1 整体架构怎么设计
我在项目里落地的方案是一个三层结构:本地预检层、CI集成层、人工复核层。这个结构的好处是兼顾了速度和深度,不会因为AI审查拖慢开发节奏。
本地预检层跑在开发者的机器上,通过Git的pre-commit钩子触发。这一层主要做快速检查,比如代码格式、命名规范、明显的语法问题,响应时间控制在几秒以内。开发者提交代码前就能发现问题,不用等到CI阶段才被打回来。
CI集成层跑在代码仓库的流水线上,每次PR创建或更新时触发。这一层做深度分析,包括静态分析工具扫描、AI模型审查、跨文件依赖检查。结果以评论形式直接贴在PR上,方便审查者参考。这一层的耗时可以放宽到几分钟,因为不阻塞开发者的本地操作。
人工复核层就是传统的同行评审,但审查者拿到的是经过AI预筛的结果,可以跳过低级问题,直接看AI标记的高风险区域和AI没覆盖到的逻辑问题。这样人的精力花在刀刃上,审查效率明显提升。
2.2 工具选型:为什么选这些而不是那些
工具选型这块我踩过不少坑,说一下最后的方案和选择理由。
静态分析工具用的是Cppcheck和Clang-Tidy的组合。Cppcheck对嵌入式C代码的支持比较好,能检查内存泄漏、未初始化变量、数组越界等问题,而且可以自定义规则。Clang-Tidy的检查项更丰富,尤其是对现代C++特性的支持更好,但配置复杂度也更高。两个工具配合使用,覆盖大部分静态检查需求。
这里有个细节:Cppcheck默认的检查级别比较保守,需要手动开启--enable=all才能启用全部检查项。但全开之后误报率会上升,所以我在项目里做了一层过滤,把确认过的误报规则加入白名单,避免噪音干扰。
AI审查模型用的是基于大语言模型的代码审查服务。选择它的原因有几个:一是支持自然语言描述审查规则,不需要写复杂的正则表达式;二是可以理解代码上下文,不是简单的模式匹配;三是可以生成可读性好的审查意见,开发者容易理解。
但这里要注意,直接用通用模型做代码审查效果有限,必须做领域适配。我的做法是准备一个AIoT领域的规则库,把常见的审查要点写成结构化的提示词,让模型按照规则逐条检查。规则库的内容包括内存管理规则、中断安全规则、通信协议规则、安全编码规则等。
CI集成用的是GitLab CI,因为项目代码托管在GitLab上,集成最方便。流水线配置里定义了几个stage:build、static-analysis、ai-review、report。每个stage的失败条件可以灵活配置,比如静态分析发现严重问题就阻断合并,AI审查发现问题只做提示不阻断。
2.3 审查规则的制定原则
规则制定是整套方案里最花时间但最值得投入的部分。我总结了几个原则:
规则要具体可执行。不要写“注意内存安全”这种模糊的规则,要写“每次调用malloc/calloc/realloc后,必须在同一函数的所有返回路径上检查是否调用了free”。规则越具体,AI执行起来越准确,误报越少。
规则要分级。我把规则分成三个级别:Error、Warning、Info。Error级别的问题必须修复才能合并,比如内存泄漏、缓冲区溢出、中断上下文调用阻塞函数。Warning级别的问题建议修复,比如函数过长、注释缺失、魔法数字。Info级别的问题仅做提示,比如命名风格不一致、可以优化的写法。
规则要可维护。AIoT项目的技术栈会演进,规则库也要跟着更新。我把规则存在一个独立的YAML文件里,每条规则有ID、描述、级别、适用文件类型、检查逻辑。这样增删改规则不需要动CI配置,维护成本低。
规则要定期回顾。每季度我会统计一下各条规则的触发次数和误报率,触发次数为零的规则考虑删除,误报率高的规则考虑优化或降级。规则库不是越多越好,精准有效才是关键。
2.4 和现有开发流程怎么融合
AI辅助审查如果不能无缝融入现有流程,推广起来阻力会很大。我的经验是尽量不改变开发者已有的习惯,而是在关键节点做增强。
开发者照常写代码、照常提交PR,只是在提交时多了一个pre-commit检查,在PR创建后多了一个AI审查评论。审查者照常做Review,只是多了一份AI生成的检查报告作为参考。
这里有个关键点:AI审查结果不能直接作为合并决策的依据。AI标记的问题需要人工确认,确认是真实问题才要求修复,确认是误报就加入白名单。这个确认过程本身就是团队学习的机会,大家对规则的理解会越来越深。
另外,AI审查的反馈要及时。如果PR创建后十分钟才出结果,开发者已经切到别的任务了,再回来看评论效率很低。所以CI流水线的优化目标是让AI审查在PR创建后三分钟内完成,这个速度下开发者还在等Review,看到评论可以立即处理。
3. 核心审查规则与实操配置
3.1 内存管理规则:AIoT项目的生命线
内存问题在AIoT项目里是头号杀手,我在这块配置的规则也最细。先看一个典型的检查场景:
// 有问题的代码示例 int sensor_read_data(sensor_handle_t *handle, uint8_t *buf, size_t len) { uint8_t *tmp = (uint8_t *)malloc(len); if (tmp == NULL) { return -1; } if (handle == NULL || buf == NULL) { return -1; // 这里直接返回了,tmp没有释放 } // ... 数据处理逻辑 memcpy(buf, tmp, len); free(tmp); return 0; }这段代码的问题很明显:在参数校验失败的分支里直接return了,导致tmp泄漏。人工审查时如果注意力不集中,很容易漏掉。AI审查配置了对应的规则后,可以稳定地标记出这类问题。
我在规则库里配置的内存管理检查项包括:
| 规则ID | 检查内容 | 级别 | 适用场景 |
|---|---|---|---|
| MEM-001 | malloc/calloc/realloc后所有返回路径是否释放 | Error | 所有C文件 |
| MEM-002 | 是否存在重复释放同一指针 | Error | 所有C文件 |
| MEM-003 | 释放后是否将指针置为NULL | Warning | 所有C文件 |
| MEM-004 | 局部数组大小是否超过栈限制 | Error | 中断服务程序 |
| MEM-005 | 是否存在内存分配失败未检查 | Error | 所有C文件 |
| MEM-006 | 全局变量数量是否超过阈值 | Warning | 所有C文件 |
MEM-004这条规则特别重要。MCU的栈空间通常很小,可能只有几KB。如果在中断服务程序里定义一个大数组,比如uint8_t buffer[1024],栈直接爆掉,程序跑飞。AI审查会扫描ISR里的局部变量声明,计算总大小,超过阈值就报警。
配置这条规则时,阈值怎么定?我的做法是先查芯片手册确认栈大小,然后留50%的余量。比如栈是4KB,那ISR里的局部变量总大小不超过2KB。这个阈值写在规则配置里,AI按这个标准检查。
注意:内存管理规则里最容易误报的是“释放后置NULL”这条。有些代码在释放后立即退出函数,指针不会再被使用,置NULL确实多余。我的处理方式是把这类情况加入白名单,但要求开发者在代码里加注释说明,比如
// free后立即return,无需置NULL。这样既减少了误报,又保留了代码的可读性。
3.2 中断安全规则:容易被忽视的重灾区
中断服务程序的代码审查是AIoT项目特有的难点。普通应用开发很少直接写ISR,但AIoT项目里ISR代码占比不低,而且一旦出问题就是系统级的。
我配置的中断安全规则包括:
- ISR-001:ISR中是否调用了可能阻塞的函数(如malloc、printf、sleep、mutex_lock)
- ISR-002:ISR中是否执行了浮点运算(除非硬件支持FPU且已保存上下文)
- ISR-003:ISR执行时间是否可能超过阈值(通过估算循环次数和函数调用深度)
- ISR-004:ISR中访问的共享变量是否声明为volatile
- ISR-005:ISR中是否有关中断时间过长的操作
ISR-001这条规则救过我好几次。有一次同事在ISR里调用了printf做调试输出,在实验室跑没问题,因为串口输出快。但现场设备串口波特率低,printf阻塞导致ISR执行时间过长,触发了看门狗复位。AI审查在PR阶段就标记了这个问题,省去了现场排查的痛苦。
ISR-004也是高频问题。共享变量没加volatile,编译器优化后可能把变量缓存到寄存器里,导致主循环读不到ISR的更新。这种问题在Debug版本可能正常,Release版本就出问题,非常隐蔽。AI审查会检查ISR中写入的全局变量是否在声明时加了volatile。
配置ISR-003的阈值时,我的经验值是ISR执行时间不超过100微秒。这个值怎么来的?假设系统主频100MHz,100微秒就是10000个时钟周期。一般指令1-2个周期,算下来ISR里大概能执行几千条指令。超过这个量级,中断延迟就会影响其他中断的响应,实时性无法保证。
3.3 通信协议规则:状态机是重点
AIoT设备的通信协议栈代码,状态机逻辑是审查重点。我以MQTT客户端为例说明配置的规则。
MQTT协议的状态机涉及连接、订阅、发布、心跳、重连等多个状态。常见的问题包括:QoS 1消息发出后等待PUBACK,如果超时没收到,需要重发,但重发次数和间隔要有上限;心跳包发送间隔要小于Keep Alive时间,否则服务端会断开连接;重连后需要重新订阅之前的Topic。
AI审查配置的规则包括:
- MQTT-001:QoS 1/2消息是否有重传机制和重传上限
- MQTT-002:心跳发送间隔是否小于Keep Alive的2/3
- MQTT-003:重连后是否重新订阅所有必要Topic
- MQTT-004:消息ID分配是否可能溢出或重复
- MQTT-005:断开连接时是否清理会话状态
MQTT-002这条规则的计算逻辑是:Keep Alive设为60秒,心跳间隔应该小于40秒。因为网络有延迟,如果心跳间隔太接近Keep Alive,服务端可能在心跳到达前就判定超时了。AI审查会读取代码里的心跳定时器配置,和Keep Alive参数做比较,不符合规则就报警。
MQTT-004也是容易出问题的地方。消息ID通常是16位无符号整数,从1开始递增,到65535后回绕。如果代码里没有处理回绕,或者回绕后分配了正在使用中的ID,就会导致消息确认混乱。AI审查会检查消息ID的分配逻辑,确认是否有回绕处理和冲突检测。
3.4 安全编码规则:生产版本必须过的一关
安全编码规则在开发阶段容易被忽视,但生产版本必须严格检查。我配置的规则包括:
- SEC-001:是否存在硬编码密钥或密码
- SEC-002:缓冲区操作是否检查边界(strcpy、sprintf、memcpy等)
- SEC-003:是否使用了不安全的随机数生成函数(如rand)
- SEC-004:调试接口在生产版本中是否关闭
- SEC-005:通信数据是否加密传输
- SEC-006:固件升级是否验证签名
SEC-001这条规则用AI来做特别合适。硬编码密钥的形式多种多样,可能是字符串常量、字节数组、十六进制数,靠正则表达式很难覆盖全。AI模型可以理解代码语义,识别出哪些常量可能是密钥。比如看到uint8_t key[16] = {0x2b, 0x7e, ...}这样的声明,即使变量名不叫key,AI也能根据上下文判断出这可能是加密密钥。
SEC-004的检查需要区分构建类型。开发版本可以保留调试接口方便排查问题,但生产版本必须关闭。AI审查会检查代码里是否有条件编译宏控制调试接口,比如#ifdef DEBUG_ENABLE,并确认生产构建配置里没有定义这个宏。
实操心得:安全规则的误报率相对较高,因为AI对“什么是密钥”的判断有时会过于敏感。我的做法是把安全规则设为Warning级别,不阻断合并,但要求审查者必须逐条确认。确认是误报的,在代码里加注释说明,比如
// 此常量非密钥,仅用于测试,下次AI扫描时就会跳过。
3.5 CI流水线的具体配置
CI流水线的配置直接决定AI审查能不能落地。我以GitLab CI为例,展示核心配置:
stages: - build - static-analysis - ai-review - report variables: GIT_DEPTH: 10 static-analysis: stage: static-analysis script: - cppcheck --enable=all --suppress=missingIncludeSystem --inline-suppr --xml --output-file=cppcheck.xml src/ - clang-tidy -checks='*' -header-filter='.*' src/**/*.c -- -Iinclude > clang-tidy.txt artifacts: paths: - cppcheck.xml - clang-tidy.txt expire_in: 1 week allow_failure: false ai-review: stage: ai-review script: - python3 scripts/ai_review.py --diff-target $CI_MERGE_REQUEST_TARGET_BRANCH_NAME --rules config/aiot_rules.yaml --output ai_review_result.json - python3 scripts/post_comments.py --input ai_review_result.json --project-id $CI_PROJECT_ID --mr-id $CI_MERGE_REQUEST_IID artifacts: paths: - ai_review_result.json expire_in: 1 week only: - merge_requests allow_failure: true这个配置里几个关键点:GIT_DEPTH: 10是为了让AI审查能拿到足够的Git历史做diff分析;allow_failure: false表示静态分析发现问题会阻断流水线;allow_failure: true表示AI审查发现问题只做提示不阻断,因为AI审查有误报可能。
ai_review.py脚本的核心逻辑是:先获取PR的diff,提取出变更的文件和行号;然后加载规则库,对每条规则生成对应的提示词;接着调用AI模型API,把代码片段和规则一起发给模型;最后解析模型返回的结果,格式化成评论。
post_comments.py脚本负责把审查结果贴到PR上。这里有个细节:评论要按文件和行号定位,GitLab的API支持在特定行上创建讨论。如果AI发现的问题在变更行上,就直接在该行创建评论;如果问题在未变更的行上但受变更影响,就在PR的总体评论里说明。
4. 实操过程中的问题与排查技巧
4.1 AI审查误报太多怎么办
这是推广AI审查时最先遇到的问题。刚开始跑的时候,一个PR能报出几十条问题,开发者一看就烦了,觉得AI在添乱。我的处理分三步:
第一步是分类统计。把误报按规则ID分组,看哪几条规则的误报最多。实际统计下来,80%的误报集中在20%的规则上,把这些规则优化好,整体体验就上来了。
第二步是规则调优。以“释放后置NULL”这条规则为例,最初的实现是只要发现free后没有置NULL就报警。优化后改成:如果free后在同一函数内还有对该指针的访问,才报警;如果free后直接return或者函数结束,就不报警。这样误报率从60%降到了10%以下。
第三步是白名单机制。对于确认的误报,支持在代码里加注释标记,比如// ai-review:ignore MEM-003,AI扫描时看到这个标记就跳过对应规则。白名单要定期清理,避免积累太多失效的忽略标记。
4.2 AI审查速度太慢怎么优化
AI审查的速度取决于两个因素:代码量和模型推理时间。一个PR如果改了上千行代码,全部发给AI模型,响应时间可能超过五分钟,开发者等不了。
我的优化策略是分层处理。对于变更行数少于200行的PR,全量发给AI审查;对于超过200行的PR,先做静态分析筛选,只把静态分析标记的文件和AI规则命中的文件发给AI审查,其他文件跳过。这样大部分PR的审查时间控制在两分钟以内。
另一个优化是缓存机制。如果某个文件的内容没有变化,只是行号偏移了,AI审查结果可以复用。我在脚本里计算每个文件的哈希值,和上次审查的哈希对比,相同的直接复用结果,不同的才重新审查。
还有一个技巧是并行处理。把PR里的多个文件拆开,并行调用AI模型API,最后合并结果。这样总耗时取决于最慢的那个文件,而不是所有文件的总和。但要注意API的并发限制,别把配额打满了。
4.3 团队不接受AI审查结果怎么办
技术问题好解决,人的问题才难。刚开始推广时,有同事觉得AI审查是“外行指导内行”,对AI提的意见不屑一顾。我的应对方式是:
先做加法,再做减法。一开始只启用Error级别的规则,这些规则误报率低,报出来的问题确实是真问题。等大家认可了AI审查的价值,再逐步启用Warning和Info级别的规则。
用数据说话。我统计了一个月的数据:AI审查在PR阶段发现了15个内存泄漏问题、8个中断安全问题、3个安全编码问题。这些问题如果漏到测试阶段,修复成本至少是PR阶段的10倍。把这个数据在团队会议上展示后,大家的接受度明显提高。
保留人工最终决定权。AI审查结果只是参考,最终是否修复由审查者决定。如果审查者认为AI报的问题不是问题,可以标记为“已确认非问题”,这个操作会被记录,用于后续优化规则。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| AI审查无结果返回 | API密钥过期或配额耗尽 | 检查API调用日志 | 更新密钥或申请更多配额 |
| 审查结果和代码行号对不上 | diff解析错误 | 对比diff文件和实际代码 | 修正diff解析逻辑,处理重命名和移动 |
| 同一问题重复报告 | 缓存失效或规则重叠 | 检查规则ID和缓存哈希 | 合并重叠规则,修复缓存逻辑 |
| 审查时间超过5分钟 | 代码量过大或API限流 | 统计文件数和API调用次数 | 启用分层处理和并行调用 |
| 误报率突然升高 | 规则库更新引入问题 | 对比规则库版本 | 回滚规则库或调整规则参数 |
| CI流水线卡在ai-review阶段 | 脚本异常未退出 | 查看CI日志 | 加超时机制和异常捕获 |
4.5 几个容易踩的坑
坑一:规则库版本管理混乱。最开始规则库直接放在CI配置里,改规则要改CI文件,很容易冲突。后来把规则库独立成YAML文件,用Git管理,每次修改都有记录,回滚也方便。
坑二:AI审查结果没有持久化。一开始审查结果只在PR评论里,PR合并后就找不到了。后来把结果存到数据库,可以按时间、规则、文件维度做统计,为规则优化提供数据支撑。
坑三:忽略了AI模型的上下文限制。大语言模型有token限制,一个文件太大发不进去。我的处理是把大文件按函数切分,每个函数单独审查,最后合并结果。切分时要保留函数间的调用关系信息,否则AI判断不了跨函数的资源管理问题。
坑四:没有处理二进制文件和生成代码。AI审查应该只针对手写代码,自动生成的代码和二进制文件要排除。我在脚本里加了文件类型过滤,只审查.c、.h、.cpp、.hpp文件,其他类型跳过。
坑五:审查规则和编码规范脱节。AI审查规则应该和团队的编码规范保持一致,否则会出现“规范说可以,AI说不行”的矛盾。我的做法是把编码规范里的每一条都映射到AI规则,确保两者同步更新。
5. 效果评估与持续改进
5.1 怎么衡量AI审查的效果
效果评估不能只看“发现了多少问题”,要看“发现了多少有价值的问题”和“节省了多少时间”。我用的指标包括:
- 有效问题率:AI报告的问题中,确认为真实问题的比例。目标值80%以上。
- 问题逃逸率:AI审查后仍然漏到测试阶段的问题比例。目标值比纯人工审查降低50%。
- 审查耗时:从PR创建到审查完成的时间。目标值3分钟以内。
- 开发者满意度:定期调研开发者对AI审查的接受度。目标值70%以上认为有帮助。
这几个指标里,问题逃逸率最能说明AI审查的实际价值。我统计了引入AI审查前后各三个月的数据:引入前,测试阶段发现的内存相关问题平均每月4.2个;引入后,降到1.8个。考虑到项目代码量在这期间增长了30%,这个改善幅度是显著的。
5.2 规则库的迭代节奏
规则库不是一次配好就完事了,需要持续迭代。我的迭代节奏是:
每周做一次快速回顾,看有没有误报集中的规则需要紧急调整。每月做一次统计分析,看各规则的触发次数和有效问题率,触发次数为零的规则考虑删除,有效问题率低于50%的规则考虑优化。每季度做一次全面评审,结合项目技术栈的变化,增删规则,调整级别。
迭代时要注意向后兼容。删除规则要谨慎,因为可能有历史PR引用了这条规则。我的做法是先把规则标记为deprecated,保留三个月,确认没有引用后再删除。
5.3 后续可以扩展的方向
这套方案跑了大半年,基本稳定了。后续我计划从几个方向做扩展:
一是接入更多静态分析工具。目前只用了Cppcheck和Clang-Tidy,后续考虑接入Coverity或者SonarQube,覆盖更多检查项。但要注意工具间的规则去重,避免同一问题被多个工具报告。
二是做AI审查结果的趋势分析。把每次审查的结果存到时序数据库,分析问题类型的变化趋势。比如内存问题是不是在减少,安全问题的占比是不是在上升。这些趋势可以指导后续的培训重点和规则调整方向。
三是把AI审查前移到编码阶段。目前AI审查在PR阶段触发,后续考虑在IDE里做实时检查,开发者写代码时就能看到AI的提示。这需要开发IDE插件,把AI审查能力嵌入到编辑器中,技术复杂度更高,但价值也更大。
四是建立团队级的规则共享库。目前规则库是项目级的,后续考虑把通用规则抽出来做成团队级共享库,新项目可以直接复用,减少重复配置的工作量。
这套AI辅助Code Review的方案,核心思路是让机器做机器擅长的事,让人做人擅长的事。AI负责规则检查、模式匹配、重复性工作,人负责逻辑判断、架构设计、业务合理性。两者配合,才能在AIoT这种复杂度高、资源受限、安全要求严的领域里,把代码质量真正管起来。