星期六, 11月 14, 2026

Herdr 與 herdr-file-viewer 安裝小記

Herdr 與 herdr-file-viewer 安裝小記


環境:

  • macOS 26.6.2
  • Herdr 0.9.5
  • herdr-file-viewer 1.18.0
  • git-delta 0.20.1 / glow / bat
  • git-graph 0.8.3
  • Antigravity CLI 1.5.9

今天來安裝最近很熱門的套件 Herdr, 我裝的是 CLI, 然後他也有 GUI

安裝想法

  • Herdr 相對於 Tmux 已知道 AI agent 以及他的狀態, 故在多 agent 的工作情境時, 可以讓 herdr 去關注 ai agent 的狀況, 讓人類即時接手
  • 想要找個 vscode 的 CLI 平替環境 (檔案樹觀察 與 git 分支歷史)

這次使用專為 AI Agent 設計的終端機工作區管理工具 Herdr,搭配社群外掛 herdr-file-viewer(GitHub https://github.com/smarzban/herdr-file-viewer )與 git-graph,在 CLI 環境組出一個輕量 VS Code CLI 平替 工作區。

1. 使用 Homebrew 安裝 Herdr

Herdr 已經收錄在 Homebrew core 中,直接透過 brew 即可安裝:

# 安裝 Herdr
brew install herdr

# 確認版本
herdr --version

實際安裝與版本輸出:

==> Downloading bottle manifests
✔︎ Bottle Manifest herdr (0.9.5)
==> Fetching downloads for: herdr
✔︎ Bottle herdr (0.9.5)
==> Pouring herdr--0.9.5.arm64_tahoe.bottle.tar.gz
🍺  /opt/homebrew/Cellar/herdr/0.9.5: 12 files, 24.6MB
==> Caveats
zsh completions have been installed to:
  /opt/homebrew/share/zsh/site-functions

herdr 0.9.5

2. 安裝 herdr-file-viewer 外掛與渲染工具

接著使用 Herdr 內建的 plugin install 安裝 smarzban/herdr-file-viewer。它會自動抓取對應 macOS 架構的 prebuilt binary,不需要在本地重編 Rust。另外為了讓檔案預覽支援漂亮的 Git Diff、Markdown 與語法高亮,一併確認 git-delta、glow、bat 都已安裝:

# 安裝 herdr-file-viewer plugin
herdr plugin install smarzban/herdr-file-viewer

# 補齊 Diff 渲染器 git-delta(環境已有 glow 與 bat)
brew install git-delta

# 查看已安裝的 plugin 列表
herdr plugin list

安裝過程會列出 Plugin 預覽資訊(包含綁定的 6 個 actions 與 2 個 panes),輸入 y 即可完成:

Plugin install preview:
  id: herdr-file-viewer
  name: herdr-file-viewer
  version: 1.18.0
  source: smarzban/herdr-file-viewer
  commit: d17a068ee753daf5ba205bafd59c130b81b8c6c0
  actions: 6
  panes: 2
    build: /bin/sh scripts/fetch-or-build.sh
    action open-file-viewer: bash scripts/open-file-viewer.sh
    action open-file-viewer-tab: bash scripts/open-file-viewer-tab.sh
    pane file-viewer: ./target/release/herdr-file-viewer
    pane root-picker: ./target/release/herdr-file-viewer --pick-root
Install this plugin? [y/N] y
Installed herdr-file-viewer from smarzban/herdr-file-viewer.
Config: /Users/max/.config/herdr/plugins/config/herdr-file-viewer

3. 設定檔路徑與目錄結構

Herdr 的設定檔與外掛統一放在 ~/.config/herdr/ 目錄下:

  • ~/.config/herdr/config.toml:Herdr 主設定檔(設定快捷鍵與主題)
  • ~/.config/herdr/plugins.json:已安裝 Plugin 清單與版本紀錄
  • ~/.config/herdr/plugins/config/herdr-file-viewer/config.toml:File Viewer 專屬設定檔

在 ~/.config/herdr/config.toml 設定快捷鍵與介面調整:

  • 淺色主題([theme]):macOS 內建終端機預設是白底,而 Herdr 預設載入深色的 catppuccin,會導致側邊欄選取列變成黑底壓住深灰字。改設為淺色的 catppuccin-latte 並開啟 auto_switch = true,配色就順眼多了。
  • 顯示 Agent 狀態文字([ui.sidebar.agents]):預設側邊欄只顯示小圓點 state_icon(○),補上 "state_text" 後,就會直接印出 idle、working、done、blocked 文字,搭配 delivery = "herdr" 開啟視窗內 Toast 彈出通知。
  • 檔案總管快捷鍵([[keys.command]]):綁定 prefix+f 一鍵開啟或收合右側的 herdr-file-viewer 分割視窗。
# ~/.config/herdr/config.toml
onboarding = false

[theme]
name = "catppuccin-latte"
auto_switch = true
dark_name = "catppuccin"
light_name = "catppuccin-latte"

[ui.sidebar.agents]
row_gap = 1
rows = [["state_icon", "workspace", "tab"], ["agent", "state_text"]]

[ui.sidebar.spaces]
row_gap = 1
rows = [["state_icon", "workspace", "state_text"], ["branch", "git_status"]]

[ui.toast]
delivery = "herdr"
delay_seconds = 1

[[keys.command]]
key = "prefix+f"
type = "plugin_action"
command = "herdr-file-viewer.open-file-viewer"
description = "open file viewer in split"

[[keys.command]]
key = "prefix+shift+f"
type = "plugin_action"
command = "herdr-file-viewer.open-file-viewer-tab"
description = "open file viewer in tab"

  • 所以開啟與關閉 herdr-file-viewer 的方式都是:先按 快捷鍵 Ctrl + b 放開後再按 f 就可以(畫面沒有獨立按鈕可用滑鼠點開,必須按快捷鍵呼叫;但打開視窗之後,裡面點選檔案、展開資料夾、滾輪捲動、拉動分隔線與反白複製都完全支援滑鼠操作!)

為了讓 Herdr 更精準捕捉 agy(Antigravity CLI)的執行與等待狀態,再安裝內建的 integration Hook,並執行 reload-config 讓設定直接熱重載生效:

# 安裝 Antigravity CLI 狀態回報 Hook
herdr integration install antigravity-cli

# 熱重載 config.toml(不需關閉現有視窗)
herdr server reload-config

執行輸出:

installed antigravity-cli integration hook to /Users/max/.gemini/config/hooks/herdr-agent-state.sh
ensured antigravity-cli hooks at /Users/max/.gemini/config/hooks.json
{"id":"cli:server:reload-config","result":{"diagnostics":[],"status":"applied","type":"config_reload"}}

另外在 ~/.config/herdr/plugins/config/herdr-file-viewer/config.toml 開啟 expand_changed = true,讓有 Git 異動的資料夾在啟動時自動展開:

# ~/.config/herdr/plugins/config/herdr-file-viewer/config.toml
expand_changed = true
update_check = false
tree_width = 34
tree_max_cols = 34

安裝與設定完成後,用 find / ls 確認一下 ~/.config/herdr 的實際目錄結構:

~/.config/herdr/
├── config.toml
├── plugins.json
├── .plugins.lock
└── plugins/
    ├── .locks/
    │   └── .herdr-file-viewer-c993314e2614.lock
    ├── config/
    │   └── herdr-file-viewer/
    │       └── config.toml
    └── github-installations/
        └── herdr-file-viewer-c993314e2614/
            └── 90808-0/
                ├── .in-use
                └── checkout/
                    ├── herdr-plugin.toml
                    ├── scripts/
                    └── target/release/herdr-file-viewer

4. 實測 herdr-file-viewer:Git 狀態標記與即時 Diff

就像 VS Code 會在檔案總管標示 M(Modified)與 U(Untracked),herdr-file-viewer 則是採用原生 git status -s 的符號標準,在左側目錄樹直接用顏色與符號標出 Git 狀態:

  • ●(亮紅色):內含未提交變更的資料夾(Dirty directory)
  • M(亮紅色):已修改的檔案(Modified),游標移過去右側會自動用 delta 渲染紅綠對比 Diff
  • A(亮綠色):已加入暫存區的新檔案(執行 git add 後的 Added 狀態)
  • ?(亮綠色):未追蹤的新檔案(對應 git status -s 的 ??,等同於 VS Code 的 U)

在 herdr-file-viewer 視窗內除了可以直接用滑鼠點擊、雙擊展開、滾輪捲動之外,幾個常用的單鍵快捷鍵也很順手(不需要按 Ctrl + b):

  • ] / [:直接跳到下一個/上一個有 Git 異動的檔案
  • c:切換「只顯示有 Git 異動的檔案」(Changed-only 過濾)
  • v:切換右側檢視模式(Git Diff ⇄ Markdown 渲染 ⇄ 原始碼高亮)
  • f / s:f 模糊搜尋檔名、s 搜尋專案內文
  • ? / q:? 開啟說明面板、q 或 Esc 關閉視窗

實際在測試專案 demo-app 開啟 herdr-file-viewer 的終端機畫面(按 ] 可直接跳到下一個變更檔 src/main.py 查看即時 Diff):

┌demo-app──────────────────────┐┌main.py─────────────────────────────────────────────────────┐ 
│● ▾ src                       ││                                                            │ 
│      config.py               ││ src/main.py                                                │ 
│A     helper.py               ││ ───────────────────────────────────────────────────────────│ 
│M     main.py                 ││                                                            │ 
│      retry.py                ││ ───┐                                                       │ 
│M   README.md                 ││ 1: │                                                       │ 
│?   notes.md                  ││ ───┘                                                       │ 
│    pyproject.toml            ││ from src.config import APP_NAME, TIMEOUT_SEC               │ 
│                              ││ from src.config import APP_NAME, TIMEOUT_SEC, MAX_RETRIES  │ 
│                              ││ from src.helper import format_status                       │ 
│                              ││                                                            │ 
│                              ││ def run_task(task_name: str) -> None:                      │ 
│                              ││     print(f"[{APP_NAME}] running {task_name} (timeout={TIME│ 
│                              ││     status = format_status("agy", "working")               │ 
│                              ││     print(f"[{APP_NAME}] {status} -> {task_name} (retries={│ 
│                              ││                                                            │ 
│                              ││ if __name__ == "__main__":                                 │ 
│                              ││     run_task("sync-agents")                                │ 
│                              ││                                                            │ 
│                              ││                                                            │ 
└main──────────────────────────┘└──────────────────────────────────────────────────────? help┘ 

5. 組合技:Herdr 三分割畫面打造 VS Code CLI 平替

最後透過 Herdr 的分割視窗把三個核心工具放在同一個畫面:

  • 左上分區(AI Agent):啟動 agy(Antigravity CLI),Herdr 左下角側邊欄的 agents 區塊會自動辨識出 agy 並追蹤執行狀態。
  • 左下分區(Git Commit 樹):執行 git-graph 觀察 Workspace 的分支與合併歷史,直接平替 VS Code 的 Git Graph 外掛。
  • 右側分區(Files 檔案總管 + Diff):常駐 herdr-file-viewer 隨時檢視目錄結構、Git 狀態標記與程式碼變更。

也可以透過 Herdr CLI 直接在現有 Session 中把這三個分區自動化切出來:

# 1. 在右側開啟 herdr-file-viewer 分割視窗
herdr plugin pane open   --plugin herdr-file-viewer   --entrypoint file-viewer   --placement split   --direction right

# 2. 將左側主視窗往下分割出第二個終端機跑 git-graph
herdr pane split w1:p1 --direction down --ratio 0.62 --no-focus
herdr pane run w1:p3 "clear && git-graph"

# 3. 在左上視窗啟動 Antigravity CLI (agy)
herdr pane run w1:p1 "clear && agy"

實際跑起來的 Herdr 三分區完整終端機畫面(包含左側 Herdr 側邊欄、左上 Antigravity CLI 1.5.9、左下 git-graph 以及右側 herdr-file-viewer):

 spaces                  │   1      +                                                                                                                                                     
                         │┌──────────────────────────────────────────────────────────────┐┌ Files ───────────────────────────────────────────────────────────────────────────────────────┐
 ○ demo-app              ││     ▀▀▀▀▀▀                                                   ││┌demo-app──────────────────────┐┌main.py─────────────────────────────────────────────────────┐│
   main                  ││    ▀▀▀▀▀▀▀▀                                                  │││● ▾ src                       ││                                                            ││
                         ││   ▄▀▀    ▀▀▄                                                 │││      config.py               ││ src/main.py                                                ││
                         ││  ▄▀▀      ▀▀▄                                                │││A     helper.py               ││ ───────────────────────────────────────────────────────────││
                         ││                                                              │││M     main.py                 ││                                                            ││
                         ││  Antigravity CLI 1.5.9                                       │││      retry.py                ││ ───┐                                                       ││
                         ││  sakanamax@gmail.com (Google AI Pro)                         │││M   README.md                 ││ 1: │                                                       ││
                         ││  Gemini 4 Argon (Medium)                                     │││?   notes.md                  ││ ───┘                                                       ││
                         ││  ~/Downloads/local_lab/lab_temp/02_實作中/20261114_herdr/dem │││    pyproject.toml            ││ from src.config import APP_NAME, TIMEOUT_SEC               ││
                         ││                                                              │││                              ││ from src.config import APP_NAME, TIMEOUT_SEC, MAX_RETRIES  ││
                         ││                                                              │││                              ││ from src.helper import format_status                       ││
                         ││ ┃ Introducing Gemini 4 Hydrogen                              │││                              ││                                                            ││
                         ││ ┃ Our daily driver for rapid coding and dependable agentic   │││                              ││ def run_task(task_name: str) -> None:                      ││
                         ││ ┃ execution!                                                 │││                              ││     print(f"[{APP_NAME}] running {task_name} (timeout={TIME││
                         ││ ┃ esc to dismiss                                             │││                              ││     status = format_status("agy", "working")               ││
 new                 menu││───────────────────────────────────────────────────────────── │││                              ││     print(f"[{APP_NAME}] {status} -> {task_name} (retries={││
─────────────────────────││> Auto mode: edits & safe commands auto-approved (shift+t...  │││                              ││                                                            ││
 agents           grouped││───────────────────────────────────────────────────────────── │││                              ││ if __name__ == "__main__":                                 ││
                         ││Gemini 4 Argon (Medium) | policy:always-proceed | effort:medi │││                              ││     run_task("sync-agents")                                ││
 ○ demo-app              ││📂 cwd: ~/Downloads/local_lab/lab_temp/02_實作中/20261114_her │││                              ││                                                            ││
   agy                   │└──────────────────────────────────────────────────────────────┘││                              ││                                                            ││
                         │┌──────────────────────────────────────────────────────────────┐││                              ││                                                            ││
                         ││ ○<┐  014f1cd (HEAD -> main) chore: 合併 feat/retry-policy    │││                              ││                                                            ││
                         ││ │ │          分支                                            │││                              ││                                                            ││
                         ││ ● │  0b8ded6 docs: 補充 README 啟動說明                      │││                              ││                                                            ││
                         ││ │ ●  2d79184 (feat/retry-policy) feat: 實作 should_retry     │││                              ││                                                            ││
                         ││ │ │          判斷邏輯                                        │││                              ││                                                            ││
                         ││ │ ●  071c22b feat: 新增 MAX_RETRIES 重試次數設定             │││                              ││                                                            ││
                         ││ ├─┘                                                          │││                              ││                                                            ││
                         ││ ●    2f5fc79 feat: 初始化專案結構與核心任務執行器            │││                              ││                                                            ││
                         ││max@Max-MacAir demo-app %                                     │││                              ││                                                            ││
                         ││                                                              │││                              ││ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄            ││
                         ││                                                              ││└main──────────────────────────┘└──────────────────────────────────────────────────────? help┘│
                        «│└──────────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────────────────────────────────────────┘

不用開肥大的 GUI 編輯器,在純終端機裡就能同時掌握 AI Agent 狀態、Git 分支演進、檔案樹與即時 Diff,is not really useful :)
又前進一步 ~ enjoy it

Reference

  • https://herdr.dev
  • https://github.com/smarzban/herdr-file-viewer

星期六, 8月 22, 2026

GCP with gemma4 實驗小記


GCP with gemma4 實驗小記

環境:

  • GCP GCE (e2-custom-4-8192 / g2-standard-4 Spot)
  • GCP Cloud Run with L4 GPU (Serverless)
  • Ollama 0.32.14 / vLLM / Docker
  • Cline CLI 3.0.55

最近想測測看8GB 記憶體的筆電, 如果因成本或是資料考量可以跑哪些落地的模型? 主要測試模型為 Google Gemma 4 (2B / E2B) 模型, 模型的資訊可以參考

  • https://ai.google.dev/gemma/docs/core?hl=zh-tw

想知道不同算力的表現以及環境極限,另外接上 ollama 與 Cline CLI 進行任務流暢度測試。

測試的環境為以下 3 個

  • GCE 純 CPU ( e2-custom-4-8192 )
  • GCE L4 GPU ( g2-standard-4 Spot )
  • Cloud Run with L4 GPU

Cline CLI

Ollama


1. GCE without GPU:純 CPU 模擬 8GB 記憶體極限與階梯壓測

為了模擬本機 M3 筆電環境承受力,在 GCP 台灣機房 (`asia-east1-c`) 開一台 4 vCPU / 8GB RAM 的純 CPU Spot 實例來精準模擬 8GB 筆電的物理極限,每小時成本只要約 NT$ 1.1 元:

# 建立台灣區 4 vCPU + 8GB RAM 純 CPU 模擬機 (Spot)
gcloud compute instances create gemma4-cpu-sim \
    --zone=asia-east1-c \
    --custom-cpu=4 \
    --custom-memory=8192MB \
    --provisioning-model=SPOT \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --boot-disk-size=50GB \
    --boot-disk-type=pd-balanced


接下來透過自寫的測試腳本進行 512 到 32k tokens 的階梯式 Context 壓力測試,實測數據如下:

📊 測試一:Gemma 2B (INT4, 1.6 GB) 階梯實測數據(安全綠燈)

Context 長度 首字延遲 (TTFT) 解碼速度 (TPS) 實體 RAM 峰值 Swap 佔用 CPU 使用率 測試狀態
512 tokens 32.14 秒 7.49 tps 2,802.8 MB 0.0 MB 53.7% ✅ 通過
1,024 tokens 49.92 秒 6.61 tps 2,872.4 MB 0.0 MB 52.5% ✅ 通過
2,048 tokens 85.26 秒 5.54 tps 3,002.9 MB 0.0 MB 57.5% ✅ 通過
4,096 tokens 102.63 秒 (1.7分) 5.77 tps 3,041.0 MB 0.0 MB 63.4% ✅ 通過
8,192 tokens 211.48 秒 (3.5分) 4.35 tps 3,455.0 MB 0.0 MB 60.0% ✅ 通過
16,384 tokens 1.16 秒 (窗口滾動) 4.32 tps 3,500.6 MB 0.0 MB 52.5% ✅ 通過
32,768 tokens 1.34 秒 (窗口滾動) 4.28 tps 3,528.5 MB 0.0 MB 52.5% ✅ 通過

💥 測試二:Gemma 4 E2B (7.2 GB 完整版) 8GB 記憶體物理極限實測(超載紅燈)

Context 長度 首字延遲 (TTFT) 實體 RAM 峰值 Load Average 測試狀態 崩潰原因分析
512 tokens > 600 秒 (超時) 7,922.0 MB (96.7%) 36.42 (嚴重超載) ❌ TIMEOUT 7.2GB 塞滿 8GB RAM,引發 Memory Thrashing,CPU 癱瘓
1,024 tokens > 600 秒 (超時) 7,931.2 MB (96.8%) 33.12 (嚴重超載) ❌ TIMEOUT 實體記憶體徹底枯竭 (< 100MB),Kernel 反覆回收記憶體超時

純 CPU 邊界結論:

  • 2B INT4 量化版:記憶體佔用落在 2.8 ~ 3.5 GB,全流程 0 MB Swap,容量極度安全。但純 CPU 的 Prefill(首字延遲)是最大軟肋,8k context 光等第一個字就要等 3.5 分鐘。
  • 7.2GB 未量化大模型:直接把 8GB 記憶體吃光,系統狂換頁崩潰。8GB 設備千萬別越級挑戰 7GB 以上的大模型。
  • Modelfile 注入 Tool Calling:透過自訂 Modelfile 宣告 {{ range .Tools }} 可以解除 Ollama 官方標籤的門禁限制;但 2B 模型純靠 Prompt 注入時,容易受原廠 Safety RLHF 誤觸發,指令調用時會吐出「我是語言模型不能執行指令」的防護回答 :)

感想: 在這個狀態下 gemma4 2b 是可以運作的, 但是因為規格的關係, 使用者體驗與速度是遠遠不及格

2. GCE with GPU:G2 專用實例 + NVIDIA L4 (24GB) 滿血版實測

接下來想要知道架構提升於體驗上的差異, 使用專用機型 g2-standard-4 , 內建 1 張 24GB L4 GPU + 4 vCPU + 16GB RAM,不用也不需要手動外掛。開啟 Spot 模式每小時僅約 NT$ 8~11 元:

# 建立 GCE L4 GPU Spot 滿血實例 (台灣彰化機房)
gcloud compute instances create gemma4-l4-server \
    --zone=asia-east1-c \
    --machine-type=g2-standard-4 \
    --provisioning-model=SPOT \
    --image-family=common-cu129-ubuntu-2204-nvidia-580 \
    --image-project=deeplearning-platform-release \
    --boot-disk-size=150GB


載入 Gemma 4 E2B (7.2 GB) 後執行 nvidia-smi,實測結果非常驚艷:

  • 顯存佔用僅 12.7%:模型載入後僅佔用 2,924 MiB (~2.9 GB) 顯存,剩餘高達 20.1 GB 顯存,能完整吞下 128k 超長 Context Window。
  • 秒級極速回應:首字延遲 (TTFT) 從純 CPU 的 100 多秒驟降至 45 毫秒,生成速度達 90 ~ 120 tokens/s。
  • 原生 Thinking 與精準 Tool Calling:完全解決了 2B 小模型的安全防護誤判問題,模型會先在內部進行思考分析需求,再精準輸出標準 tool_calls 結構。

透過 SSH 隧道轉發到本機,並啟動 Cline CLI 進行 Multi-Agent 協同測試:

# 1. 建立 SSH 本地加密隧道
gcloud compute ssh gemma4-l4-server --zone=asia-east1-c -- -N -L 11434:localhost:11434

# 2. 啟動 Cline CLI 互動 TUI 介面
cline -i

在終端機指派複雜任務(「建立 teammate 去執行 head -n 15 README.md 並回報結果」):Lead Agent 自主調用 spawn_agent 派工,子代理執行終端指令抓取內容並彙整,最後自動呼叫 ask_question 提供互動選項,達成 100% 自主 Multi-Agent

感想: 只能說架構真的有差異, 不管是 gemma 2b / e2b 都是非常絲滑與反應迅速


3. Cloud Run with GPU:Serverless 雲原生無伺服器架構

另外一個測試是 Cloud Run with L4 GPU 不用開開關關 GCE 或是使用 ssh 轉 port, 使用 cloud run 是很好的方式, 可以使用完即關閉或是 設定 instance = 0 的方式來節費或是避免誤用:

# 部署至 Cloud Run with 1x NVIDIA L4 GPU (Serverless)
gcloud beta run deploy gemma4-e2b-cloudrun \
    --image=asia-east1-docker.pkg.dev/sakana-2026-gcp/gemma-repo/gemma4-e2b:latest \
    --gpu=1 \
    --gpu-type=nvidia-l4 \
    --cpu=4 \
    --memory=16Gi \
    --min-instances=0 \
    --max-instances=1 \
    --region=asia-southeast1 \
    --no-gpu-zonal-redundancy \
    --allow-unauthenticated \
    --set-env-vars="API_KEY=my-gemma-key-2026"

Cloud Run GPU 架構核心特色:

  • Scale-to-Zero(閒置零費用):沒有推論請求時自動縮容至 0 實例,運算費用為 $0.00 元。推論時按秒計費(約 $0.000324 USD / 秒)。搭配 7.2GB 映像檔儲存費(約 NT$ 23 元/月),一般日常開發每月總花費僅在 NT$ 70 ~ 450 元 區間。
  • 原生 HTTPS 直連:直接取得 Google 官方 HTTPS 網址,Cline CLI 免開任何 SSH 背景隧道即可直連。
  • 容器層 API Key 防護:在 Dockerfile 內建 FastAPI 認證閘道,未帶有效 Key 之請求在 0.1 秒內直接回傳 401 Unauthorized,有效防範盜連。
  • 一鍵休眠與喚醒錢包防禦機制:
    # 一鍵強制休眠 (保證 0 實例啟動,$0 元)
    gcloud run services update gemma4-e2b-cloudrun --region=asia-southeast1 --max-instances=0
    
    # 一鍵喚醒 (恢復隨叫隨用)
    gcloud run services update gemma4-e2b-cloudrun --region=asia-southeast1 --max-instances=1

4. 三種架構橫向對比與環境清理

架構方案 算力規格 推論速度 (E2B) 連線方式 計費與預估成本 最佳適用情境
GCE without GPU 4 vCPU / 8GB RAM ~7.5 tps (TTFT 32~211s) SSH Tunnel Spot 約 NT$ 1.1 / hr 極限壓測、短 Prompt 本地輕量工具
GCE with GPU 1x NVIDIA L4 (24GB) 90~120 tps (TTFT < 50ms) SSH Tunnel / IP 白名單 Spot 約 NT$ 8~11 / hr 長時間密集 Agent 任務、大型程式庫解析
Cloud Run with GPU ⭐ 1x NVIDIA L4 (24GB) 90~120 tps (TTFT < 50ms) 原生 HTTPS 直連 按秒計費(閒置 $0 元) 日常開發隨叫隨用、行動辦公零運維首選

實驗完成後養成良好習慣銷毀雲端資源,確保帳單零殘留:

# 刪除 GCE 實例
gcloud compute instances delete gemma4-l4-server --zone=asia-east1-c --quiet

# 刪除 Cloud Run 服務
gcloud run services delete gemma4-e2b-cloudrun --region=asia-southeast1 --quiet

又前進一步 ~ enjoy it :)


星期六, 8月 15, 2026

2026 Google IO China 小記


2026 Google IO China 小記


今年有幸因為 GDE 的關係, 獲邀參加 Google IO China 研討會


首先要先謝謝 Google Eric ShangKuan  (  https://www.linkedin.com/in/ericsk/ ) , Yuying Tsai ( https://www.linkedin.com/in/yuying-tsai/  ) 以及所有項目組的夥伴組織活動與規劃.


這次的研討會主要是 4 天的行程, 亞洲的 GDG 與 GDE 都會共同參加與交流


第一天晚上是 Community Welcome Dinner


首先是很開心收到項目組安排的禮物



  • 研討會有 Dress code 個人覺得很好, 可以很快的識別與交流


晚上由接駁車接送到 其昌栈码头



在船上舉行歡迎晚宴與互動



採取 Buffet 的方式, 既可以交流互動也可以滿足 211 餐盤需求


上次去上海應該是 14 年前, 去內蒙當志願者, 但是那個時候沒有機會好好看黃浦江, 感謝 Google 可以讓我多解鎖一個成就


第二天與第三天 正式參加 Google IO China 


首先是 Keynote



這邊我覺得很棒的地方是所有的位置都有即時翻譯的耳機, 可以在外賓英文演說的時候使用中文聽講, 如我大家有興趣也可以從剛剛的會議首頁還觀察回放, 我覺得即時翻譯的部分很有品質


議程的部分 https://ioconnectchina.googlecnapps.cn/sessions/ 

  • 8/12 是 AI 與 Chrome

    • 這一天我主要聚焦在 Gemma 的相關議程, 也看得出 Google 在 Gemma 於不同設備, 例如 眼鏡或是端點裝置有了很多的案例與投入, 以及 Cloud Run / GKE 結合 Gemma 的相關案例與資訊, 這個部分吸引了我對於這方面的投入.

    • 另外我覺得有一個很棒的點是有社會公益案例分享, 這個方向放到正式商業議程內, 我在台灣的研討會還真的沒有太大的印象, 我有去參訪華南理工大學 (https://www.scut.edu.cn/new/ ) 的攤位, 詢問有關於他們設計的線上教育平台, 使用 Gemma 來進行教育輔助, 也有把相關程式碼放到 Github 上面, 覺得很棒

  • 8/13 是 Android 與 Cloud 

    • 這一天當然是聚焦在 Cloud 議程上

    • Ankur Kotwal 一開始以即時英文翻中文的語音介面, 給大家很深刻的印象, 介紹相關的技術以及使用 Agents CLI ( https://github.com/google/agents-cli ) 即時打造剛剛的翻譯語音介面 讓大家對 agents cli 這個工具的學習與使用更有興趣

    • 另外也提到 Google Skills ( https://www.skills.google/ )來串 workshop 與相關研習及介紹

    • 史洁 的 超级个体 到 AI 原生组织 的 Level 1 ~ Level 5 區分與 Policy 控管與演進也進一步把 AI 治理想法讓參與的會眾了解, 為何要採取企業的方案而不是各自單打獨鬥


工作坊的部分 ( https://ioconnectchina.googlecnapps.cn/workshops/ )

  • 一樣包涵 4 個面向 ( AI / Chrome / Android / Cloud ), 採取登記制與現場候補機制

  • 我有候補排上 从开发到生产,全面体验 Agent Platform 中的 Agent CLI

    • 使用 Google Skills 的 Lab 課程讓參與的學員體驗 agents cli 安裝與應用實作, 透過 Kahoot 與學員互動及增加相關知識亮點


開發者沙龍的部分 ( https://ioconnectchina.googlecnapps.cn/meetups/ ) 



接下來聊聊其他的


首先是攤位的部分



  • Gemini 奇趣影棚 可以讓參展人快速得到不同面向的照片,增加參與感以及感受 Gemini 的功能



也有不同面向的攤位, 如同剛剛說的社會公益 / 藝術攤位


以及不同面向的 Google 攤位


現場有很多地方都有小冰櫃, 也是小亮點


午餐飯盒真的也是管飽, 裡面竟然還有三杯雞 :)


第四天也是最後一天是 GDE Summit , 地點在 Google 上海辦公室




最後再次感謝 Google 的邀約與所有項目組的辛苦付出


也很開心可以有這個機會與大家交流





References