DEV Community

Cover image for CodiumAI PR-Agent,在 GitLab 上用 AI 來 Code Review
Let's Write
Let's Write

Posted on • Edited on • Originally published at letswrite.tw

CodiumAI PR-Agent,在 GitLab 上用 AI 來 Code Review

本篇要解決的問題

最近看到有人寫了一篇用 AI 來 Code Review 的文章後,才發現原來有開源的好工具可以來使用,也剛好組內也有人提說,要不要來 Code Review,但因為需求常常太多,光開發就沒什麼時間了,就沒有時間來看 Code Review 這工程。

如果 AI Code Review 真的好用,那之後就要來想辦法看能不能做在開發流程裡。

這篇先研究 GitLab 的版本,之後有時間再來看 GitHub 版的。

本篇主要看到的參考文章是這篇:將 AI Code Review 整進 CICD Day1

因為作者主要用的程式語言是 Python,所以 August 在實作前端的部份時,主要使用的程式碼都來自於官方的說明文件,以下是參考來源:


準備好必要東西:GitLab 帳號及 Token、OpenAI API Key

本篇主要是在 GitLab 上執行 AI Code Review,所以必要的東西就是標題上寫的這三項:

GitLab 帳號

GitLab 帳號是免費的就可以申請的。

進到官方註冊頁面,可以使用信箱或第三方帳戶進行註冊:https://gitlab.com/users/sign_up

GitLab Access Token

註冊好 GitLab 帳號後,進到後台的 Access tokens 的頁面中,就可以開始新增一組 Token。

點擊 新增令牌

設定 Token 的部份:

1 先寫好一個自己認得出功用的名稱。

2 到期時間可以點擊「X」把日期欄位清空,這樣就會是預設的 1 年以內有效。

3 選取範圍,第一個「api」打勾。

設定 Token

這三步做完後,最後點擊下方的「建立 個人存取令牌」,就會產生一組 Token,畫面如下:

複製 Token

點擊上圖框起來的按鈕,就可以複製這組新建的 Token,複製好後,我們要自行存起來,如果這邊沒存到,以後要再存就要再重新生成一組新的。

OpenAI API Key

這點要注意的是,每次 API 的調用,都需要酷錢錢~

而且現在好像是要先刷一筆金額進去,比方 5 美金後,才能開始使用的預付制,之前 August 因為沒有先預付,所以 API 一直調用不起來,直接先刷了 5 美金後才成功。

但也不用緊張,因為 OpenAI 的 API 費用愈來愈便宜了,之後我們會有一步是改用 GPT-4o-mini,就可以大量的來使用。

取得 API Key 的方式很簡單,先進到 OpenAI 的 API Key 後台:API Key

點擊右上角的 Create 的按鈕

點擊 Create

接著就是取一個認得出來在做什麼的名字,然後再點擊 Create。

建立 Key

建立成功,就會看到畫面上顯示著 Key,最後只需要按下 Copy,把這組 Key 給存下來即可。

取得 Key


GitLab 專案,設定 env 變數

上面一步我們取得了 GitLab Access Token,跟 OpenAI API Key,這二個是很重要的,不能隨意的寫在明碼上,必須要放在環境變數上,一般我們開發時會建一個 .env 檔來用,GitLab 的話則是有一個介面讓使用者直接填寫。

GitLab 開好專案後,點擊左側選單的「設定 > CI/CD」:

進到 CI/CD 設定

接著打開「變數」的這項,再點擊「新增變數」:

新增變數

需要新增的變數就是我們手上有的二個,我們先新增第一個 GitLab Access Token:

建立變數

「保護變數」的部份,照官方說明,如果我們的分支不是保護狀態的話,這個必須要取消勾勾,不然流水線執行時會取不到。

「主鍵」填寫 GITLAB_PERSONAL_ACCESS_TOKEN

「值」填寫我們上一步取得的 GitLab Access Token。

最後按下「新增變數」,就新增了。

之後還要再新增 OpenAI API Key,方式一樣,在「主鍵」的部份改成 OPENAI_KEY 就行。

都建立完後,會看到我們的變數清單像這樣子:

變數清單


提交必要檔案

接著,我們把官方提供的程式碼,提交到 GitLab 專案上,就可以使用 AI Code Review 了。

1 .pr_agent.toml

這個檔案是 AI Code Review 的設定檔,我們要在這個檔案中指定使用的 Model 是 gpt-4o-mini,如果不特別指定,我們 OpenAI API 的費用就會看見飛高高,高到心臟不夠強的話會覺得原來自己在財力上很渺小 XD。

專案根目錄下,新增名為「.pr_agent.toml」的檔案,檔案內容如下:

[config]
model = "gpt-4o-mini-2024-07-18"
model_turbo = "gpt-4o-mini-2024-07-18"
fallback_models = ["gpt-4o-mini-2024-07-18", "gpt-4o-mini"]
Enter fullscreen mode Exit fullscreen mode

這個檔案建立了以後,先提交到 GitLab 上。

先提交到 GitLab 上!

先提交到 GitLab 上!!

先提交到 GitLab 上!!!

因為很重要,所以多說三次。

如果不先把這個檔提交上去,下一步我們把 gitlab-ci 檔提交上去後,預設會先執行的是 gpt4-turbo 的 model,就會看到酷錢錢跟水一樣流走。

因為這套 AI Code Review 是在合併請求時,才會執行,所以 GitLab 預設分支是 main,August 另外建了一個 master 分支,來讓後續可以執行合併。

第一次把 pr_agent 提交上去後,就會有合併的提示,就要先合併了。

合併請求提示

.gitlab-ci.yml

這個檔案就是啟動 AI Code Review 用的,在 GitLab CI/CD 時,如果是合併請求的話,就會執行。

專案根目錄下新增名為「.gitlab-ci.yml」的檔案,檔案內容如下:

stages:
  - pr_agent

pr_agent_job:
  stage: pr_agent
  image: 
    name: codiumai/pr-agent:latest
    entrypoint: [""]
  script:
    - cd /app
    - echo "Running PR Agent action step"
    - export MR_URL="$CI_MERGE_REQUEST_PROJECT_URL/merge_requests/$CI_MERGE_REQUEST_IID"
    - echo "MR_URL=$MR_URL"
    - export gitlab__PERSONAL_ACCESS_TOKEN=$GITLAB_PERSONAL_ACCESS_TOKEN 
    - export config__git_provider="gitlab"
    - export openai__key=$OPENAI_KEY
    - python -m pr_agent.cli --pr_url="$MR_URL" describe
    - python -m pr_agent.cli --pr_url="$MR_URL" review
    - python -m pr_agent.cli --pr_url="$MR_URL" improve
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
Enter fullscreen mode Exit fullscreen mode

檔案建立完後,也可以先提交了,或是想之後開發到一個階段再提交也可以。

這個檔案一提交上去,之後只要有合併請求,就會自動觸發 AI Code Review。


測試一下威力

最後我們來測試一下 AI Code Review 強不強大。

說是測試,臨時也想不到什麼厲害的錯誤程式碼,所以就讓 GPT 寫了一個:

function calculateSum(a, b) {
  return a + b;
}

let sum = calculateSum(5, 10;
console.log("Sum is: " + sum);
Enter fullscreen mode Exit fullscreen mode

很明顯就是有新手錯誤(咦),然後我們提交上去後,會看到合併請求的提示:

第二次合併請求

建立了合併請求後,就會看到流水線自動在執行:

自動執行流水線

流水線執行完後,就會看到通過的訊息:

流水線通過

頁面往下滑,就會看見 AI 給的 Code Review 結果:

Code Review 結果

很明顯的有把錯誤指出來,還會給出錯誤的嚴重程度。


小結一下

這套 AI Code Review 的工具真的好用,除了 Code Review,還會給分數、自動下標籤、提供描述。

gpt-4o-mini 又是使用成本很低的一個 Model,這幾天不斷的嘗試下來,大概只用掉了 0.1 美金。

However,因為有被說不能把程式碼放上 GitLab、GitHub 等外部平台,所以這個工具還是難以推坑給其他同事。

此外,August 希望在每次 Commit 時就進行 Code Review,以避免提交上線後出現無法回頭的狀況。

下一篇,August 會寫的筆記文就是不依賴 GitLab 的 Pipeline,而且可以在開發者按下 Commit 時,就自動執行 AI Code Review 的方式,敬請期待~

Top comments (0)