Skip to content

AI Code Review

AI Code Review与CI/CD工作流

在您的项目中添加.gitea/workflows/code-review.yml , 这里使用kekxv/AiReviewPR@v0.0.6来进行AI Code Review

name: ai-reviews

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Review code
        uses: kekxv/AiReviewPR@v0.0.6
        with:
          model: ${{ vars.MODEL }}
          host: ${{ vars.OLLAMA_HOST }}
          REVIEW_PULL_REQUEST: false

DevStar代码托管平台中项目设置、用户设置和后台管理中都可以设置变量vars.MODEL、vars.OLLAMA_HOST等。

AI Code Review详解

一、核心工作流程说明

AI Code Review 的执行过程如下:

  1. 触发条件
    • 当有人新建 PR(pull_request/opened)
    • 或更新了 PR(pull_request/synchronize) → 工作流自动开始执行。
  2. 代码检出(Checkout) 使用 actions/checkout 拉取 PR 的代码差异,为审查准备上下文。
  3. 调用 AiReviewPR Action
    • Action 会读取 PR 的 diff、文件内容与上下文。
    • 将这些内容组装为审查提示(prompt)。
    • 调用你配置的大模型(Ollama、OpenAI 兼容接口等)。
    • 获得模型输出后,自动写入 PR 评论区或输出到日志。
  4. 输出结果
    • 如果 REVIEW_PULL_REQUEST=true → 自动在 PR 下评论。
    • 如果为 false → 只在日志输出,便于本地验证。

二、AiReviewPR 的内部实现机制

以下是 Action 的实际工作方式(代码见 GitHub):

1. 自动收集 PR 信息

Action 会自动读取:

  • PR 编号、作者、提交信息
  • diff 内容(新增、删除、修改)
  • 受影响的文件内容

读取 PR Diff

const diff = await octokit.pulls.get({
  ...github.context.issue,
  mediaType: { format: "diff" },
}).then(r => r.data);

2. 构建审查 Prompt

Prompt 会自动包含:

  • 代码变更摘要

  • 修改前/修改后的代码片段

  • 模型需要回答的格式,例如:

    1. 潜在Bug
    2. 代码风格问题
    3. 性能优化
    4. 安全风险
    5. 重构建议

3. 调用大模型 API

AiReviewPR 支持任意 OpenAI API 兼容模型,例如:

  • 本地 Ollama
  • OpenAI、DeepSeek、Qwen 公开服务
  • 私有化模型服务

只需提供:

vars.MODEL
vars.OLLAMA_HOST

Action 会自动发送:

{
  "model": "qwen2.5:14b",
  "messages": [
    {"role": "system", "content": "..."},
    {"role": "user", "content": "这是PR的代码修改内容..."}
  ]
}

4. 返回数据解析

Action 提取模型的回答内容,将其转换为 Markdown,并根据配置输出为:

  • GitHub/Gitea PR 评论 或
  • 工作流日志(便于调试)

发布评论

await octokit.issues.createComment({
  ...github.context.issue,
  body: review,
});