---
url: /zh/build/showcase/ai-review.md
---
借助 AI 能力，你可以让流水线自动对 PR（Pull Request）进行代码评审，快速发现潜在问题、提升代码质量。

`云原生构建` 支持两种方式进行 AI 代码评审，你可以根据实际场景选择适合的方式。

## 令牌说明

流水线中提供了三个与 NPC 相关的环境变量，权限一致，都代表流水线触发者，仅用于区分不同的 NPC 角色：

| 环境变量 | 说明 |
|---------|------|
| `CNB_TOKEN` | 提及自定义 NPC 角色时，代表被提及的自定义角色 |
| `CNB_TOKEN_FOR_CODEBUDDY` | 提及系统角色 CodeBuddy 时，代表系统角色 CodeBuddy |
| `CNB_TOKEN_FOR_AI` | 可由用户在非 NPC 流水线中根据情况选用 |

## 方式对比

| 对比项 | 方式一：AI 评审插件 | 方式二：NPC 事件 |
|--------|-------------------|-----------------|
| 触发方式 | 流水线自动触发 | 在 PR 评论上提及 NPC |
| 使用的令牌 | `CNB_TOKEN_FOR_AI` | `CNB_TOKEN`（自定义角色）或 `CNB_TOKEN_FOR_CODEBUDDY`（系统角色） |
| 适用场景 | 每次 PR 事件都自动评审 | 按需评审，可灵活控制 |
| 配置位置 | `.cnb.yml` 流水线配置 | `.cnb.yml` + `.cnb/settings.yml`（自定义角色） |

## 方式一：使用 AI 评审插件

使用 `cnbcool/ai-review` 镜像作为流水线插件，当 PR 事件触发时自动进行代码评审。

### 配置示例

```yaml title=".cnb.yml"
main:
  pull_request:
    - stages:
        - name: 代码评审
          image: cnbcool/ai-review:latest
          settings:
            type: code-review
```

### 工作原理

1. 当有 PR 创建或更新事件推送到 `main` 分支时，流水线自动触发。
2. 流水线上插件使用 `CNB_TOKEN_FOR_AI` 环境变量调用 OpenAPI 的 AI 能力。
3. AI 会对 PR 的代码变更进行评审，并将评审结果以评论形式提交到 PR 上。

### 适用场景

* 每次提交 PR 都希望自动获得 AI 评审反馈
* 需要在代码合并前统一进行质量把控

## 方式二：触发 NPC 事件

在 PR 上通过评论提及 NPC 角色，触发 NPC 事件流水线执行 AI 评审。

### 触发方式

* **系统 NPC**：直接在 PR 评论中提及 `@CodeBuddy`，例如：

```text
@CodeBuddy 代码评审
```

* **自定义 NPC**：先在仓库中[配置自定义 NPC 角色](../npc.md#自定义-npc)，然后在 PR 评论中提及，例如：

```text
@cnb/feedback(评审专家) 代码评审
```

### NPC 事件工作原理

1. 当有人在 PR 上评论并提及 NPC 时，触发 `pull_request.comment@npc` 事件。
2. 系统加载 NPC 所属仓库的 `.cnb.yml` 配置，解析对应角色的事件流水线。
3. 流水线使用令牌调用 OpenAPI AI 能力进行评审：
   * 提及自定义 NPC 时，使用 `CNB_TOKEN`，代表被提及的自定义角色
   * 提及系统角色 CodeBuddy 时，使用 `CNB_TOKEN_FOR_CODEBUDDY`，代表系统角色 CodeBuddy
4. 评审结果会以 NPC 的身份提交到 PR 评论中。

详细配置说明请参考 [NPC](../npc.md) 文档。

### NPC 事件适用场景

* 需要按需触发评审，不必每次 PR 都自动评审
* 希望使用自定义的评审角色和风格
* 希望在评审同时让 NPC 执行其他自动化任务

## 注意事项

* 两种方式都需要确保流水线有足够的权限访问代码仓库和提交评论。
* NPC 事件触发的流水线执行时，其 TOKEN 权限仅限于当前仓库。
* 如果需要在评审过程中进行代码修改，可以开启 [NPC 工作模式](../npc.md#工作模式)。
