1、AI CodeReview实践:代码变更阶段的风险识别与阻断演讲人:严宽目录010203代码审查概念及行业现状AI代码审查在B站的实践未来展望01代码审查及行业现状传统代码变更流程开发者提交代码开发者提交代码开发者发起PullRequest/MergeRequest自动化测试自动化测试人工代码审查人工代码审查通过CI流水线的方式执行一系列的自动化任务对变更进行评估测试同时有其它开发者完成本次变更的人工代码审查反馈与修改反馈与修改代码提交人针对上一步流水线的执行情况以及代码审查人员的审查意见进行修改,并重复提交直到认定审查通过代码合并代码合并代码变更合入到主分支代码审查的价值与痛点传统传统CRC
2、R 的双的双面性面性耗时耗力耗时耗力代码质量保障代码质量保障风险阻断与拦截风险阻断与拦截统一标准规范统一标准规范知识共享知识共享低效低效/流于形式流于形式主观性强主观性强知识壁垒知识壁垒大模型时代的代码审查国外:Claude Opus 4 Claude Sonnet 4 Gemini 2.5 Pro GPT-5模型1 1 PR 描述 变更评审 代码建议 chat功能2 2国外:Claude Code Gemini CLI Cursor CoplitIDE/CLI产品3 3WEB端产品 Bito AI CodeRabbit Sourcery4 4国产:Qwen3-Coder Deepseek-R
3、1 Kimi-K2国产:QwenCode 通义灵码 Comate CodeBuddy02AI代码审查在B站的实践系统全貌系统架构GPTDeepSeekClaudeGeminiQwen模型层变更审查总览MR 行间评论问题反馈交互层知识层工程编码规范业务缺陷集业务自定义规范内部技术文档框架层ChatAgentRAGCodeRAGAI CodeReview历史数据及问题追踪MR 内审查平台仅仅关注代码diff部分的简单上下文,能够支撑高质量的审查结果吗?代码上下文缺失模型切换、框架切换、提示词更新,如何对系统进行重新评估?效果评测如何让用户感知到整套系统的存在,并深度融合研测流程?用户感知大模型输出
4、结果存在不确定性,直接影响审查效果,如何进行修正?准确性/稳定性P如何解决?CDA实践落地中的挑战挑战1:代码上下文缺失如何通过变更片段感知整体仓库?变量、函数、类从哪里来?变量、函数、类从哪里来?调用链路是否被破坏?调用链路是否被破坏?跨文件跨文件/跨模块调用关系是怎么样的?跨模块调用关系是怎么样的?方案比较:文本检索1Glob:根据给定通配符,在文件系统中递归查到文件Grep:根据给定正则pattern,在文件中匹配相关内容2方案代表:Claude Code/GeminiCli方案特点:实施简单,没有语义,没有结构,只是原始的字符串匹配检索精度带来的误匹配/漏匹配问题,项目体积膨胀带来的检
5、索成本问题方案比较:RAG+构建索引1RAG:相比于传统RAG 对于文档类知识的切块方法,使用AST 可以最大程度保证代码语义和连续性,在检索方面,仍使用语义相似度的方法代码索引:Merkle树树形层级结构,节点存储hash值,作为索引底层结构,方便响应代码更新2方案代表:Cursor方案特点:更适合本地IDE场景,而非流水线执行场景语义相似度进行代码检索,并非代码链路的真实体现解决方案:构建CodeGraph实现CodeRAGCodeBaseCodeBase-CodeGraphCodeGraph三元组定义三元组定义让大模型看到真实的代码链路让大模型看到真实的代码链路构建CodeGraph:代
6、码节点解析路径节点文件节点代码仓库仓库遍历文件过滤AST 解析结构类关系符号节点构建CodeGraph:语义关系挖掘引用位置引用符号节点符号节点请求LSPAST 查询关系识别语义关系构建CodeGraph:效率提升MonoRepo拆分增量构建CodeRAG:CodeGraph-CodeContextCodeGraphCodeGraphCodeContextCodeContext#代码上下文以下是和 git diff 相关的代码上下文信息,你可以结合这些信息进行分析。#函数路径:library/cache/redis/multikey_cmd.go.splitMSet#被调用相关函数:#上层函数