我怎麼用 GitLab Duo CLI 做 Code Review — 一個社群維護者的日常
大多數人用 GitLab Duo 就是在網頁上聊天。但它其實有一個命令列入口,可以切模型、跑批次、塞自訂 context。這篇是我身為社群維護者的實際使用心得,不是教學文,比較像是「欸我發現這個東西滿好用的,跟你講一下」。
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 claude-opus-4-7
glab duo cli run -C ~/project --goal "review 錯誤處理" --model gemini-3-5-flash
我的日常工作流
講一下我平常怎麼用。我同時會用到幾個不同的 AI CLI 工具,各有各的強項:
Duo CLI 我拿來做廣度探索。它最大的優勢是多模型切換和成本:走 GitLab Credits,對有 Enterprise seat 的人來說是最划算的選項。我會把一個大 repo 拆成幾個模組,每個模組各跑一次快速分析,再用不同模型交叉看。
Claude Code 我拿來做深度挖掘。Duo 標記出來「這邊可能有問題」的地方,我會丟給 Claude Code 深入分析。它有跨 session 的記憶,適合需要來回好幾輪才能搞清楚的問題。
重點不是哪個比較好,是怎麼搭配。Duo CLI 幫你快速掃過全貌,標記可疑的地方;Claude Code 針對可疑的地方深入挖。一個做廣度,一個做深度。
用 git log 當錨點
直接叫 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 處理、結果自動整理。如果你有興趣,敬請期待。