适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

文章深入探讨了如何利用 Claude Code 在阿里云 AONE 研发协同平台构建智能 AI 代码评审流程。针对当前人工评审耗时、AI 工具误报多、分析不深入等痛点,作者提出将 Claude Code 的 AI Agent 能力与 AONE MCP Server 结合,集成到 CI 流水线中。核心设计包括可配置的流水线模板、基于 MCP 的 CR 信息交互、变更代码智能分层处理(未分析、部分分析、重审区域)以及 Multi/Background Agent 并行处理。文章展示了实际运行效果,并估算可提效 50%以上,长期可达 80%并能发现人工难以察觉的潜在问题。同时,提供了详细的接入指南、使用建议及未来优化方向,为团队探索 AI 赋能研发提效提供了具体的实践案例。




阿里妹导读

通过这篇文章,你将了解到Claude Code用于CR的流水线搭建原理和效果,如何在1分钟内接入你的代码项目,并启发你对AI Coding Agent用于CI/CD提效的思考。

Aone为阿里一站式智能研发协同平台,实际操作可替换其他对应平台。

问题痛点

当前CR流程说明目前我们组的CR流程,是研发完成代码开发后,在代码平台上手动开启代码评审单,交由多位同学人工评审,同时触发Aone AI评审。

当前流程的主要问题如下:

1. 人工评审耗时较长,员工心力消耗大,可能会拖慢小组整体的研发节奏,同时也不一定保证能发现所有问题;

2. 现有的代码分析、AI评审工具,也都存在一些经常发生的问题:

  • 误报较多;

  • 分析不够深入,无法联合分析上下游代码,许多业务逻辑问题难发现;

  • 纠正意见不太实用。

解决思路

我们尝试利用Claude Code的强大AI Coding Agent能力,结合AONE MCP Server,来在代码平台CI流水线中实现更智能的AI代码评审,为团队提供一个低成本、高收益的代码质量检查工具。

适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

Claude Code 官方文档:https://docs.anthropic.com/zh-CN/docs/claude-code/quickstart

当前效果

运行效果

当代码评审开启以及后续新增commit时,会触发CR流水线开启AI分析,最终将分析结果同步至CR评论区,如下图(发现了项目里一直存在但没人提出的死循环阻塞获取限流锁的代码)。

适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

提效效果

目前体感来看,许多AI建议是有必要的、能启发人的。其中,人分析到但AI没考虑到的情况比较少。但是,因为还在调试阶段,所以也不是能解决全部问题。因此,估摸给个数字的话,可能是 提效50% 以上。

长期预测来看,如果后续调教优化得好,应该在以下2方面给CR工作带来明显收益:

  • 提效:辅助人工,大幅减少发现问题、分析问题、给出建议的时间,80%不是问题;

  • 提质:超越人工,发现人工察觉不了的潜在问题,给质量工程满满安全感;

解决方案详细说明

整体流程架构

适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

核心设计要点

1. 可配置的Claude Code流水线模板

封装了一个流水线模板在代码平台市场,提供了自动安装最新Claude Code的容器环境,支持配置Claude Code API相关信息、Aone MCP Server API、容器执行Shell脚本(可以完全自定义如何调用Claude Code)、流水线触发条件和事件通知方式。

2. 基于MCP的CR信息交互

通过AONE MCP Server获取CR相关信息,避免了git获取远程信息时的权限问题。

3. 变更代码智能分层处理策略

  • Level 1:完全未分析的区域 → 重点深度分析;

  • Level 2:部分分析过的区域 → 对于后续新增commit里,增量的新代码进行重点分析;

  • Level 3:已完整分析过的区域 → 简单的重审分析;

4. Multi/Background Agent 并行处理提升效率

3个处理器同时工作,每个专注于不同类型的代码变更,提高整体处理速度。

5. 超时控制

调用Claude Code实例时,指定最大运行时长,默认30分钟。

具体流水线配置(迭代优化中)

    name: Claude Code AI CR

    triggers:
      push:
        branches:
          - feature/**
      merge_request:
        target-branches:
          - '**'
    params:
      ANTHROPIC_BASE_URL:
        name: ANTHROPIC_BASE_URL
        description: Claude Code 环境变量,指定模型端口地址
        required: true
      ANTHROPIC_AUTH_TOKEN:
        name: ANTHROPIC_AUTH_TOKEN
        description: Claude Code 环境变量,指定模型访问密钥
        required: true
      ANTHROPIC_MODEL:
        name: ANTHROPIC_MODEL
        description: Claude Code 环境变量,指定模型型号,可为空
        required: false
      AONE_MCP_URL:
        name: AONE_MCP_URL
        description: AONE MCP SERVER的url,在code界面右侧可以获取到
        required: true
      shell:
        name: shell
        description: 执行脚本
        required: false
        default: |-
          #!/bin/bash
    # =============================================================================
    # 基于 MCP 的智能分层 AI 代码评审系统
    # 解决方案:通过 AONE MCP 获取 CR 信息,实现智能增量分析
    # =============================================================================
    # 配置 MCP 连接
    cat > mcp.json << 'EOF'
    {
      "mcpServers": {
        "aone": {
          "type""sse",
          "url""${{params.AONE_MCP_URL}}"
        }
      }
    }
    EOF
    repo=${{git.repo}}
    sourceBranch=${{git.branch}}
    echo "仓库: ${repo}, 分支: ${sourceBranch}"
    # =============================================================================
    # 步骤1: 检查是否存在评审中的 CR
    # =============================================================================
    echo "步骤1: 查找评审中的 CR..."
    cr_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__list_repo_merge_requests" --print "使用 aone mcp 的 list_repo_merge_requests 工具,指定3个参数为 repo=${repo}, state=opened, sourceBranch=${sourceBranch} 来查看评审中的 CR,如果失败请重试3次,如果最终还是不存在,则返回 'CR_NOT_FOUND'")

    echo "CR查询结果: $cr_info"
    echo "$cr_info" | grep -q 'CR_NOT_FOUND' && {
        echo "未找到评审中的 CR,退出分析"
        exit 0
    }

    # 判断已经存在的CR评论是否已经超过限制
    comments_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__list_merge_request_comments" --continue --print "使用 mcp__aone__list_merge_request_comments 工具获取当前分支已经提过的所有评论信息,如果已经存在的高风险问题评论数量超过 15个,则返回'CR_MORE_LIMIT',否则返回未超过限制")
    echo "评论结果: $comments_info"
    echo "$comments_info" | grep -q 'CR_MORE_LIMIT' && {
        echo "添加评论已超过限制,退出分析"
        exit 0
    }

    # =============================================================================
    # 步骤2: 获取 CR 的变更文件和现有评论
    # =============================================================================
    echo "步骤2: 获取 CR 变更文件和现有评论..."
    # 获取变更文件列表
    echo "===================================获取变更文件列表 START=========================================="
    claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__list_merge_request_changed_files" --continue --print "使用 mcp__aone__list_merge_request_changed_files 工具获取当前分支用户更改过的所有变更文件列表,生成一个changed_files.md,必须写changed_files.md 文件成功,如果没有成功请重试3次"
    cat changed_files.md
    echo "
    ===================================获取变更文件列表 END==========================================
    "

    # 获取现有评论
    echo "===================================获取现有评论 START=========================================="
    claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__list_merge_request_comments" --continue --print "使用 mcp__aone__list_merge_request_comments 工具获取当前分支已经提过的所有评论信息,生成一个existing_comments.md,必须写 existing_comments.md 文件成功,如果没有成功请重试3次"
    cat existing_comments.md
    echo "
    ===================================获取现有评论 END==========================================
    "

    # =============================================================================
    # 步骤3: 主控分析器 - 智能分层分析
    # =============================================================================
    echo "步骤3: 执行智能分层分析..."

    exe_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__get_changed_file_diff" --print "
    作为代码评审的主控分析器,执行以下任务:

    1. 读取当前分支中变更文件列表文档:changed_files.md
    2. 读取当前分支中现有评论文档:existing_comments.md 
    3. 使用 mcp__aone__get_changed_file_diff 工具获取每个变更文件的具体 diff, 如果获取失败,忽略该文件,继续获取下个变更文件的具体 diff

    然后进行智能分层分析,对变更区域进行3个划分,生成3个精炼的描述文件:

    **level1_unanalyzed.md** - 完全未分析的区域
    - 格式:文件路径 | 行号范围 | 变更类型 | 关键信息
    - 区域判断标准:没有任何评论覆盖的代码变更区域
    - 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

    **level2_partial.md** - 部分分析过的区域  
    - 格式:文件路径 | 行号范围 | 变更类型 | 新增部分描述
    - 区域判断标准:有部分评论但存在新增行的代码区域
    - 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

    **level3_recheck.md** - 需要重新审视的区域
    - 格式:文件路径 | 行号范围 | 变更类型 | 重审原因
    - 区域判断标准:已有评论但代码发生显著变化的区域
    - 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

    要求:
    - 执行必须检查 changed_files.md 和 existing_comments.md  是否存在,如果不存在,则返回 'FILE_NOT_FOUND'
    - 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加评论!
    - 每个描述文件内容精炼简短
    - 明确标识出具体的文件路径和行号范围
    - 便于后续3个处理器并行处理
    - 同样的问题不能重复提评论
    - 添加的评论必须添加到对应代码对应的行数位置,不允许错位
    - 仅采纳高风险问题
    - 添加的评论必须检查之前是否已经存在相似评论,如果已经存在相似评论,不能重复添加
    - 三个分层添加的评论,必须追加到 existing_comments.md, 每次添加评论必须检查是否在 existing_comments.md 存在相似记录,存在就不能重复添加

    ")

    echo "分层分析执行结果: $exe_info"
    echo "$exe_info" | grep -q 'FILE_NOT_FOUND' && {
        echo "未找到变更文件和评论,退出分析"
        exit 0
    }

    # =============================================================================
    # 步骤4: 分层并行处理(3个独立的 Claude Code 实例)
    # =============================================================================
    echo "步骤4: 启动分层并行处理..."
    # Level 1 处理器 - 深度分析未分析区域
    echo "启动 Level 1 处理器(深度分析)..."
    claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
    作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 1 处理器,专注深度分析:

    1. 读取 level1_unanalyzed.md 中的未分析区域
    2. 对这些区域进行完整的代码审查(重点:全面分析逻辑、性能问题)
    3. 给出问题点分析,严格遵守以下5个要点
    **统一评论格式要求:**
    - 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
    - 问题描述
    - 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
    - 修改建议
    - Markdown 格式,良好可读性
    4. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

    ⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!

    要求:
    - 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
    - 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
    - 仅采纳高风险问题
    - 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,只有没有存在相似评论才调用工具添加评论
    - 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 存在相似记录,存在就不能重复添加
    - 类属性访问范围、接口访问范围 不添加评论
    " &
    level1_pid=$!

    # Level 2 处理器 - 增量分析部分分析区域  
    echo "启动 Level 2 处理器(增量分析)..."
    timeout 1800 claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
    作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 2 处理器,专注增量分析:

    1. 读取 level2_partial.md 中的部分分析区域
    2. 重点关注新增的代码行(重点:新增逻辑正确性、兼容性、边界情况)
    3. 避免与现有评论重复,只分析新增部分
    4. 给出问题点分析,严格遵守以下5个要点
    **统一评论格式要求:**
    - 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
    - 问题描述
    - 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
    - 修改建议
    - Markdown 格式,良好可读性
    5. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

    ⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!
    要求:
    - 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
    - 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
    - 仅采纳高风险问题
    - 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,只有没有存在相似评论才调用工具添加评论
    - 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 存在相似记录,存在就不能重复添加
    - 类属性访问范围、接口访问范围 不添加评论
    " &
    level2_pid=$!

    # Level 3 处理器 - 轻量重审变更影响
    echo "启动 Level 3 处理器(变更影响重审)..."
    timeout 1800 claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
    作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 3 处理器,专注变更影响重审:

    1. 读取 level3_recheck.md 中需要重审的区域
    2. 分析代码变更对现有逻辑的影响(重点:接口变更、业务逻辑风险)
    3. 检查是否有破坏性变更或逻辑冲突
    4. 给出问题点分析,严格遵守以下5个要点
    **统一评论格式要求:**
    - 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
    - 问题描述
    - 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
    - 修改建议
    - Markdown 格式,良好可读性
    5. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

    ⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!
    要求:
    - 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
    - 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
    - 仅采纳高风险问题
    - 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,只有没有存在相似评论才调用工具添加评论
    - 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 存在相似评论,存在就不能重复添加!
    - 类属性访问范围、接口访问范围 不添加评论
    " &
    level3_pid=$!

    # 等待所有并行处理器完成(带超时监控)
    echo "等待所有处理器完成(最多10分钟)..."
    start_time=$(date +%s)
    max_wait=1800  # 10分钟

    while truedo
        current_time=$(date +%s)
        elapsed=$((current_time - start_time))
        
        # 检查是否超过最大等待时间
        if [ $elapsed -gt $max_wait ]; then
            echo "处理器运行时间超过 ${max_wait} 秒,强制终止..."
            kill $level1_pid $level2_pid $level3_pid 2>/dev/null
            echo "所有处理器已强制终止"
            break
        fi
        
        # 检查所有进程是否完成
        if ! kill -0 $level1_pid 2>/dev/null && ! kill -0 $level2_pid 2>/dev/null && ! kill -0 $level3_pid 2>/dev/null; then
            echo "所有处理器已完成"
            break
        fi
        
        # 显示进度
        running_count=0
        kill -0 $level1_pid 2>/dev/null && running_count=$((running_count + 1))
        kill -0 $level2_pid 2>/dev/null && running_count=$((running_count + 1))
        kill -0 $level3_pid 2>/dev/null && running_count=$((running_count + 1))
        
        echo "还有 ${running_count} 个处理器在运行中... (已运行 ${elapsed}s)"
        sleep 30  # 每30秒检查一次
    done

    echo "智能分层 AI 代码评审完成!"

    # =============================================================================
    # 验证步骤:检查是否真的添加了评论
    # =============================================================================
    echo "验证步骤: 检查AI是否真的添加了评论..."
    claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone__list_merge_request_comments" --print "
    验证任务:
    1. 使用 mcp__aone__list_merge_request_comments 工具重新获取CR的所有评论
    2. 对比旧的existing_comments.md,检查是否有新的AI评论被添加
    3. 如果没有发现新评论,明确报告'验证失败:AI未添加任何评论'
    4. 如果发现了新评论,报告'验证成功:AI成功添加了X条评论'
    "
    # =============================================================================
    # 完成总结
    # =============================================================================
    echo "
    ✅分析完成总结:
    "
    jobs:
      claude-code:
        image: alios-8u
        steps:
          - uses: checkout
          - uses: setup-env
            inputs:
              node-version: 20
              tnpm-version: 10
              tnpm-cache: true
          - id: Claude_Code_Run
            run: |-
              tnpm install -g @anthropic-ai/claude-code
              export ANTHROPIC_BASE_URL=${{params.ANTHROPIC_BASE_URL}}
              export ANTHROPIC_AUTH_TOKEN=${{params.ANTHROPIC_AUTH_TOKEN}}
              export ANTHROPIC_MODEL=${{params.ANTHROPIC_MODEL}}
              echo claude-code安装成功
              ${{params.shell}}
              

    使用方式:如何让你的代码库一分钟快速接入

    1. 在代码仓库的持续集成页面,点击新建任务。

    2. 在模板市场中,搜索 Claude Code AI CR 模板并引用。

    适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

    3. 配置4个环境变量:

    • ANTHROPIC_BASE_URL: Claude Code 模型端点地址;

    • ANTHROPIC_AUTH_TOKEN: Claude Code 访问密钥;

    • ANTHROPIC_MODEL: 模型型号;

    • AONE_MCP_URL: Aone · 代码平台的MCP端口;

    适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

    4. 确认一下,触发策略这里最后选上这2个时机(通配符规则自己定)。

    适用所有团队研发提效|带你 1 分钟上手基于 Claude Code 的 AI 代码评审实践

    5. 提交配置。

    6. 随后,开启一个代码评审,即可触发。通过观测流水线日志和CR评论区,来判断是否运行成功。

    💡 注意

    入参配置里的shell,不填的话会默认使用我提供的命令(见上面流水线的脚本)。如果你觉得效果不好,需要调整(确实有很多细节要调整),可以自己设置哦。

    使用建议

    为了获得更好的CR效果,建议在项目中:

    • 定制优化你的流水线Shell命令:当前流水线模板相当于提供了运行Claude Code的容器环境,里面如何执行命令、如何调用Claude Code,完全由你来自定义(将运行命令脚本填入入参配置里的shell字段,容器会在配置好Claude Code环境后,运行你的脚本)。

    • 维护好CLAUDE.md(如果不了解,请查一下Claude Code相关使用教程)。

    • 针对项目的特点,优化prompt和工具调用,比如重要项目强调数据一致性问题的检查。

    • 建立起需求文档在代码库中的维护习惯,AI Coding后期本质上将会是文档工程,文档质量决定了Agent在代码研发周期里的提效上限。

    后续优化方向

    1. Background Agent 模式的应用:当前我们只是简单的对CR中变更代码,就“是否已经被分析过”来进行了简单的划分,然后并行执行。在不同的项目中,完全可以进行不同纬度的划分,来并行处理。

    2. Sub Agent 模式的应用:是由Claude Code支持的模式,可以在一个agent实例中将任务分给不同的子agent去并行做不同的事,专人专职,分析力更强,减少了上下文限制和幻觉的影响。比如,对一个CR任务,可以建立起 代码规范检查agent、上下游业务影响分析agent、数据一致性分析agent、稳定性分析agent 的协作机制。

    3. Prompt 工程、上下文工程的调优:如何在提出要求之前准备好模型可能需要的一切?

    4. Memory 机制的建立:如何将整个代码库的历史变更、历史文档、历史CR,作为长期记忆留存下来并反哺?

    总结

    通过这次Claude Code AI CR流水线的实践,我们实现了包括但不限于:

    • 自动检测评审中的CR并进行智能分析;

    • 基于现有评论避免重复分析,提高效率

    • 通过分层处理策略,针对不同复杂度的代码变更采用不同的分析深度;

    • 多个Claude Code实例并行处理,显著缩短分析时间;

    • 直接在CR页面添加结构化的评审意见,包含问题描述、风险等级、修改建议等;

    • 发现人工容易遗漏的潜在问题(如案例中的死循环阻塞问题);

    • 沉淀了可配置的流水线模板,支持一键部署和复用;

    AI Coding Agent在代码评审场景的应用证明了其实用价值,50%+的提效不仅减轻了人工负担,也提升了问题发现的广度和深度这套方案展示了将AI Agent集成到现有研发流程中的一种可行路径,为团队探索AI提效提供了具体的参考案例。

    当然,这个方案更多是给大家提供一个实践思路和技术起点,后续的优化空间还很大。

    希望这次分享能启发更多团队探索AI Coding在自己业务场景中的应用可能性,共同推动研发效率的提升!欢迎大家尝试使用并提供反馈建议!


    AI 前线

    6000 字复盘:Google AI 变猛记——从 Nano Banna、Genie 3、Veo 3 到 Gemini 2.5 的绝地反击

    2026-1-3 2:14:21

    AI 前线

    这一年做 Agent 的公司,Coding 赚了钱,客服融了钱,你呢?

    2026-1-3 2:14:23

    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索