先理解 Gemini CLI 與 Clash 的分工
Gemini CLI 是在終端機中使用 AI 輔助開發功能的命令列工具,可以協助閱讀程式碼、解釋錯誤、產生修改建議,以及在明確授權後操作工作目錄中的檔案。它的連線通常依賴 HTTPS 請求、網域名稱解析與登入憑證,因此終端機所在的網路環境會直接影響登入、模型請求與檔案分析的穩定性。
Clash 或採用 mihomo 核心的 FlClash,則負責在本機建立代理入口,依照設定檔中的策略組與規則轉送流量。兩者不是同一個程式:Gemini CLI 不會自動讀取 FlClash 的策略選擇,Clash 也不會替 Gemini CLI 管理 API 金鑰。最常見的連接方式,是讓 Gemini CLI 讀取環境變數中的 HTTP 或 HTTPS 代理位址,再將請求交給 Clash 的 mixed-port。
| 元件 | 主要工作 | 排查重點 |
|---|---|---|
| Gemini CLI | 建立登入與模型 API 請求 | 環境變數、登入狀態、終端機錯誤 |
| Clash 或 mihomo | 監聽本機代理連接埠並轉送流量 | 核心是否啟動、策略是否可用、日誌是否報錯 |
| 代理節點 | 連接遠端服務並回傳資料 | 延遲、TLS、封鎖、UDP 或 TCP 穩定性 |
| Gemini 憑證 | 驗證使用者或 API 專案身分 | 金鑰是否有效、帳戶權限是否正確 |
確認本機代理入口
開啟 FlClash 的設定檔或核心資訊頁,確認目前實際使用的 mixed-port。常見值是 7890,但不能直接假設所有安裝環境都使用這個連接埠。有些設定會使用 7897、10809 或其他數值。若 Clash 啟用了 mixed port,通常可以同時接受 HTTP 與 SOCKS5 請求。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
allow-lan: false 代表只允許本機連線,對個人電腦較安全。Gemini CLI 在同一台電腦上執行時,代理位址應使用 127.0.0.1 或 localhost,不要使用區域網路 IP。只有在確實需要讓其他裝置共用代理時,才考慮開放區域網路監聽,並搭配防火牆與存取限制。
準備訂閱與 Gemini CLI 分流設定
在匯入訂閱之前,先確認訂閱產生的是 Clash、Clash Meta 或 mihomo 格式。若設定包含 proxy-providers、rule-providers、Hysteria2、TUIC、VLESS Reality、TUN 或較新的 DNS 欄位,應優先使用支援 mihomo 的客戶端與核心。FlClash 可以在設定頁匯入訂閱 URL,也可以載入本機 YAML;匯入後不要只看節點是否出現,還要確認核心檢查沒有報錯。
Gemini CLI 相關網域可能會因版本、登入方式、API 入口或地區而變化,因此不建議只複製一份過時的網域清單。較穩妥的做法,是將需要使用的 AI 服務網域交給同一個「AI」策略組,並以官方登入或實際錯誤日誌中出現的網域作為後續核對依據。不要把所有流量一律送往代理,否則套件下載、公司內網與本機服務可能受到不必要的影響。
建立可維護的策略組
以下是示意設定。節點名稱必須替換成訂閱中實際存在的名稱;如果直接貼上不存在的節點,mihomo 會在載入或策略選擇時回報錯誤。
proxy-groups:
- name: AI
type: select
proxies:
- AUTO
- DIRECT
- name: AUTO
type: url-test
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
proxies:
- 節點甲
- 節點乙
rules:
- DOMAIN-SUFFIX,googleapis.com,AI
- DOMAIN-SUFFIX,google.com,AI
- DOMAIN-SUFFIX,generativelanguage.googleapis.com,AI
- DOMAIN-SUFFIX,googleusercontent.com,AI
- DOMAIN-SUFFIX,accounts.google.com,AI
- MATCH,DIRECT
這段範例的重點不是固定網域,而是規則結構。proxy-groups 先建立可手動切換的 AI 策略,再用 url-test 從多個節點中挑選回應較快者。rules 由上而下比對,AI 相關規則必須放在最後的 MATCH,DIRECT 之前,否則所有尚未命中的流量會先被直接連線處理。
| 設定方式 | 優點 | 限制 | 適合情境 |
|---|---|---|---|
| 系統代理 | 設定簡單,影響範圍較容易理解 | 部分命令列工具不一定讀取系統代理 | 瀏覽器、一般開發工具與初次測試 |
| 環境變數 | 只對指定終端機工作階段生效 | 不同 Shell 的寫法不同 | Gemini CLI、curl、套件管理工具 |
| TUN 模式 | 可接管不遵循代理設定的程式 | 需要權限,且可能影響 DNS 與本機服務 | 系統代理無法涵蓋的應用程式 |
動手設定 Gemini CLI 的代理
完成 Clash 分流後,建議先不要急著進行完整 AI 工作。先在同一個終端機中設定代理環境變數,再用簡單的 HTTPS 請求測試本機代理是否能建立連線。以下假設 FlClash 的 mixed port 是 7890,如果你的設定不同,請替換為實際數值。
macOS 與 Linux 設定方式
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1
gemini
HTTP、HTTPS 與 SOCKS5 的環境變數並非每個 CLI 都會以完全相同的優先順序讀取。通常先設定 HTTP_PROXY 與 HTTPS_PROXY 已足夠;ALL_PROXY 可作為未明確指定協定時的後備值。如果設定 ALL_PROXY 後某個工具出現異常,應先暫時移除它,避免同一請求同時受到多個代理變數影響。
NO_PROXY 用來排除本機服務。若沒有排除 localhost 與 127.0.0.1,命令列工具呼叫本機 API、開發伺服器或容器服務時,可能被錯誤送入 Clash,造成連線延遲或失敗。若需要連線公司內網,也可以將內部網域加入排除清單,但不要把整個公共網域粗略寫入 NO_PROXY。
Windows PowerShell 設定方式
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:ALL_PROXY = "socks5://127.0.0.1:7890"
$env:NO_PROXY = "localhost,127.0.0.1"
gemini
PowerShell 中使用 $env: 設定的值只會套用到目前視窗及其啟動的子程序。關閉終端機後,這些變數通常不會保留。這種暫時設定很適合測試,因為不會影響其他應用程式。若確認設定穩定,再按照團隊的安全規範加入 PowerShell 個人設定檔;不建議將 API 金鑰直接寫入共享腳本或提交到版本控制系統。
確認代理是否真的生效
先使用不包含帳戶資料的公開 HTTPS 網址測試請求,再啟動 Gemini CLI。若 curl 能透過代理取得回應,但 Gemini CLI 仍然失敗,問題可能在登入流程、金鑰權限、CLI 支援的環境變數或特定 API 網域規則,而不是 Clash 基礎連線。
curl -I --connect-timeout 10 https://www.gstatic.com/generate_204
# 檢查目前 Shell 是否有代理變數
env | grep -i proxy
Windows PowerShell 可以使用以下命令查看變數:
Get-ChildItem Env:*proxy*
同時開啟 FlClash 的連線記錄,執行一次 Gemini CLI 請求。若日誌中完全沒有相關網域,表示 CLI 沒有讀取代理變數、流量被其他網路層處理,或目前命令並未發出請求。若日誌顯示連線命中 DIRECT,則需要檢查規則順序;若命中 AI 卻持續 timeout,應切換策略組中的節點並觀察錯誤類型。
登入憑證與開發工作流的安全做法
Gemini CLI 的登入方式可能包含瀏覽器授權、環境變數 API 金鑰或特定雲端專案憑證。不同版本的命令與支援範圍可能不同,因此應以目前安裝版本的內建說明為準。可以先執行 gemini --help,查看登入、設定與診斷相關的子命令,不要把網路文章中屬於舊版的參數直接套用到目前環境。
若採用 API 金鑰方式,建議讓金鑰只存在作業系統的環境變數、密碼管理器或 CI/CD 的密鑰儲存區。不要在命令列參數中反覆貼上金鑰,因為部分系統會將完整命令保留在歷史記錄中。使用版本控制時,也應檢查 .env、暫存檔與除錯輸出是否已加入忽略規則。
- 為不同用途建立不同金鑰,並設定合理的配額與權限。
- 不要讓 Gemini CLI 在未檢查的專案目錄中自動執行破壞性命令。
- 涉及公司程式碼時,先確認組織的資料處理政策與模型服務條款。
- 將 Git 未提交變更先備份,再讓工具提出大範圍修改建議。
- 遇到登入失敗時,先區分代理連線錯誤、OAuth 回呼錯誤與帳戶授權錯誤。
對實際開發而言,建議將工作流程分成三階段。第一階段只確認 Clash 核心、代理連接埠與 DNS 正常;第二階段在乾淨的測試專案中完成 Gemini CLI 登入並發出簡短請求;第三階段才載入大型程式庫、執行測試或授權工具修改檔案。每一階段都保留終端機錯誤與 Clash 連線日誌的時間點,發生問題時比較容易定位。
常見問題與故障排查
Gemini CLI 顯示連線逾時,但瀏覽器可以使用,該怎麼辦?
先確認 Gemini CLI 所在的終端機是否真的設定了 HTTPS_PROXY,再查看 FlClash 連線記錄。瀏覽器可能使用系統代理,而命令列工具完全不讀取該設定。若日誌沒有請求記錄,優先修正環境變數;若有記錄但節點逾時,切換 AI 策略組中的節點,並檢查 DNS、TLS 與服務端回應。
應該使用 HTTP 代理還是 SOCKS5 代理?
Gemini CLI 若支援標準 HTTP 代理,通常可先使用 http://127.0.0.1:7890,因為 mixed port 對 HTTPS 請求的相容性較直觀。若工具明確要求 SOCKS5,再使用 socks5://127.0.0.1:7890。不要把控制介面的 9090 填入代理變數;external-controller 是管理 API,不是網頁代理入口。
開啟 TUN 後仍然無法讓 Gemini CLI 連線,原因可能是什麼?
TUN 並不等於所有流量都必然使用同一條代理。請檢查 TUN 權限、自動路由、DNS 劫持、系統防火牆與規則模式。若已透過環境變數設定代理,先暫時關閉 TUN 或反過來測試,避免兩種接管方式同時造成判斷混亂。也要確認 AI 網域沒有被規則送往 REJECT 或錯誤的直連策略。
可以把 API 金鑰直接寫進 Clash 設定檔嗎?
不建議。Clash YAML 主要用於代理、DNS 與規則設定,API 金鑰應由 Gemini CLI 的環境變數或安全憑證機制管理。把金鑰寫入 YAML 會增加同步、備份與截圖外洩的風險,也可能被誤提交到版本控制系統。若金鑰已出現在公開檔案中,應立即撤銷並重新建立。