Skip to content
海博賽特
海博賽特
最初的旅程:一個人,也能啟動一個世界

我怎麼用 GitLab Duo CLI 做 Code Review — 一個社群維護者的日常

大多數人用 GitLab Duo 就是在網頁上聊天。但它其實有一個命令列入口,可以切模型、跑批次、塞自訂 context。這篇是我身為社群維護者的實際使用心得,不是教學文,比較像是「欸我發現這個東西滿好用的,跟你講一下」。

For English readers, switch to the English version.EN
Contents +

先講清楚:我是 GitLab 的社群貢獻者(Community Contributor),透過貢獻者計畫拿到 Duo Enterprise 的使用權限。Duo CLI 需要 GitLab Premium 或 Ultimate 方案搭配 Duo Pro / Duo Enterprise 附加元件。我不是 GitLab 員工,這篇是我自己的使用心得。

從一個意外的發現開始

老實說,我一開始也是只用 GitLab Duo Chat — 就是 MR 頁面上那個 AI 聊天框。問問「這段 code 在幹嘛」「幫我寫個 commit message」之類的。夠用,但就那樣。

直到有一天我需要一口氣 review 好幾個模組的 code,在網頁上一個一個問實在太慢了。我翻了一下 glab 的文件,發現有個 glab duo cli run 指令。試了一下,嗯,這才是正確的打開方式。

它跟網頁版最大的差別是什麼?可以寫腳本。 你可以把 AI 分析變成一個可以重複執行的流程,不用一直坐在螢幕前面跟它對話。

而且 — 這點很多人不知道 — CLI 和網頁版的會話是同步的。 你可以在網頁上開一段對話,然後用 /sessions 指令在 CLI 接著繼續。反過來也行。IDE 擴充套件也通。三個入口,同一個對話。

你的第一個 Duo CLI 指令

裝好 glab CLI 之後(brew install glab 或照官方文件裝),Duo CLI 有兩種模式:

互動模式 — 就像在終端機裡面開一個 AI 對話:

glab duo cli

進去之後可以直接打字問問題,用 /model 切換模型,用 /sessions 列出之前的對話(包含你在網頁或 IDE 裡的),用 /new 開新對話。

無頭模式(headless) — 給腳本用的,跑完就結束:

glab duo cli run -C ~/my-project --goal "看一下這個專案的整體架構,用三句話摘要"

-C 指定 repo 路徑,--goal 是指令。跑完直接印結果,不用互動。

我第一次跑完的感覺是:「喔,這就是我要的。」不用切視窗,結果直接印在終端機,可以 pipe、可以存檔、可以串進其他工具。而且因為會話會同步到網頁版,我跑完之後還可以到 GitLab UI 上繼續追問,不用重來。

可以切模型,這件事改變了我的用法

用網頁版 Duo Chat 的時候,你不太會去想背後是哪個模型。但 Duo CLI 有一個 --model flag,讓你可以指定要用哪個 AI 模型。

這個功能看起來不起眼,實際上超有用。

我有一次好奇,拿同一個 code review 任務分別丟給 9 個不同的模型。結果發現:

  • Claude Opus 4.6 回了 10.2 KB — 最詳盡,每個角度都展開講,適合你想要全面了解的時候
  • Claude Opus 4.7 只回 5.9 KB — 精簡扼要,只講重點,適合你已經大概知道狀況只想確認
  • Gemini 3.5 Flash 回了 4.4 KB — 最快,但相對淺,適合快速掃一眼
  • GPT 5.4 回了 0.3 KB — 直接拒絕回答,安全護欄擋住了(同一個任務 GPT 5.5 就正常)

同一個問題,最長跟最短差了 2.3 倍。而且不是長就好 — 每個模型的思路真的不一樣。

我現在的習慣是:如果是重要的 review,至少用兩個模型跑一次,交叉比對。成本不會多多少(反正都是 Credits),但常常會發現其中一個模型抓到另一個完全漏掉的東西。

# 用不同模型跑同一個任務
glab duo cli run -C ~/project --goal "review 錯誤處理" --model claude-opus-4-6
glab duo cli run -C ~/project --goal "review 錯誤處理" --model kimi-k2
glab duo cli run -C ~/project --goal "review 錯誤處理" --model devstral-2

我的日常工作流

講一下我平常怎麼用。我同時會用到幾個不同的 AI CLI 工具,各有各的強項:

Duo CLI 我拿來做廣度探索。它最大的優勢是多模型切換和成本 — 走 GitLab Credits,對有 Enterprise seat 的人來說是最划算的選項。我會把一個大 repo 拆成幾個模組,每個模組各跑一次快速分析,再用不同模型交叉看。

Claude Code 我拿來做深度挖掘。Duo 標記出來「這邊可能有問題」的地方,我會丟給 Claude Code 深入分析。它有跨 session 的記憶,適合需要來回好幾輪才能搞清楚的問題。

重點不是哪個比較好,是怎麼搭配。Duo CLI 幫你快速掃過全貌,標記可疑的地方;Claude Code 針對可疑的地方深入挖。一個做廣度,一個做深度。

偷偷告訴你一個好用的技巧

直接叫 AI「review 這個 repo」,它會自己翻檔案結構、看 git history,但老實說效率不太好。它不知道哪些東西重要、哪些可以跳過。

我的做法是先用 git log 撈出相關的 commit,然後把結果塞進 prompt:

# 先找相關 commit
git log --all --grep='refactor\|fix\|validate' \
  --regexp-ignore-case --name-only \
  --format='%H %cs %s' > anchors.txt

# 把 commit 歷史當作 context 餵給 Duo
glab duo cli run -C ~/project \
  --goal "以下是近期相關的 commit 歷史:
$(cat anchors.txt)

根據這些 commit,這個 repo 的重構方向是否一致?
有沒有哪些模組被遺漏了?"

為什麼有效?因為 AI 有了具體的錨點,它知道哪些檔案被改過、什麼時候改的、改的原因。分析就會集中在有意義的範圍,不會漫無目的地亂翻。

這個技巧用在技術債盤點特別有效。你先用 git log --grep 撈出所有跟 TODO、FIXME、HACK 相關的 commit,丟給 Duo 分析這些技術債的分布跟嚴重程度。比起讓 AI 自己去找,精準很多。

讓 AI 自己過濾垃圾結果

用 AI 做分析有一個常見的痛點:它回報一大堆東西,但大多數是噪音。你花時間跑分析,又花更多時間人工篩選。

我後來學到一個簡單的方法:在 prompt 結尾加上驗證條件,讓 AI 回報之前先自己篩一遍。

glab duo cli run -C ~/project \
  --goal "檢查這個模組的錯誤處理。

在回報之前,先自我檢查每個發現:
1. 這個問題在預設設定下存在嗎?
2. 有沒有現有機制已經處理了?
3. 影響範圍超出正常使用嗎?

不符合的標為「不適用」並說明原因。"

效果很誇張。有一次跑出來本來有 21 個結果,加上驗證條件後 AI 自己過濾掉 19 個,只留 2 個真的值得看的。省下來的時間拿去看那 2 個真正重要的發現,效率高非常多。

踩過的坑

用了一段時間,有些事情想提醒:

無頭模式每次是新 session。glab duo cli run 跑的話,每次是獨立的。但你可以用 --existing-session-id 接續之前的對話,或者切到互動模式用 /sessions 找回之前的 session。要把上一輪結果當 context 餵進去也可以,用 --ai-context-items 注入檔案。

Credits 會用完的。 GitLab AI 功能走 Credits 計費,方案不同額度不同。跑太開心忘記看額度是真的會發生的事。我建議跑批次之前先確認一下剩多少。

模型品質差異很大。 前面講過了,同一個任務不同模型的回答可以差兩倍以上。重要的分析不要只跑一個模型就下結論。

--dangerously-skip-permissions 要注意。 這個 flag 是跑批次自動化必須的(不然每次都要你手動確認),但它顧名思義跳過了所有權限檢查。只在你信任的 repo 上用。

最後

GitLab Duo 在網頁上就是一個聊天框,很多人用了覺得「嗯就那樣」。但它的 CLI 入口其實打開了一個完全不同的使用方式 — 你可以把 AI 分析變成可重複、可自動化、可比較的流程。

我身為社群維護者,每天都在用這套流程處理 review 工作。它不會取代你的判斷,但確實幫你省下大量「先粗看一遍」的時間,讓你可以把精力集中在真正需要思考的地方。

如果你已經在用 GitLab,glab duo cli run 值得試一下。搞不好你也會跟我一樣,用了就回不去網頁版了。

下一篇我會分享更進階的用法:怎麼把任務拆成矩陣批次跑、timeout 處理、結果自動整理。如果你有興趣,敬請期待。